计算机组成原理与汇编语言第8章.ppt

上传人:桔**** 文档编号:568340651 上传时间:2024-07-24 格式:PPT 页数:80 大小:682.50KB
返回 下载 相关 举报
计算机组成原理与汇编语言第8章.ppt_第1页
第1页 / 共80页
计算机组成原理与汇编语言第8章.ppt_第2页
第2页 / 共80页
计算机组成原理与汇编语言第8章.ppt_第3页
第3页 / 共80页
计算机组成原理与汇编语言第8章.ppt_第4页
第4页 / 共80页
计算机组成原理与汇编语言第8章.ppt_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《计算机组成原理与汇编语言第8章.ppt》由会员分享,可在线阅读,更多相关《计算机组成原理与汇编语言第8章.ppt(80页珍藏版)》请在金锄头文库上搜索。

1、第八章 汇编语言 1第八章汇编语言一、概述1.高级语言与汇编语言比较高级语言:语句变量说明/定义int y,a=25,b=43,c=76;给变量赋值y=2(a+b)-c汇编语言:指令分配寄存器分配存储单元数据传递2.汇编程序结构p数据段p堆栈段p代码段第八章 汇编语言 2;设置数据段DATA SEGMENTADB25;数据ABDB43;数据BCDB76 ;数据CYDB? ;存放结果DATA ENDS;设置堆栈段STACK1 SEGMENTPARA STACKDW 20HDUP(0)STACK1ENDS示例:y=2(a+b)-c第八章 汇编语言 3;设置代码段COSEGSEGMENTASSUME

2、 CS:COSEG,DS:DATA,SS:STACK1START:MOV AX , DATA;装填段寄存器DSMOV DS , AXMOV AL , A;取数据AADD AL , B;计算(A+B)SALAL , 1;计算 2(A+B)SUBAL , C;计算 2(A+B)-CMOV Y , AL;存结果MOV AH,4CH;结束用户程序,返回操作系统INT21HCOSEGENDSENDSTART示例:y=2(a+b)-c第八章 汇编语言 4p汇编语言:是汇编格式指令,伪指令的集合及其表示,使用这些指令的一组规则。p机器语言:用二进制编码的机器指令的集合及一组使用规则,它是CPU能直接识别的唯

3、一语言。 MOV DS,AX 汇编语言 8E D8 机器语言(目标代码)汇编语言与机器语言汇编语言与目标代码的对应00192B4CB8XXXX8ED8A0000002060100D0E024060200A20300B44CCDMOV AX, DATAMOV DS, DXMOV AL, AADD AL, B21数据A数据B数据C数据Y地址增大方向SALAL , 1SUB AL , CMOV Y , ALINT 21HMOVAH,4CH第八章 汇编语言 6p与机器语言相关p效率高p编写源程序繁琐p调试困难汇编语言特点特点第八章 汇编语言 7p 对软件的执行时间或存储容量有较高要求的场合,如操 作系

4、统的内核、工业控制领域、实时系统等。 p 在大型软件中某些影响系统性能的瓶颈程序或者频繁 使用的子程序可以采用汇编语言编程。 p 与硬件资源密切相关的软件程序,如设备驱动程序。 p 没有合适的高级语言去开发的程序。 汇编语言的用途的用途第八章 汇编语言 8二、汇编语言语句种类二、汇编语言语句种类语句种类 指令语句: 又叫可执行语句,在汇编时产生一个目标代码, 对应机器的一种操作。伪指令语句:又叫命令语句。用于指示汇编程序如何汇编源程序,除了数据定义语句之外,没有目标代码与之对应。宏指令语句:由用户自定义的指令。(指令的扩展)第八章 汇编语言 9格式: 名字 操作符 操作数 ; 注释指令语句:

5、标号: 助记符 操作数,操作数;注释伪指令语句:名字 定义符 参数,.,参数 ;注释命名规则:p可以用 ?,_$,数字和英文字符。p名字的第一个字符不能是数字。p名字的长度不受限制,但只有前31个字符有效。p不允许用保留字作名字(指令、伪指令、寄存器名)。二、汇编语言语句格式第八章 汇编语言 10MASM宏汇编保留字汇编指令AAA AAD AAM AAS ADC ADD AND CALL CBW CLC CLD CLI CMC CMP CMPS CWD DAA DAS DEC DIV ESC HLT IDIV IMUL IN INC INT INTO IRET JA JAE JB JBE JC

