第四讲 汇编语言初步
DESCRIPTION
第四讲 汇编语言初步. 目的:用汇编语言编写简单程序. 学习内容. 汇编代码的结构 汇编程序的构成 编写简单算法: y = mx+b. 一、汇编代码的构成. label: || [cond] instruction .unit operand ;comment. 条件寄存器. 功能单元 ( 可选 ). 注释. 操作数: 寄存器 常量 指针. 指令: 助记符 ( mnemonic ) 伪指令 (directive). 标号:代码或 变量地址. x .int 10 MPY .M1 A1, A3, A7 - PowerPoint PPT PresentationTRANSCRIPT
BIT/TI 第四讲 汇编语言初步 1
第四讲 汇编语言初步目的:用汇编语言编写简单程序
BIT/TI 第四讲 汇编语言初步 2
学习内容• 汇编代码的结构• 汇编程序的构成• 编写简单算法: y = mx+b
BIT/TI 第四讲 汇编语言初步 3
一、汇编代码的构成label: || [cond] instruction .unit operand ;comment
标号:代码或变量地址
条件寄存器指令:• 助记符 (mnemonic)• 伪指令 (directive)
功能单元 ( 可选 )
操作数:• 寄存器• 常量• 指针
注释
x .int 10 MPY .M1 A1, A3, A7 || ADD .L1x A2, B2, A5
BIT/TI 第四讲 汇编语言初步 4
常用伪指令汇编指令 说明
.sect 定义一个代码段或数据段.usect 定义一个未初始化数据段
.int.long.word
定义和初始化32位变量
.short.half
定义和初始化16位变量
.byte 定义和初始化8位变量
在 C 语言里 long 是 40 位,在汇编语言里 long 是 32位注意
BIT/TI 第四讲 汇编语言初步 5
二、汇编程序的构成程序=数据结构+算法
数据结构
算法
C 程序的数据结构和算法实现
BIT/TI 第四讲 汇编语言初步 6
汇编程序-数据结构用汇编语言声明数据结构
BIT/TI 第四讲 汇编语言初步 7
汇编程序-算法用汇编语言编写算法
BIT/TI 第四讲 汇编语言初步 8
完整的汇编程序构成.sect “myData”m .int 5x .int 10b .int 2y .int 0.sect “myCode”start LD .D1 *A0,A1 . . .ST .D1 A7,*A6 end B endNOP 5
BIT/TI 第四讲 汇编语言初步 9
三、用汇编指令编写 y=mx+b
1. 数据取入寄存器: m,x,b 存储器- > 寄存器1a. 初始化数据指针1b. 取数据
2. 乘法3. 加法4. 存储数据: y 寄存器- > 存储器
BIT/TI 第四讲 汇编语言初步 10
1a. 指针初始化
32 位常量MVK .S1 m, A0MVKH.S1 m, A0 ; &m - >A0MVK .S1 x, A2MVKH.S1 x, A2 ; &x - >A2MVK .S1 b, A4MVKH.S1 b, A4 ; &b - >A4
BIT/TI 第四讲 汇编语言初步 11
指令 MVKMVK 把一个 16 位常数放入寄存器
BIT/TI 第四讲 汇编语言初步 12
1b. 取数据
LDH .D1 *A0, A1 ; 取 mLDH .D1 *A2, A3 ; 取 xLDH .D1 *A4, A5 ; 取 bNOP 4
BIT/TI 第四讲 汇编语言初步 13
LD/ST 指令• 三种 Load 指令,对应不同长度的数据
– LDW 取 32 位字 (word)– LDH 取 16 位半字 (short)– LDB 取 8 位字节 (byte)
• 对无符号数 ( 字节、 16 位半字 )– LDBU– LDHU
• 指令延迟:四个延迟间隙• 三个存储指令
– STW– STH– STB
数据取入寄存器后进行符号扩展无符号扩展
BIT/TI 第四讲 汇编语言初步 14
指令延迟间隙
指令类型 延迟间隙单周期 0乘法 1Load 4跳转 5
延迟间隙:多周期指令所需要插入的 NOP 指令个数
BIT/TI 第四讲 汇编语言初步 15
2. 乘法MPY .M1 A1, A3, A7NOP
BIT/TI 第四讲 汇编语言初步 16
乘法指令• 四种乘法指令
– MPY(U/US/SU) 16LSB×16LSB– MPYH(U/US/SU) 16MSB×16MSB– MPYH(U/S)L(U/S) 16MSB×16LSB– MPYL(U/S)H(U/S) 16LSB×16MSB
• 指令延迟槽: 1• 两个乘法单元可以在一个周期内做两次乘法
BIT/TI 第四讲 汇编语言初步 17
3. 加法
.L 1 .S 1 .D 1
或 或
ADD.? 应该使用哪个功能单元?
ADD .? A5, A7, A7
BIT/TI 第四讲 汇编语言初步 18
4. 存储结果
BIT/TI 第四讲 汇编语言初步 19
完整的 y=mx+b 汇编程序.title "lab4.asm"/* 定义数据结构 */.sect "myData”m .short 10x .short 5b .short 2y .short 0/* 算法 */.sect "myCode"/* 指针初始化 */init: mvk .s1 m,A0 ;A0=&mmvkh .s1 m,A0mvk .s1 x,A2 ;A2=&xmvkh .s1 x,A2mvk .s1 b,A4 ;A4=&bmvkh .s1 b,A4
mvk .s1 y,A6 ; A6=&ymvkh .s1 y,A6/* 取数据 */ldh .d1 *A0,A1 ; A1= mldh .d1 *A2,A3 ; A3=xldh .d1 *A4,A5 ; A5=bnop 4/* 核心算法 */start: mpy .m1 A1,A3,A7 ; A7=mxnop 1add .l1 A5,A7,A7 ; A7=mx+bsth .d1 A7,*A6/* 结束循环 */b $ ; endless loopnop 5