第四讲 汇编语言初步

19
BIT/TI 第第第 第第第第第第 1 第第第 第第第第第第 第第 第第第第第第第第第第第

Upload: avye-burt

Post on 15-Mar-2016

43 views

Category:

Documents


1 download

DESCRIPTION

第四讲 汇编语言初步. 目的:用汇编语言编写简单程序. 学习内容. 汇编代码的结构 汇编程序的构成 编写简单算法: y = mx+b. 一、汇编代码的构成. label: || [cond] instruction .unit operand ;comment. 条件寄存器. 功能单元 ( 可选 ). 注释. 操作数: 寄存器 常量 指针. 指令: 助记符 ( mnemonic ) 伪指令 (directive). 标号:代码或 变量地址. x .int 10 MPY .M1 A1, A3, A7 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 1

第四讲 汇编语言初步目的:用汇编语言编写简单程序

Page 2: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 2

学习内容• 汇编代码的结构• 汇编程序的构成• 编写简单算法: y = mx+b

Page 3: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 3

一、汇编代码的构成label: || [cond] instruction .unit operand ;comment

标号:代码或变量地址

条件寄存器指令:• 助记符 (mnemonic)• 伪指令 (directive)

功能单元 ( 可选 )

操作数:• 寄存器• 常量• 指针

注释

x .int 10 MPY .M1 A1, A3, A7 || ADD .L1x A2, B2, A5

Page 4: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 4

常用伪指令汇编指令 说明

.sect 定义一个代码段或数据段.usect 定义一个未初始化数据段

.int.long.word

定义和初始化32位变量

.short.half

定义和初始化16位变量

.byte 定义和初始化8位变量

在 C 语言里 long 是 40 位,在汇编语言里 long 是 32位注意

Page 5: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 5

二、汇编程序的构成程序=数据结构+算法

数据结构

算法

C 程序的数据结构和算法实现

Page 6: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 6

汇编程序-数据结构用汇编语言声明数据结构

Page 7: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 7

汇编程序-算法用汇编语言编写算法

Page 8: 第四讲  汇编语言初步

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

Page 9: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 9

三、用汇编指令编写 y=mx+b

1. 数据取入寄存器: m,x,b 存储器- > 寄存器1a. 初始化数据指针1b. 取数据

2. 乘法3. 加法4. 存储数据: y 寄存器- > 存储器

Page 10: 第四讲  汇编语言初步

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

Page 11: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 11

指令 MVKMVK 把一个 16 位常数放入寄存器

Page 12: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 12

1b. 取数据

LDH .D1 *A0, A1 ; 取 mLDH .D1 *A2, A3 ; 取 xLDH .D1 *A4, A5 ; 取 bNOP 4

Page 13: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 13

LD/ST 指令• 三种 Load 指令,对应不同长度的数据

– LDW 取 32 位字 (word)– LDH 取 16 位半字 (short)– LDB 取 8 位字节 (byte)

• 对无符号数 ( 字节、 16 位半字 )– LDBU– LDHU

• 指令延迟:四个延迟间隙• 三个存储指令

– STW– STH– STB

数据取入寄存器后进行符号扩展无符号扩展

Page 14: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 14

指令延迟间隙

指令类型 延迟间隙单周期 0乘法 1Load 4跳转 5

延迟间隙:多周期指令所需要插入的 NOP 指令个数

Page 15: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 15

2. 乘法MPY .M1 A1, A3, A7NOP

Page 16: 第四讲  汇编语言初步

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• 两个乘法单元可以在一个周期内做两次乘法

Page 17: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 17

3. 加法

.L 1 .S 1 .D 1

或 或

ADD.? 应该使用哪个功能单元?

ADD .? A5, A7, A7

Page 18: 第四讲  汇编语言初步

BIT/TI 第四讲 汇编语言初步 18

4. 存储结果

Page 19: 第四讲  汇编语言初步

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