6、XZ JE JG JGE JL JLE JMP JNA JNAE JNB JNBE JNE JNG JNGEJNL JNLE JNO JNP JNS JNE JO JP JPE JPO JS JZ LAHF LDS LEA LES LOCK LODS LOOP LOOPE LOOPNE LOOPNZ LOOPZ MOV MOVS MUL NEG NOP NOT OR OUT POP POPF PUSH PUSHF RCL RCR REP REPE REPNE REPNZ REPZ RET ROL ROR SAHF SAL SAR SBB SCAS SHL SHR STC STD STI STO

7、S SUB TEST WAIT XCHG XLAT XOR第八章 汇编语言 11寄存器名AH AL AX BH BL BX CH CL CX DH DL DXCS DS ES SSBP DI SI SP伪指令ASSUME CODE MACRO DB DD DW END ENDM ENDP ENDSEQU EXTRN GROUP LABEL MODROM NAME NOSEGFIX ORGPROC INCLUDE PUBLIC PURGE RECORD SEGFIX SEGMENT操作符及其他ABS AT BYTE COMMON DUP EQ FAR GE GT HIGH LEN LELENGT

8、H LOW LT MASK MEMORY MOD NE NEAR NOTHINGOFFSET PAGE PARA PREFIX PTR SEG SHORT SIZESTACK THIS TYPE WIDTH MASM宏汇编保留字第八章 汇编语言 12三、符号定义语句三、符号定义语句1. 等值语句格式: 符号 EQU 表达式 表达式:常数或数值表达式 地址表达式 变量或标号CONST EQU 10ADR1 EQU DS:BP+14HADR2 EQU CONST +10COUN EQU VAR 为变量名VAR另定义一个别名p 同一符号不能用EQU重新定义。p 汇编时,作为替代符号用,不产生目标代码

9、,不占 有存储单元。第八章 汇编语言 132. 等号语句等号语句格式: 符号 = 表达式 CONT=5 NUM=10H NUM=NUM+20H COUNT=VAR;COUNT是变量是变量VAR的别名的别名 COUNT=NUM ;COUNT是常数是常数NUM的别名的别名表达式形式同上,但可多次重新定义同一符号。三、符号定义语句三、符号定义语句第八章 汇编语言 14四、数据定义语句四、数据定义语句基本格式: DB变量名变量名 DW 表达式表达式1, 1,表达式表达式2,.2,. DD保留存储空间,并可以完成数据的初始化。字节BYTE1字WORD2双字DWORD4四字QWORD8十字节TBYTE10

10、DBDWDDDQDT第八章 汇编语言 15例:DATASEGMENT DA1DB9AH DA2DW5678H DA3DD12345678HDATAENDS变量的属性: 段属性 偏移属性 类型属性四、数据定义语句四、数据定义语句格式: 变量名 DB/DW/DD 表达式1,表达式2,.第八章 汇编语言 16格式: 变量名 DB/DW/DD 表达式1,表达式2,.表达式:(1)数值DA_BYTE1DB50HDA_BYTE2DB10H,20H,30H,40HDA_WORD1DW0A34HDA_WORD2DW1234H,5678H,9ABCHDA_DWORDDD12345678H,9ABCDEFH 四、

11、数据定义语句四、数据定义语句第八章 汇编语言 17格式: 变量名 DB/DW/DD 表达式1,表达式2,.表达式:(2)字符/字符串p字符串必须用引号括起来pDB时一个字符串可以连续书写小于255个字;pDW、DD时每一个字符串表达式由12个字符构成;STRING1DBSTRINGSTRING2DWST,RI,NGSTRING3DDST,RI,NG四、数据定义语句四、数据定义语句第八章 汇编语言 18STRING1535452494E47545352494E47STRING2545352494E47STRING3000000000000STRING1 DBSTRINGSTRING2 DWST,

12、RI,NGSTRING3 DD ST,RI,NG字符串定义举例第八章 汇编语言 19格式: 变量名 DB/DW/DD 表达式1,表达式2,.表达式:(3)?表达式:分配相应数量的存储单元,但不初始化。DA_BYTE3DA_BYTE3DBDB?,?,?DA_WORD3DA_WORD3DWDW?,?,?四、数据定义语句四、数据定义语句第八章 汇编语言 20格式: 变量名 DB/DW/DD 表达式1,表达式2,.表达式:(4)带带DUPDUP的表达式的表达式DA_B1DB10H DUP(?)DA_B2DB20H DUP(ABCD)DA_W1DW10DUP(4)DA_W2DW10DUP(-1,1)操作

13、符DUP可以嵌套使用:DA_B3 DB 10H DUP(4 DUP(3),8)四、数据定义语句四、数据定义语句第八章 汇编语言 211.常数数值常数:二、八、十、十六进制 B,O,D,H字符串常数(1)在指令语句的原操作数中作立即数. MOV AL, 0A9H MOV BX, AB(2) 存储器操作数的寻址方式中作位移量。 MOV AL, DS: 340H(3)在数据定义语句中,对存储单元预置初值。 DB 12H, 34H五、汇编语言数据与运算符五、汇编语言数据与运算符第八章 汇编语言 222. 变量(1) 用数据定义语句定义并预置初值后,变量代表存储单元的数据,并作为该单元的符号地址。例如在

14、某数据段已定义一变量: DATA_VAR DB 40H DUP (?)几种含有变量名的地址表达式为:直接寻址:DATA_VAR+08H基址变址寻址: DATA_VAR BX DIp地址表达式的值:存放操作数的存储单元偏移量。p地址表达式的类型:同变量名的类型。五、汇编语言数据与运算符五、汇编语言数据与运算符第八章 汇编语言 232. 变量(2)在用DW或DD的数据定义语句中,若操作数字段引用了变量名,则在分配的存储单元中,预置被引用的变量名的地址部分:偏移量、段基值NUM1DB10HDUP (?)NUM2DW10HDUP (?)ARRAYDB10HDUP (ABCD)ADR1DWARRAYAD

15、R2DDARRAY五、汇编语言数据与运算符五、汇编语言数据与运算符第八章 汇编语言 243. 标号:一条指令的符号地址。n 段属性n 偏移属性n 类型属性 p NEAR:段内转移,作为标号所在段的转移、调用指令的目标地址。p FAR:段间转移,作为其他段的转移、调用指令的目标地址。 类型属性设置:(1)隐含方式:NEXT:MOV AX, 3000五、汇编语言数据与运算符五、汇编语言数据与运算符(2)用LABEL伪指令设置类型属性: 标号伪指令LABEL格式: 名字 LABEL 类型p 与指令语句配合使用: 名字(新标号) LABEL 类型(NEAR/FAR) SUB1_FAR LABEL FA

16、R SUB1: MOV AX,1234Hp 与数据定义语句配合使用: 名字(新变量名)LABEL 类型(DB/DW/DD) DATA _BYTE LABEL BYTE DATA _WORD DW 20H DUP(563H)五、汇编语言数据与运算符五、汇编语言数据与运算符第八章 汇编语言 26运算符+*/MODSHRSHL运算格式运算功能+表达式表达式表达式1 + 表达式2表达式1 表达式2表达式1 * 表达式2表达式1 / 表达式2表达式1 MOD 表达式2表达式1 SHR 次数表达式1 SHL 次数正数(单项运算符)负数(单项运算符)加法减法乘法除法(取商)模除(取余数)右移左移(1)算术运

17、算符4. 运算符只有减法运算可以用同一段内的两个变量相减五、汇编语言数据与运算符五、汇编语言数据与运算符第八章 汇编语言 27NUM = 15*5 ;NUM=75NUM = NUM/8;NUM=9NUM = NUM MOD 5;NUM=4NUM = -NUM-6;NUM= -10NUM = -NUM;NUM= 10ORG 30H ;下面定义数据的起始偏移是30HDA1DBABCDEFGHDA2DBIBM PC COMPUTERCOUNTEQUDA2 - DA1 ;38H-30H=8DA3EQUDA2+4第八章 汇编语言 28NUM=11011011BDATA1 DWNUMSHL 3 , NUM

18、 SHR 2 .MOVAX , NUM SHL 3MOVBX , NUM SHR 2MOVCX , NUM SHL 8MOVCX , NUM SHL 16MOVDX , NUM SHR 8MOVDX , NUM SHR 16DATA1DW6D8H , 36H.MOVAX , 011011011000BMOVBX , 00110110BMOVCX , 1101101100000000BMOVCX , 0MOVDX , 0MOVDX , 0第八章 汇编语言 29算术运算符p移位运算符和移位指令区别p移位运算符不能对寄存器或存储单元进行移位运算 MOV AX,CX SHL 5 MOV DX,DATA

19、1 SHR 3五、汇编语言数据与运算符五、汇编语言数据与运算符第八章 汇编语言 30运算符NOTANDORXOR运算格式运算功能 NOT表达式表达式1 AND 表达式2表达式1 OR 表达式2表达式1 XOR 表达式2逻辑非逻辑与逻辑或逻辑异或(2)逻辑运算符五、汇编语言数据与运算符五、汇编语言数据与运算符4. 运算符第八章 汇编语言 31MOV AL , NOT0F0HMOV DX , NOT0F0HMOV BL , 55H OR 0F0HAND BH , 55H AND 0F0HXOR CX , 55H XOR 50HMOV AL , 0FHMOV DX , 0FF0FHMOV BL ,

20、0F5HAND BH , 50HXOR CX , 5第八章 汇编语言 32运算符EQNELTLEGTGE运算格式运算功能表达式1 EQ 表达式2表达式1 NE 表达式2表达式1 LT 表达式2表达式1 LE 表达式2表达式1 GT 表达式2表达式1 GE 表达式2两个表达式相等为真两个表达式不相等为真表达式1 表达式2为真表达式1 表达式2为真表达式1 = 表达式2为真(3)关系运算符全1为真,全0为假比较时,若为常数按无符号数比较,如果是变量按偏移量比较五、汇编语言数据与运算符五、汇编语言数据与运算符DATA SEGMENT ORG 10H NUM1=1234 NUM2=1234H DA_B

21、YTE DB10HDUP(0) DA_WORDDW10HDUP(0) DA_VAR1DW NUM2+DA_BYTEGT NUM1+DA_WORD DA_VAR2DBNUM1 LE NUM2DATA ENDS.MOV AX , NUM1 LT NUM2MOV BL , NUM1 GE NUM2MOV CX , DA_WORD GT DA_BYTE第八章 汇编语言 34.DA_VAR1 DW0FFFFHDA_VAR2 DB0FFH.MOVAX , 0FFFFHMOVBL , 0MOV CX , 0FFFFH.可以对两个常数进行比较,不能用常数与偏移量进行比较第八章 汇编语言 35格式: 运算对象是

22、存储器操作数,由变量名或标号组成地址表达式nSEG : 返回变量所在的段值nOFFSET:返回变量所在偏移nTYPE:返回变量的类型nLENGTH:返回数组变量的元素个数nSIZE:返回数组变量所占的总字节数 SIZE= TYPE* LENGTH(4 4)数值返回运算符)数值返回运算符五、汇编语言数据与运算符五、汇编语言数据与运算符第八章 汇编语言 36假设DATA的段基值是7A4EHDATASEGMENTORG 30HDA1DB20HDUP(12H)DA2DWDA1.DATAENDS.MOV AX , SEGDA1MOV BX , SEGDA2MOV SI , OFFSET DA1MOV C

23、X , DA2MOV DI , OFFSET DA2MOV DX , OFFSET DA1+4MOV AX , 7A4EHMOV BX , 7A4EHMOV SI , 30HMOV CX , DA2MOV DI , 50HMOV DX , 34H第八章 汇编语言 37 TYPE 运算符变量标号类型属性运算结果BYTEWORDDWORD124NEARFAR-1-2用数字形式表示变量和标号的类型属性五、汇编语言数据与运算符五、汇编语言数据与运算符(4 4)数值返回运算符)数值返回运算符第八章 汇编语言 38DA_BYTE DB 12HDA_WORD DW 3456HDA_DWORD DD789AH

24、.MOVAL , TYPE DA_BYTEMOVBL , TYPE DA_WORDMOVCL , TYPE DA_DWORD.MOVAL , 1MOVBL , 2MOVCL , 4第八章 汇编语言 39LENGTH与SIZE运算符pLENGTH运算符返回数组变量的元素个数如果变量用DUP定义,Length为外层DUP的值如果没有DUP定义,结果为1pSIZE运算符数组变量所占的总字节数SIZE是LENGTH和TYPE的乘积五、汇编语言数据与运算符五、汇编语言数据与运算符(4 4)数值返回运算符)数值返回运算符DATASEGMENTVAR1DB10HDUP(0)VAR2DB10H,20H,30H

25、,40HVAR3DW10HDUP(A, 4 DUP(3)VAR4DBCOMPUTERDATAENDS.MOV AL , LENGTHVAR1 ;MOV AH , SIZEVAR1 ;MOV BL , LENGTHVAR2 ;MOV BH , SIZEVAR2 ;MOV CL , LENGTHVAR3 ;MOV CH , SIZEVAR3 ;MOV DL , LENGTHVAR4 ;MOV DH , SIZEVAR4 ;(AL)=10H(AH)=10H(BL)=1(BH)=1(CL)=10H(CH)=20H(DL)=1(DH)=1第八章 汇编语言 41求数组ARRAY的各数据项的累加和,从数组最

26、后一个数据项开始进行累加。ARRAYDW20H DUP(4).XOR AX , AXMOVSI , OFFSET ARRAYADD SI , SIZE ARRAY-TYPE ARRAYMOVCX , LENGTH ARRAYLOP:ADD AX , SISUB SI , TYPE ARRAYLOOPLOP例:例:(5)属性运算符PTR: 类型 PTR 地址表达式类型可以是:BYTE ,WORD,DWORD 或NEAR FAR仅在当前语句中有效,是一种临时设置。DA_BYTE DB 20H DUP(0)DA_WORD DW 10H DUP(0) MOV WORD PTR DA_BYTE 10,

27、AX ADD BYTE PTR DA_WORD DI, BL INC BYTE PTR SI SUB WORD PTRBX,30H JMP FAR PTR SUB1五、汇编语言数据与运算符五、汇编语言数据与运算符第八章 汇编语言 43THIS:THIS 类型THIS常与等值语句EQU一起用,形成新变量名或标号,使它们具有THIS后所指的类型,而段基值和偏移量与紧接的变量名或标号相同。例: DATA _BYTE EQU THIS BYTE DATA _WORD DW 20H DUP(0) JUMP_FAR EQU THIS FAR JUMP_NEAR : XOR AX, AX五、汇编语言数据与运

28、算符五、汇编语言数据与运算符(5)属性运算符第八章 汇编语言 44(6)分离字节运算符HIGH 表达式 LOW 表达式p分离运算对象的高字节和低字节部分p表达式必须具有常量值,如常数、地址表达式, 不能是存储器操作数或寄存器内容五、汇编语言数据与运算符五、汇编语言数据与运算符第八章 汇编语言 45DATASEGMENTORG 20HCONSTEQU0ABCDHDATA1DB10HDUP(?)DATA2DW20HDUP(?).DATAENDS.MOV AH , HIGHCONSTMOV AL , LOWCONSTMOV BH , HIGH(OFFSETDATA1)MOV BL , LOW(OFF

29、SETDATA2)MOV CL , LOW(CONSTSHL3)MOV AH , 0ABHMOV AL , 0CDHMOV BH , 0MOV BL , 30HMOV CL , 68H第八章 汇编语言 46优先级别(最高) 123456789(最低) 10运算符LENGTH , SIZEPTR , OFFSET, SEG , TYPE , THISHIGH , LOW+, (单项运算符)* , / , MOD , SHR , SHL+ , EQ , NE , LT , LE , GT , GENOTANDOR , XOR(7)运算符的优先级五、汇编语言数据与运算符五、汇编语言数据与运算符六、段

30、结构伪指令六、段结构伪指令1. 段定义伪指令段名段名 SEGMENT 定位类型定位类型 组合类型组合类型 类类别别名名.段名段名 ENDS定位类型(Align Type):PAGE(页):本段从一个页的边界开始,起始地址能被256整除。PARA(节):本段从一个节的边界开始,起始地址能被16整除。WORD(字):本段从偶字节地址开始。BYTE(字节):本段从任意地址开始。第八章 汇编语言 48组合类型(Combine Type):nNONE:本段与其它段无连接关系,是独立的。nPUBLIC:本段与其它同段名同类型的段相连接在一起,然后为所有这些段指定一个共同的段基地址,形成一个新的逻辑段。nC

31、OMMON:本段与其它同段名同类型的段设置相同的段基址,共享相同的存储区,段长度由同名段中最大的段确定。(覆盖段)六、段结构伪指令六、段结构伪指令1. 段定义伪指令第八章 汇编语言 49组合类型(Combine Type):nSTACK:与PUBLIC段相似,但此段为堆栈段,系统自动对SS寄存器和SP指针初始化。nAT表达式:本段的起始单元可以定位在表达式所示的节边界上。nMEMORY:本段定位在所有其它段的最高地址,有多个段,只把第一遇到的当作此段。 类别名(Class)六、段结构伪指令六、段结构伪指令1. 段定义伪指令第八章 汇编语言 502. 段寻址伪指令ASSUME 段寄存器名:段名,

32、段寄存器名:段名,段寄存器名:段名,段寄存器名:段名,. DS_DATA SEGMENTVAR1 DB 12HDS_DATA ENDSES_DATA SEGMENTVAR2 DB 34HES_DATA ENDSCODESEGMENTVAR3DB56H六、段结构伪指令六、段结构伪指令第八章 汇编语言 51ASSUMECS:CODE , DS:DS_DATASTART:.INC VAR1INC VAR2INC VAR3.CODEENDSEND START可用关键字NOTHING取消前面的某些设置。例: ASSUME DS:NOTHING;取消对DS的设置 ASSUME NOTHING; 取消全部4

33、个段R的设置接上篇接上篇第八章 汇编语言 523.段寄存器的装入nDS,ES的装入DATA_DSSEGMENTDB1DB10HDUP(?)DATA_DSENDSCODESEGMENTASSUME CS:CODE , DS:DATA_DS , ES:DATA_ESSTART:MOV AX , DATA_DS;设置设置DSMOV DS , AXMOV AX , DATA_ES;设置设置ESMOV ES , AX.CODEENDS六、段结构伪指令六、段结构伪指令DATA_ESSEGMENTDB2DB20HDUP(?)DATA_ESENDS第八章 汇编语言 53nSS的装入的装入(1) STACK1

34、SEGMENTPARA STACKDW20HDUP(?) STACK1 ENDS(2) STACK2 SEGMENTDW 30H DUP(?) TOPLABELWORD STACK2 ENDS. CODESEGMENT.MOV AX , STACK2;设置SSMOV SS , AXMOV SP , OFFSET TOP;修改SP六、段结构伪指令六、段结构伪指令第八章 汇编语言 54n CS的装入的装入.CODESEGMENTASSUMECS:CODE , .START:.CODEENDSEND START六、段结构伪指令六、段结构伪指令第八章 汇编语言 55过程名过程名 PROC NEAR/F

35、AR . RET过程名过程名 ENDPp有三个属性p一个过程内,至少有一条返回指令RETp调用过程使用CALL 过程名p段内返回与段间返回七、过程定义伪指令七、过程定义伪指令第八章 汇编语言 56八、其它伪指令八、其它伪指令1. ORG , $ORG 表达式 将表达式的值赋给位置计数器 $ 存放位置计数器的当前值ORG , $举例DATASEGMENTORG 30HDB1DB12H , 34HORG $+20HSTRINGDBSTRINGDATAENDS第八章 汇编语言 57八、其它伪指令八、其它伪指令1. ORG , $ORG , $举例DATASEGMENTDA1DB10H DUP(?)D

36、A2DB12H , 34HDA3DW56H , $+10H , 78H , $+20H.DATAENDS第八章 汇编语言 58CODESEGMENT.ORG 50HMOVAX , OFFSET $MOVBX , OFFSET $.CODEENDSMOVAX , 0050HMOVBX , 0053H八、其它伪指令八、其它伪指令1. ORG , $ORG , $举例第八章 汇编语言 59八、其它伪指令八、其它伪指令2. EVEN 伪指令 定位偶地址3. INCLUDE伪指令 INCLUDE 文件名 例: INCLUDEFILE.MACINCLUDEB:MASMABC.ASM4. PUBLIC PU

37、BLIC 符号1,符号2, .5. EXTRN 伪指令 EXTRN符号 1:类型 ,符号 2: 类型, . 第八章 汇编语言 60 PUBLICNUM1 , STRING , SUB1 , LOOP1DATA1SEGMENTNUM1EQU1234H.STRINGDBCHARACTER STRING.DATA1ENDS.CODE1SEGMENT.SUB1PROC FAR.SUB1ENDPLOOP1:.CODE1ENDSEND第八章 汇编语言 61EXTRNNUM1:ABS , STRING:BYTEEXTRNSUB1:FAR , LOOP1:NEAR:CODE2SEGMENT:MOV AX ,

38、NUM1LEABX , STRING:CALL SUB1:JMPFAR PTR LOOP1:CODE2ENDSEND第八章 汇编语言 62八、其它伪指令八、其它伪指令5. TITLE (标题)伪指令,指定一个标题 格式:TITLE 文本 字符不超过80个例: TITLE EXAMPLEPROGRAM第八章 汇编语言 63九、宏指令九、宏指令例:MULTAX10MACROPUSHBXSAL AX,1MOV BX,AXSAL AX,1SAL AX,1ADD AX,BXPOP BXENDM第八章 汇编语言 64九、宏指令九、宏指令EXCHANGEMACRO MEM1,MEM2,REGMOV REG,

39、MEM1XCHGREG,MEM2MOV MEM1,REGENDM1. 宏定义宏名 MACRO 形参1,形参2,. ENDM第八章 汇编语言 652. 宏调用 宏名 实参1,实参2,.EXCHANGEEXCHANGEDA_BY1 , DA_BY2 , ALDA_BY1 , DA_BY2 , AL3. 宏展开 九、宏指令九、宏指令;宏定义MULTAX10MACROPUSH BXSALAX,1MOV BX,AXSALAX,1SALAX,1ADDAX,BXPOPBXENDM;-EXCHANGE MACRO MEM1,MEM2,REGMOVREG,MEM1XCHGREG,MEM2MOV MEM1,REG

40、ENDM;设置数据段设置数据段DATASEGMENTDA_W01DW1234HDA_W02DW5678HDATAENDS;设置堆栈段设置堆栈段STACK1SEGMENTPARASTACKDW20HPUP(?)STACK1ENDS;设置代码段设置代码段COSEGSEGMENTASSUMECS:COSEG,DS:DATA,SS:STACK1START:MOVAX , DATAMOVDS , AX.MULTAX10;宏指令语句宏指令语句+PUSHBX+SALAX , 1第八章 汇编语言 68+MOV BX , AX+SAL AX , 1+SAL AX , 1+ADDAX , BX+POPBX.EXC

41、HANGE DA_W01 , DA_W02 , CX :宏指令语句宏指令语句+MOV CX , DA_W01+XCHGCX , DA_W02+MOV DA_W01 , CX.COSEGENDSENDSTART第八章 汇编语言 694. 宏操作符连接操作符 & 定义:定义:SHIFT_VAR MACRO R_M , DIRECT, COUNT MOV CL , COUNT S&DIRECT R_M , CL ENDM调用:调用:SHIFT_VAR AX,HL,2 SHL AX,CL SHIFT_VAR AX,HR,2 SHR AX,CL 第八章 汇编语言 70SHIF0 MACROCNTMOVC

42、L , CNTENDMSHIF1 MACRO REG , DIRECT , NUMCOUNT=NUMSHIF0 %COUNTS&DIRECT REG , CL ENDM;宏调用SHIF1 AX , HL , 2SHIF1 BL , AR , 3表达式操作符表达式操作符 % 格式:格式:%表达式;获取表达式的值(出现在宏调用中)表达式;获取表达式的值(出现在宏调用中) ;宏展开SHIF1AX , HL , 2+MOV CL , 2+SHLAX , CLSHIF1 BL , AR , 3+MOV CL , 3+SARBL , CL文本操作符 EXCHANGE ,AL宏展开MOV AL , BYTE

43、 PTR DA_WORD1XCHGAL , BYTE PTR DA_WORD2MOV BYTE PTR WORD1 , AL字符操作符 ! 格式: !字符宏定义:PROMPT MACRO NUM , TEXT PROMP&NUM DB&TEXT& ENDM宏调用:PROMPT 23, 255 宏展开: PROMPT23 DB Expression 255 宏注解符 ;第八章 汇编语言 725. LOCAL伪指令LOCAL 在汇编过程中,宏定义中的内容会在每一次宏调用处展开。因此当多次调用一个宏时,宏定义中的标号会造成标号重复定义。 在宏定义中使用LOCAL伪指令可以使标号被局部化,从而避免重复

44、定义。 LOCAL伪指令只能用在宏定义中,并且它必须是宏定义中紧跟在MACRO伪指令之后的第一个语句。第八章 汇编语言 73用连续相加的办法实现无符号数乘法运算MULTIPMACRO MULT1 , MULT2 , MULT3LOCAL LOP , EXIT0MOVDX , MULT1MOVCX , MULT2XORBX , BXXORAX , AXJCXZEXIT0LOP:ADDBX , DXADCAX , 0LOOPLOPEXIT0: MOVMULT3 , BXMOVMULT3+2 , AXENDM设数据段有如下定义的变量:DA1DW1234H , 5678HDA2DW120H , 210

45、HDA3DW4 DUP(?)宏展开:.MULTIPDA1 , DA2 , DA3+MOVDX , DA1+MOVCX , DA2+XORBX , BX+XORAX , AX+JCXZ?0001+?0000:ADDBX , DX+ADCAX , 0+LOOP?0000+?0001: MOVDA3 , BX第八章 汇编语言 75+MOV DA3+2 , AX.MULTIPDA1+2 , DA2+2 , DA3+4+MOVDX , DA1+2+MOVCX , DA2+2+XORBX , BX+XORAX , AX+JCXZ?0003+?0002:ADD BX , DX+ADCAX , 0+LOOP?

46、0002+?0003: MOV DA3+4 , BX+MOV DA3+6 , AX.第八章 汇编语言 766. 宏嵌套o宏定义嵌套嵌套的宏定义:JUMPMACROCONDJ&COND&S MACRODESTLOCALNEXT , EXITJ&CONDNEXTJMPEXITNEXT:JMPDESTEXIT:ENDMENDM第八章 汇编语言 77外层宏调用为:JUMP EJUMP NEJUMP GJUMP GE内层宏调用为::JESSUB1;等于0转移:JGES SUB2;大于或等于转移:第八章 汇编语言 78当宏汇编程序对内层宏展开后,可得到如下结果:JE? 0000JMP? 0001? 000

47、0: JMPSUB1? 0001:JGE? 0002JMP? 0003? 0002: JMPSUB2? 0003:第八章 汇编语言 79两个宏定义:对32位数左移一位SHIFTMACRO NUM1 , NUM2SALNUM2 ,1RCLNUM1 ,1ENDM对32位数乘以12MULT12MACRO M_R1 , M_R2 , REG1 , REG2PUSHFPUSHREG1PUSHREG2SHIFTM_R1 , M_R2 SHIFTM_R1 , M_R2 MOVREG1 , M_R1MOVREG2 , M_R2p 宏定义内嵌套宏调用SHIFTM_R1 , M_R2ADDM_R2 , REG2ADCM_R1 , REG1POPREG2POPREG1POPFENDM某数据段已定义变量:在程序中可以编写宏指令语句::MULT12DA_WORD+2,DA_WORD,AX,BX:MULT12AX,BX,CX,DX:7. 宏库的建立与使用

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号