




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1微型计算机原理及应用2汇编语言与汇编程序2 23 3符号指令中的表达式符号指令中的表达式操作数的寻址方式操作数的寻址方式常用指令常用指令4 4 伪指令伪指令1 15 5常用系统功能调用常用系统功能调用3机器指令机器指令用二进制编码形式下达的指示和命令。用二进制编码形式下达的指示和命令。如:如:1100 1101 0010 00011100 1101 0010 0001 机器语言编写程序烦琐,难记机器语言编写程序烦琐,难记忆,不易理解,易出错忆,不易理解,易出错符号指令符号指令由由助记符、符号助记符、符号组成,它与机器指令一组成,它与机器指令一一对应。一对应。 1100 1101 0010 0
2、001 1100 1101 0010 0001 INT 21HINT 21H 汇编汇编机器只能识别机器指令,所以需要将符号指机器只能识别机器指令,所以需要将符号指令翻译成机器指令,翻译的过程称作汇编。令翻译成机器指令,翻译的过程称作汇编。汇编程序汇编程序完成汇编任务的程序。完成汇编任务的程序。41E1EPUSH DSPUSH DS2BC02BC0SUB AX,AXSUB AX,AX5050PUSH AXPUSH AXB84D14B84D14MOV AX,144DHMOV AX,144DH8ED88ED8MOV DS,AXMOV DS,AX 汇编语言源程序汇编语言源程序汇编程序汇编程序目标文件目
3、标文件汇编语言源程序汇编语言源程序用符号指令书写的程序。用符号指令书写的程序。5以字母开头的一串字符以字母开头的一串字符为了区别符号和数据,以字母开头的十六进制数,为了区别符号和数据,以字母开头的十六进制数,其前面要加一个前导其前面要加一个前导0 0如:如: 0FFH 0FFH 数据数据 FFH FFH 符号符号 符号符号汇编中的符号有汇编中的符号有常量、变量和标号常量、变量和标号三类三类1 1 符号指令中的表达式符号指令中的表达式6常用的有二进制数、十进制常用的有二进制数、十进制数数、十六进制、十六进制数数和和ASCIIASCII字符字符如:如: 1010B1010B, 1010,0AH0A
4、H, A A,$ $,ABCABC1.1.常量常量 在汇编时已有确定数值的量在汇编时已有确定数值的量ASCIIASCII字符做数值常量时,需加单引号字符做数值常量时,需加单引号1.1 1.1 常量和数值表达式常量和数值表达式(1 1)数值常量)数值常量7程序中为经常使用的数值取的名。程序中为经常使用的数值取的名。用用EQUEQU或或“”伪指令定义,如:伪指令定义,如: P EQU 314 P EQU 314 P=314 P=314注注:汇编时,汇编程序不给符号常量分配存储单元:汇编时,汇编程序不给符号常量分配存储单元(2 2)符号常量)符号常量1.1 1.1 常量常量和数值表达式和数值表达式8
5、2.2.数值表达式数值表达式 由常量与运算符组成的有意义的式子由常量与运算符组成的有意义的式子,结果为,结果为一数值。一数值。在汇编语言源程序中,允许对常量进行以下三种类型在汇编语言源程序中,允许对常量进行以下三种类型的运算:的运算:(1 1)算术运算算术运算 包括,包括,/ /,MODMOD(求余)(求余)(2 2)逻辑运算)逻辑运算 包括包括ANDAND,OROR,XORXOR,NOTNOT(3 3)关系运算)关系运算 包括:包括:EQEQ(),(),NENE(),),LTLT(),(),GTGT(),(),LELE(),),GEGE()1.1 1.1 常量常量和数值表达式和数值表达式91
6、.21.2 标号标号标号定义的方式有两种:标号定义的方式有两种: (1 1)书写在符号指令前,)书写在符号指令前,用:定义用:定义,为,为NEARNEAR类型,类型, NEARNEAR型标号只能在段内使用!型标号只能在段内使用!例:例: CYCLECYCLE:MOV ALMOV AL,SI SI ;定义近标号;定义近标号CYCLECYCLE(2 2)用)用PROCPROCENDPENDP伪指令伪指令定义过程名定义过程名例:例:ABC PROC FAR ;ABC PROC FAR ;定义过程名定义过程名ABCABC为为FARFAR型标号型标号 ABC ENDP ABC ENDP标号标号指令地址的
7、符号表示,也可以是过程名指令地址的符号表示,也可以是过程名10变量变量的实质是指向内存中某个地址的指针。的实质是指向内存中某个地址的指针。地址表达式:地址表达式:由变量、标号、寄存器、常量和运算由变量、标号、寄存器、常量和运算符组成。符组成。寄存器只能是寄存器只能是SISI、DIDI、BXBX、BP,BP,且寄存且寄存器必须位于器必须位于 中。中。1.3 1.3 变量变量1.1.变量和地址表达式变量和地址表达式11数据存放规律数据存放规律字节数据字节数据-一个字节单元存放一个字节单元存放字数据字数据-二个字节单元存放二个字节单元存放双字数据双字数据-四个字节单元存放四个字节单元存放规定:规定:
8、(1)(1)“低对低低对低, ,高对高高对高”(2)(2)低位字节的地址为字的地址低位字节的地址为字的地址2.2.变量存储区中数据的存放变量存储区中数据的存放1.3 1.3 变量变量12(1 1)段基址)段基址定义变量所在段的段首地址的高定义变量所在段的段首地址的高1616位位 由由SEGSEG算符指定算符指定如:如: SEG W SEG W ;取变量;取变量W W的段基址的段基址(2 2)偏移地址)偏移地址变量所在段的段首址到该变量的字节变量所在段的段首址到该变量的字节距离距离. .由由OFFSETOFFSET算符指定算符指定如:如: OFFSET W OFFSET W ;取变量;取变量W
9、W的偏移地址的偏移地址3.3.变量的属性变量的属性(3 3)类型)类型存取该变量中数据的字节数存取该变量中数据的字节数变量的类型有:字节(变量的类型有:字节(bytebyte),字(),字(wordword),双字),双字(dworddword),四字(),四字(qwordqword),十字节(),十字节(tbytetbyte),一个),一个数据分别占数据分别占1 1,2 2,4 4,8 8,1010个字节单元个字节单元1.3 1.3 变量变量13在数据段或附加数据段中用伪指令定义在数据段或附加数据段中用伪指令定义 变量名变量名 DBDB 表达式表达式, , ;定义字节变量;定义字节变量 变量
10、名变量名 DW DW 表达式表达式, , ;定义字变量;定义字变量 变量名变量名 DD DD 表达式表达式, , ;定义双字变量;定义双字变量 变量名变量名 DQ DQ 表达式表达式, , ;定义四字变量;定义四字变量 变量名变量名 DF DF 表达式表达式, , ;定义六字节变量;定义六字节变量 变量名变量名 DT DT 表达式表达式, , ;定义十字节变量;定义十字节变量数据定义伪指令指明了变量的数据定义伪指令指明了变量的类型类型表达式确定变量的表达式确定变量的初值初值。表达式有如下。表达式有如下6 6种:种:4.4.变量的定义变量的定义1.3 1.3 变量变量14(1 1)表达式为常量或
11、数值表达式)表达式为常量或数值表达式存入数值存入数值 如:如:W1W1 DWDW 1 1(2 2)表达式为)表达式为ASCIIASCII字符串字符串 存入存入ASCIIASCII值值 如:如:W2W2 DWDW AB ;用用DWDW定义时,串长不可大于定义时,串长不可大于2 2 B2B2 DBDB AB$ ;用用DBDB定义时,串长可大于定义时,串长可大于2 2(3 3)表达式为重复子句)表达式为重复子句 格式:格式:N DUPN DUP(表达式)(表达式) 如:如:B3B3 DBDB 2 2 DUP(0)DUP(0) B4B4 DBDB 2 2 DUP(5,A)DUP(5,A)1.3 1.3
12、 变量变量15(4 4)地址表达式)地址表达式(只适用只适用DW、DD和和DF3个伪指令个伪指令) 格式:格式: 变量名变量名 DW DW 地址表达式地址表达式 ; ;取其偏移地址取其偏移地址来初来初 ; ;始化变量始化变量 变量名变量名 DD DD 地址表达式地址表达式 ; ;取取1616位偏移地址和段位偏移地址和段 ; ;基址基址来初始化其变量来初始化其变量 变量名变量名 DF DF 地址表达式地址表达式 ; ;取取3232位偏移地址和段位偏移地址和段 ; ;基址基址来初始化其变量来初始化其变量(5 5)由以上表达式组成的序列,之间用)由以上表达式组成的序列,之间用 ,分隔分隔 B5 B5
13、 DBDB 1,2,31,2,3 B6 B6 DBDB 1, ,2, ,3 ; ; 此行的此行的“,”,”不是序列分隔符不是序列分隔符1.3 1.3 变量变量16W1 DW B2 W1 DW B2 ;用;用B2B2的偏移地址初始化的偏移地址初始化W1W1变量变量B1 DB B1 DB AB$AB$ ;变量;变量B1B1用用A A、B B、$ $的的ASCIIASCII码初始化码初始化W2 DWW2 DW 1994H1994HD DD EW D DD EW ;用;用 EWEW的段基址和偏移地址初始化的段基址和偏移地址初始化D DB2 DB 2 DUP(-5,-1)B2 DB 2 DUP(-5,-
14、1) DB 1 DUP(10, DB 1 DUP(10, E E ) ) ;重复因子;重复因子1 1不能省不能省 DB DB 1313 , ,1,31,3在附加数据段在附加数据段DATA2DATA2中定义的变量如下:中定义的变量如下:EQ DQ 1234567890ABCDEFHEQ DQ 1234567890ABCDEFHEW DW EW DW ABAB , , CDCD ;用;用DWDW定义,字定义,字符符不超过不超过2 2个个例例 画出数据的存储形式画出数据的存储形式1.3 1.3 变量变量17 地址有字节、字、双字等类型。可以使用地址有字节、字、双字等类型。可以使用PTRPTR算符临时
15、变更原地址表达式的类型属性算符临时变更原地址表达式的类型属性, ,或或者明确没有类型属性的地址表达式的类型。者明确没有类型属性的地址表达式的类型。格式:格式: 类型类型 PTR PTR 地址表达式地址表达式接上例,如:接上例,如:BYTEBYTE PTR BX+5 PTR BX+5 ;明确类型;明确类型 WORDWORD PTR B1 PTR B1 ;临时变更;临时变更5. 5. 地址表达式类型的变更地址表达式类型的变更1.3 1.3 变量变量18汇编语言与汇编程序1 13 3符号指令中的表达式符号指令中的表达式操操作作数数的寻址方式的寻址方式常用指令常用指令4 4 伪指令伪指令2 25 5常
16、用系统功能调用和常用系统功能调用和 BIOSBIOS19符号指令的格式:符号指令的格式: 操作助记符操作助记符 目的操作数目的操作数,源操作数,源操作数 ;注释;注释 操作助记符操作助记符指明指明指令进行什么操作指令进行什么操作 源操作数指明操作数据的地址;目的操作数既指明操作数据的源操作数指明操作数据的地址;目的操作数既指明操作数据的地址,还指明(操作后)数据的存放地址地址,还指明(操作后)数据的存放地址寻址方式寻址方式用什么方式寻找操作数据。用什么方式寻找操作数据。寻址方式可分为三大类:寻址方式可分为三大类: 立即寻址:操作数就是操作数据立即寻址:操作数就是操作数据 寄存器寻址:操作数是寄
17、存器名寄存器寻址:操作数是寄存器名 存储器寻址存储器寻址 :操作数是地址表达式:操作数是地址表达式2 2 操操作作数数的寻址方式的寻址方式20操作数据在指定的寄存器中操作数据在指定的寄存器中1. 1. 寄存器寻址寄存器寻址 例:例: AX=2035HAX=2035H,BX=0178H BX=0178H MOV BX MOV BX,AX ;BX=AX=2035HAX ;BX=AX=2035H ADD AL ADD AL,BL ;AL=ADH,BL=78HBL ;AL=ADH,BL=78HAH,AL,BH,BL,CH,CL,DH,DL8AH,AL,BH,BL,CH,CL,DH,DL8位通用寄存器位
18、通用寄存器AX,BX,CX,DX,SI,DI,BP,SP16AX,BX,CX,DX,SI,DI,BP,SP16位通用寄存器位通用寄存器传送指令传送指令助记符助记符目的操目的操作数作数源操作源操作数数21操作数即为操作数据,操作数即为操作数据,操作数据就操作数据就在指令中在指令中l立即寻址方式只能用于源操作数,主要用来给寄存立即寻址方式只能用于源操作数,主要用来给寄存器或存储器赋初值器或存储器赋初值 例:例:MOV 5,AL MOV 5,AL 2. 2. 立即寻址立即寻址例:例:MOV AL,5 ;MOV AL,5 ;将字节将字节05H05H送送ALAL,AL=05HAL=05H MOV AX,
19、18 ; MOV AX,18 ;将字将字0012H0012H送送AXAX,AX=0012HAX=0012H MOV BL, MOV BL,1 ;1 ;将字节将字节FFHFFH送送BLBL,BL=0FFHBL=0FFH22操作数据在存储器中,其操作数据在存储器中,其偏移地址由指令直接给偏移地址由指令直接给出出( (地址表达式中只有变量名和常量)。地址表达式中只有变量名和常量)。段地址默段地址默认在认在DSDS中中3. 3. 直接寻址直接寻址一种通过一种通过 数值数值 :例:例 MOV AX,1000HMOV AX,1000H一种通过如下地址表达式:一种通过如下地址表达式:变量名变量名 或或 变量
20、名变量名+ +常量常量 例:例:MOV AX,W MOV AX,W 该指令的源操作数的地址为该指令的源操作数的地址为 DSDS:OFFSET WOFFSET W23l直接寻址常用已定义的变量表示直接寻址常用已定义的变量表示 例:例:W2 DW W2 DW 5 5,1994H1994H MOV AX, W2 MOV AX, W2 ; AX=FFFBHAX=FFFBH MOV BX MOV BX,W2W22 2 ; BXBX1994H1994Hl区分立即寻址与直接寻址区分立即寻址与直接寻址 从变量中取数据属于直接寻址方式,注意与符号从变量中取数据属于直接寻址方式,注意与符号常量区别常量区别 例:例
21、:AA EQU 10AA EQU 10 MOV AX MOV AX,AA AA ;立即寻址,;立即寻址,AX=000AHAX=000AH MOV BX MOV BX,AA+5 AA+5 ;立即寻址,;立即寻址,BX=000FHBX=000FH24操作数操作数为带方括号的寄存器为带方括号的寄存器:SISI,DIDI,BXBX,BPBP寄存器的内容为操作数据的偏移地址寄存器的内容为操作数据的偏移地址4. 4. 间接寻址间接寻址l若用若用BPBP,约定段寄存器为约定段寄存器为SSSS;否则,约定段寄存器否则,约定段寄存器为为DSDS。 例:例:MOV AX, BX ;(DS:BX)MOV AX, B
22、X ;(DS:BX)AX AX l 例:例:MOV AX, BP ;(SS:BP)MOV AX, BP ;(SS:BP)AXAX 25 操作数据在存储器中,其操作数据在存储器中,其偏移地址为偏移地址为基址寄存器基址寄存器(BXBX或或BPBP)的内容与变量的偏移地址、常量之和)的内容与变量的偏移地址、常量之和: : 变量名变量名+ +基址寄存器基址寄存器+ +常量常量 或或 变量名变量名 基基址址寄寄存存器器+ +常量常量 例例: MOV BL,2BX: MOV BL,2BX 或或 MOV BL,BX+2MOV BL,BX+2 ;(DS:BX+2);(DS:BX+2)BLBL例:例: MOV
23、6BP,AXMOV 6BP,AX 或或 MOV BP+6,AX ; MOV BP+6,AX ; AXAXSS:BP+6SS:BP+6 段寄存器的确定,首先由变量确定;若无变量,则由寄存器段寄存器的确定,首先由变量确定;若无变量,则由寄存器确定,寄存器确定的原则同间址。确定,寄存器确定的原则同间址。5. 5. 基址寻址基址寻址266. 6. 变址寻址变址寻址操作数据在存储器中,其偏移地址为操作数据在存储器中,其偏移地址为变址寄存器(变址寄存器(SISI或或DIDI)的内容与的内容与变量的偏移地址、常量变量的偏移地址、常量之和。之和。 例:例:MOV AX,2SI MOV AX,2SI 或或 MO
24、V AX,SI+2 MOV AX,SI+2 执行的操作是执行的操作是(DS:SI+2) AX(DS:SI+2) AX 段寄存器的确定,首先由变量确定;若无变量,则由段寄存器的确定,首先由变量确定;若无变量,则由寄存器确定,寄存器确定的原则同间址。寄存器确定,寄存器确定的原则同间址。 277. 7. 基址变址寻址基址变址寻址 例例: MOV AX,4 BX+DI: MOV AX,4 BX+DI 或或MOV AX,BX+DI+4 MOV AX,BX+DI+4 ;(DS:BX+DI+4)AX (DS:BX+DI+4)AX 段寄存器的确定,首先由变量确定;若无变量,则由段寄存器的确定,首先由变量确定;
25、若无变量,则由基址寄存器确定,基基址寄存器确定,基址址寄存器确定的原则同间址。寄存器确定的原则同间址。 操作数据在存储器中,其偏移地址为指令中指定操作数据在存储器中,其偏移地址为指令中指定的基址寄存器和变址寄存器的内容的基址寄存器和变址寄存器的内容与与变量的偏移变量的偏移地址、常量地址、常量之和。之和。28( (1 1) )存储器寻址与地址表达式存储器寻址与地址表达式地址表达式的一般形式是:地址表达式的一般形式是:变量变量 基址寄存器基址寄存器+ +变址寄存器变址寄存器+ +常量常量 也可表示为:也可表示为: 基址寄存器基址寄存器+ +变址寄存器变址寄存器+ +变量变量+ +常量常量 其他寻址
26、方式都是其他寻址方式都是一般形式一般形式的不完整形式的不完整形式: : 直接寻址直接寻址: :变量变量+ +常量常量 或或 变量变量+ +常量常量 间接寻址间接寻址: : 寄存器寄存器 基址或变址寻址基址或变址寻址: :变量变量 寄存器寄存器+ +常量常量 或或变量变量/ /常量常量 寄存器寄存器 基址变址寻址基址变址寻址: :变量变量 基址寄存器基址寄存器+ +变址寄存器变址寄存器+ +常量常量 或或基址寄存器基址寄存器+ +变址寄存器变址寄存器+ +变量变量+ +常量常量 10. 10. 存储器寻址及存储器中段基址或段选择字的确定存储器寻址及存储器中段基址或段选择字的确定29例如例如: M
27、OV ES:DI, AL : MOV ES:DI, AL ;AL ES:DIAL ES:DI段超越或段更换是在地址表达式前写上段名或段寄段超越或段更换是在地址表达式前写上段名或段寄存器来表示的。存器来表示的。(3)(3) 段超越或段更换段超越或段更换30(2)(2)存储器寻址中段寄存器的确定存储器寻址中段寄存器的确定存储器存取方式存储器存取方式约定段寄存器约定段寄存器 段更换段更换偏移地址偏移地址取指令取指令CSCS不允许不允许IPIP堆栈操作堆栈操作SSSS不允许不允许SPSP数据存取数据存取(BP(BP间址、基址除外间址、基址除外) )DSDS另外另外5 5个段寄存器个段寄存器EAEABP
28、BP间址、基址数据存取间址、基址数据存取SSSS另外另外5 5个段寄存器个段寄存器EAEA有效地址有效地址EAEA(Effective(Effective Address) Address)是汇编程序计算后得到是汇编程序计算后得到的地址表达式的偏移地址。的地址表达式的偏移地址。 31存储器寻址方式例存储器寻址方式例MOV AL, 1000H ;(;(DS : 1000H)的字节的字节AL MOV AX, 1000H ;(;(DS : 1000H)的字)的字AXMOV 2000H, BX; BX (DS : 2000H)MOV AX, BX ;(;(DS : BX)的字的字AXMOV AX, E
29、S:BX ;(ES : BX)的字的字AXMOV AX, BX-100 ;(;(DS :(BX-100)的字的字AXMOV BX+ SI ,AX ; AX (DS : (BX+ SI)) MOV AL,BX+ SI+10 ; (DS : (BX+ SI+10))的字节)的字节 AX32汇编语言与汇编程序1 1符号指令中的表达式符号指令中的表达式操操作作数数的寻址方式的寻址方式常用指令常用指令2 2 伪指令伪指令3 34 45 5常用系统功能调用和常用系统功能调用和 BIOSBIOS33 数据传送指令数据传送指令 加减运算指令加减运算指令 逻辑运算指令逻辑运算指令 移位指令移位指令 注:学习时注
30、意注:学习时注意指令格式及功能指令格式及功能3 3 常用指令常用指令34 1. 1.通用数据传送指令通用数据传送指令 格式:格式: MOV MOV destdest, sourcesource 目的操作数目的操作数 源操作数源操作数 功能:将一个字节或一个字或一个双字数据功能:将一个字节或一个字或一个双字数据从源传送至目的地址中,源保持不变从源传送至目的地址中,源保持不变3.1 3.1 数据传送类指令数据传送类指令指令特点:将数据从一个部位传送到另一部位。指令特点:将数据从一个部位传送到另一部位。不影响标志寄存器中的状态标志位。不影响标志寄存器中的状态标志位。35MOVMOV指令指令的的9 9
31、种形式:种形式:MOV REGMOV REG,REGREGMOV REGMOV REG,IMMIMMMOV MEMMOV MEM,IMM IMM MOV MEMMOV MEM,REGREGMOV REGMOV REG,MEMMEMMOV SEGREGMOV SEGREG,REG REG ;CSCS除外除外MOV REGMOV REG,SEGREGSEGREGMOV SEGREGMOV SEGREG,MEM MEM ;CSCS除外除外MOV MEMMOV MEM,SEGREGSEGREG3.1 3.1 数据传送类指令数据传送类指令36l一个指令中,两操作数一个指令中,两操作数类型必须一致类型必须
32、一致l至少至少1 1个操作数的个操作数的类型要明确类型要明确,不能出现二义性,不能出现二义性l代码段寄存器代码段寄存器CSCS和和立即数立即数均不能作为目的操作数均不能作为目的操作数l源操作数和目的操作数源操作数和目的操作数不能同时为不能同时为存储器操作数存储器操作数 l两个操作数类型都不明确,可以使用两个操作数类型都不明确,可以使用PTRPTR运算符运算符使之合法。使之合法。注意:注意:3.1 3.1 数据传送类指令数据传送类指令37(1)(1)字节、字和双字交换指令字节、字和双字交换指令格式:格式:XCHG XCHG destdest,sourcesource 功能功能: : 将源地址与目
33、的地址中的内容互换将源地址与目的地址中的内容互换 XCHG REG, REGXCHG REG, REG XCHG REG, MEM XCHG REG, MEM XCHG MEM, REG XCHG MEM, REG3.3.数据交换指令数据交换指令3.1 3.1 数据传送类指令数据传送类指令38例如,数据段中有两个字变量例如,数据段中有两个字变量W1W1和和W2W2,编写程序段将两个,编写程序段将两个字变量互换字变量互换 W1 DW 1234HW1 DW 1234H W2 DW 5678H W2 DW 5678H用数据交换指令实现:用数据交换指令实现: MOV AXMOV AX,W1 W1 ;A
34、X=1234HAX=1234H XCHG AX XCHG AX,W2 W2 ;AX=5678HAX=5678H,W2=1234HW2=1234H MOV W1 MOV W1,AX AX ;W1=5678HW1=5678H仅用仅用MOVMOV指令实现:指令实现: MOV AXMOV AX,W1W1 MOV BX MOV BX,W2W2 MOV W1 MOV W1,BXBX MOV W2 MOV W2,AXAX3.1 3.1 数据传送类指令数据传送类指令394. 4. 栈操作指令栈操作指令堆栈的概念堆栈的概念l堆栈中数据的存取遵循堆栈中数据的存取遵循“先进后出先进后出”的原则。的原则。l堆栈的活动
35、端称为堆栈的活动端称为栈顶栈顶,固定端称为,固定端称为栈底栈底。 l80 x8680 x86的堆栈的伸展方向是从高地址向低地址。的堆栈的伸展方向是从高地址向低地址。l堆栈操作都是堆栈操作都是字操作字操作, ,进栈时进栈时SPSP自动减自动减2,2,出栈时出栈时SPSP自动加自动加2 2。 3.1 3.1 数据传送类指令数据传送类指令40(1)(1)进栈指令进栈指令 格式:格式:PUSH sourcePUSH sourceSP0040HSP003FHSP003EH1234例:例:AX=1234HAX=1234H PUSH AX PUSH AX执行执行AXAH AL12 34执行过程如下图:执行过
36、程如下图:3.1 3.1 数据传送类指令数据传送类指令41(2)(2)出栈指令出栈指令 格式:格式:POP POP destdestBXBH BLSP0040HSP003FH12SP003EH34执行执行1234例:例:POP BXPOP BX执行过程如下图:执行过程如下图:3.1 3.1 数据传送类指令数据传送类指令42使用栈操作指令实现将数据段中两个字变量使用栈操作指令实现将数据段中两个字变量W1W1和和W2W2互互换的程序段如下:换的程序段如下:PUSH W1PUSH W1PUSH W2PUSH W2POP W1POP W1POP W2POP W23.1 3.1 数据传送类指令数据传送类
37、指令433.1 3.1 数据传送类指令数据传送类指令(3 3)通用寄存器进栈)通用寄存器进栈PUSHAPUSHA和出栈指令和出栈指令POPAPOPAPUSHAPUSHA指令执行的操作是将指令执行的操作是将1616位通用寄存器进栈,进栈次序为位通用寄存器进栈,进栈次序为:AXAX、CXCX、DXDX、BXBX、指令执行前的、指令执行前的SPSP、BPBP、SISI、DIDI。44加减运算的操作数:加减运算的操作数:注:注:l加减法指令执行后的结果将影响状态标志加减法指令执行后的结果将影响状态标志 3.2 3.2 加减运算指令加减运算指令45 1.1.加法类指令加法类指令 (1 1)加法指令)加法
38、指令ADDADD格式:格式:ADD ADD destdest,sourcesource操作:操作: source + source + destdest destdest 即将源操作数据与目的操作数据相加,结果存即将源操作数据与目的操作数据相加,结果存入目的地址中,源地址内容不变入目的地址中,源地址内容不变(2 2)带进位的加法指令)带进位的加法指令ADCADC格式:格式:ADC ADC destdest,sourcesource操作:操作:destdest + source + + source + CFdestCFdest ; CFCF为前为前面指令产生的面指令产生的CFCF46 格式:格
39、式:INC INC destdest 操作:操作:dest+1destdest+1dest 例:例: MOV BXMOV BX,1 1 INC BX INC BX ; BX=0002HBX=0002Hl操作数只能为操作数只能为REGREG和和MEMMEM,类型要明确。,类型要明确。例:例: INC CL INC CL INC SI INC SI 类型不明确类型不明确 INC BYTE PTRSI INC BYTE PTRSI INC 2000H INC 2000H 立即数没有类型立即数没有类型l该指令常用于修改偏移地址和计数次数该指令常用于修改偏移地址和计数次数(3 3)增量指令)增量指令IN
40、CINC47 格式:格式:DEC DEC destdest 操作:操作:destdest1dest1dest(1 1) 减法指令减法指令SUBSUB 2. 2. 减法类指令减法类指令格式:格式:SUB SUB destdest,sourcesource操作:操作:destdest source source destdest(2 2)带借位减指令带借位减指令SBBSBB格式:格式:SBB SBB destdest,sourcesource操作:操作: destdest source source CFCF destdest ;CF ;CF为前面为前面指令产生的进位指令产生的进位( (借位借位)
41、 )(3 3)减量指令减量指令DECDEC48 (3 3)比较指令)比较指令 CMPCMP 格式:格式:CMP CMP destdest,sourcesource 操作操作: : destdest sourcesourcel 执行减操作,执行减操作,只只影响标志,不改变操作数影响标志,不改变操作数l 主要用来判断两数的大小与是否相等主要用来判断两数的大小与是否相等l 后面常跟条件转移指令,根据比较结果实现程序后面常跟条件转移指令,根据比较结果实现程序的分支的分支49 1.1.求补指令求补指令格式:格式:NEG NEG destdest操作:将操作数中的内容求补后再送入操作数中操作:将操作数中的
42、内容求补后再送入操作数中l单操作数指令,操作数只能是单操作数指令,操作数只能是REGREG,MEMMEMl该指令是求补指令,而不是求补码指令该指令是求补指令,而不是求补码指令l影响标志,影响标志,影响规律同减法指令影响规律同减法指令3.3 3.3 逻辑运算逻辑运算指令指令50l若将执行求补指令前后的数均视为补码数,则求补若将执行求补指令前后的数均视为补码数,则求补指令将该数变为绝对值相等符号相反的另一个数。指令将该数变为绝对值相等符号相反的另一个数。例:例: MOV AXMOV AX,0FFFBH 0FFFBH ; AX=FFFBH AX=FFFBH NEG AX NEG AX ; AX=00
43、05H AX=0005H 例:例: MOV BXMOV BX,000AH 000AH ; BX=000AHBX=000AH NEG BX NEG BX ; BX=FFF6HBX=FFF6H51 格式:格式:NOT NOT destdest操作操作:将操作数中的内容逐位取反后再送回操作数将操作数中的内容逐位取反后再送回操作数中中注:注:单操作数指令,操作数只能是单操作数指令,操作数只能是REGREG,MEMMEMl该指令只是执行求反操作,而不是求反码指令,该指令只是执行求反操作,而不是求反码指令,对符号位也求反对符号位也求反l 该指令不影响标志位该指令不影响标志位2. 2. 求反指令求反指令52
44、 格式:格式:AND AND destdest,sourcesource操作:操作: destsourcedestdestsourcedest作用:作用:取出取出目的操作数中与源操作数的目的操作数中与源操作数的“1”1”对应的位对应的位例:例:MOV AXMOV AX,0F6E5H0F6E5H AND AX AND AX,000FH 000FH ; AX=0005HAX=0005H3. 3. 逻辑与指令逻辑与指令53 格式:格式:OR OR destdest,sourcesource 操作:操作: destdest sourcedestsourcedest 作用:将目的操作数和源操作数中的所有
45、作用:将目的操作数和源操作数中的所有“1”1”位位拼合拼合在一起在一起 例:例:MOV BXMOV BX,7B00H7B00H OR BXOR BX,0056H 0056H ;BX=7B56H BX=7B56H 对应对应“1”1”位置位置1 1,对应,对应“0”0”位则不变位则不变4. 4. 逻辑或指令逻辑或指令54 格式:格式:XOR XOR destdest,sourcesource 操作:操作:destdest sourcedestsourcedest, 作用:将作用:将REGREG清清0 0,也可将目的操作数中的某些,也可将目的操作数中的某些位取反位取反 例例: MOV CX, 35E
46、BH: MOV CX, 35EBH XOR CX, 00FFH ; CX=3514H XOR CX, 00FFH ; CX=3514H思考:用什么方法可以实现对通用寄存器清思考:用什么方法可以实现对通用寄存器清0 0? XOR AXXOR AX,AXAX MOV AX MOV AX,0 0 SUB AX SUB AX,AXAX AND AX AND AX,0 0 5. 5. 逻辑异或指令逻辑异或指令55例例: : 将将AXAX的高的高4 4位位,CX,CX的中间的中间8 8位位,BX,BX的低的低4 4位拼合起来,位拼合起来,程序段如下:程序段如下:如如:AX=1234H,BX=5678H,C
47、X=9ABCHAX=ACCBH:AX=1234H,BX=5678H,CX=9ABCHAX=ACCBH AND AH AND AH,0F0H 0F0H ;取;取AXAX高高4 4位位,AH=10H,AH=10H AND BL AND BL,0FH 0FH ;取;取BXBX低低4 4位位,BL=08H,BL=08H AND CX AND CX,0FF0H 0FF0H ;取;取CXCX中间中间8 8位位,CX=0AB0H,CX=0AB0H OR CH OR CH,AH ; AH ; 拼字拼字 CH=1AH CH=1AH OR CL OR CL,BL BL ;CL=0B8H CX=1AB8HCL=0B
48、8H CX=1AB8H56目的操作数仅可以是目的操作数仅可以是REGREG或或MEMMEM源操作数为源操作数为移位的次数,只能是移位的次数,只能是CLCL或立即数或立即数1 131,31,80868086微处理器的立即数只能是微处理器的立即数只能是1 1。 以以CLCL为源操作数的移位指令执行以后为源操作数的移位指令执行以后,CL,CL的值不变的值不变移位指令为双操作数指令,用于将目的操作数中移位指令为双操作数指令,用于将目的操作数中的二进制数移位的二进制数移位3.4 3.4 移位指令移位指令57 格式格式: : SHR SHR destdest,sourcesource操作操作: : ;最后
49、移出位移至;最后移出位移至CFCF 用用0 0填补已空出的位填补已空出的位 例:例:AL=AL=abcdefghabcdefgh SHR AL SHR AL,1 1 ;执行后,;执行后,AL=0abcdefgAL=0abcdefg,CF=hCF=h 例:例:AL=AL=abcdefghabcdefgh,CL=3CL=3 SHR AL SHR AL,CL CL ;执行后,;执行后,AL=000abcdeAL=000abcde,CF=f CF=f destCF01.1.逻辑右移逻辑右移SHRSHR58 格式格式: : SAR SAR destdest,sourcesource操作操作: ;: ;最
50、后移出位移至最后移出位移至CFCF, 最高位向右移动同时最高位向右移动同时 保持不变保持不变例:例:AL=AL=abcdefghabcdefgh SAR AL SAR AL,1 1 ;执行后,;执行后,AL=AL=aabcdefgaabcdefg,CF=hCF=hdestCF2.2.算术右移算术右移SARSAR59注:注:l逻辑右移逻辑右移SHRSHR一位,等于对一位,等于对无符号数除以无符号数除以2 2运算运算 例例: MOV AL: MOV AL,0CH 0CH ; AL=12AL=12 SHR AL SHR AL,1 1 ; AL=6AL=6l算术右移算术右移SARSAR一位一位, ,等
51、于对等于对符号数除以符号数除以2 2运算运算 例例: MOV CH: MOV CH,80H 80H ;CH=80HCH=80H128128 SAR CH SAR CH,1 1 ;CH=C0HCH=C0H646460 格式格式: : SHL SHL destdest,sourcesource SAL SAL destdest,sourcesource操作操作: ;: ;最后移出位移至最后移出位移至CFCF 用用0 0填补已空出位填补已空出位 例:例:AL=AL=abcdefghabcdefgh SHL AL SHL AL,1 1 ;执行后,;执行后,AL=bcdefgh0AL=bcdefgh0,
52、CF=aCF=adestCF03.3.算术算术/ /逻辑左移逻辑左移SAL/SHLSAL/SHL61 格式格式: : ROR ROR destdest,sourcesource操作操作: ;: ;右边移出位移入右边移出位移入CFCF, 同时移入左边空出位同时移入左边空出位例:例:AL=AL=abcdefghabcdefgh ROR AL ROR AL,1 1 执行后,执行后,AL=AL=habcdefghabcdefg,CF=h CF=h destCF4.4. 循环右移循环右移RORROR62 格式格式: : ROL ROL destdest,sourcesource操作操作: ;: ;左边移
53、出位移入左边移出位移入CFCF, 同时移入右边空出位同时移入右边空出位例例: : 将相邻字节变量将相邻字节变量B1B1(低地址)和(低地址)和B2B2中的两个中的两个8 8位位二进制数交换二进制数交换 MOV CLMOV CL,8 8 ROL WORD PTR B1 ROL WORD PTR B1,CL CL destCF5.5.循环左移循环左移ROLROL63 格式格式: : RCR RCR destdest,sourcesource操作操作: : ;前面指令产生的前面指令产生的CFCF 移至最高位移至最高位 例:例:AL=AL=abcdefghabcdefgh,CF=iCF=i,CL=4C
54、L=4 RCR AL RCR AL,CLCL 执行后,执行后,AL=AL=fghiabcdfghiabcd,CF=eCF=edestCF6.6. 带进位循环右移带进位循环右移RCRRCR64 格式格式: : RCL RCL destdest,sourcesource操作操作: : ;前面指令产生的前面指令产生的CFCF 移至最低位移至最低位 例:例:AL=AL=abcdefghabcdefgh,CF=iCF=i RCL AL RCL AL,1 1 执行后,执行后,AL=AL=bcdefghibcdefghi,CF=aCF=adestCF7.7.带进位循环左移带进位循环左移RCLRCL65思路:
55、思路:(W)(W)10=(W)10=(W)(2(23 3+2)=(W)+2)=(W)2 23 3+(W)+(W)2 2 16 16位无符号数乘以位无符号数乘以2 2和乘以和乘以8 8分别用左移分别用左移1 1位和左移位和左移3 3位实现位实现 16 16位无符号乘以位无符号乘以2 2有可能大于有可能大于1616位无符号数的最大位无符号数的最大值值6553565535,因此要将它扩展为,因此要将它扩展为3232位的无符号数再乘以位的无符号数再乘以2 2,即用逻辑左移双字来实现乘以即用逻辑左移双字来实现乘以2 2的操作的操作 例例2 2 编写程序段将字变量编写程序段将字变量W W中的无符号数乘以中
56、的无符号数乘以1010,乘,乘积存入变量积存入变量J2J2中中 66W DW 65525J2 DW 0, 0 MOV AX, W XOR DX, DX ;DX清清0,扩展为,扩展为32位位 SHL AX, 1 ;乘以;乘以2 RCL DX, 1 MOV J2+2, DX ;保存乘以;保存乘以2的结果的结果 MOV J2, AX SHL, AX, 1 ;W中的内容乘以中的内容乘以4 RCL DX, 1 SHL AX, 1 ;W中的内容乘以中的内容乘以8 RCL DX, 1 ADD J2, AX ;2(W)+8(W) ADC J2+2, DX67该程序的移位指令的执行过程如图所示: 68 例例3
57、3 字变量字变量NUMWNUMW中有一无符号数,编写程序中有一无符号数,编写程序, ,计算计算(NUMWNUMW) 16+3016+30并将结果送入并将结果送入NUMW+2NUMW+2和和NUMWNUMW NUMW DW 1234HNUMW DW 1234H,0 0MOV CL, 4MOV CL, 4 ROL NUMW, CL ROL NUMW, CL ;将;将NUMWNUMW字单元中的字单元中的1234H1234H变成变成2341H2341HMOV AX, 000FHMOV AX, 000FH AND AX, NUMW AND AX, NUMW ;取低位字的最低;取低位字的最低4 4位位 A
58、X=0001HAX=0001HAND NUMW, 0FFF0H AND NUMW, 0FFF0H ;清低位字的最低;清低位字的最低4 4位位 (NUMW)=2340H(NUMW)=2340HADD NUMW, 30 ADD NUMW, 30 ;低位字加;低位字加3030 ADC AX, 0 ADC AX, 0 ;将低位字相加的进位加入高位字;将低位字相加的进位加入高位字 MOV NUMW+2, AXMOV NUMW+2, AX69汇编语言与汇编程序1 13 3符号指令中的表达式符号指令中的表达式操操作作数数的寻址方式的寻址方式常用指令常用指令2 2 伪指令伪指令4 45 5常用系统功能调用和常
59、用系统功能调用和 BIOSBIOS70格式:过程名格式:过程名 PROCPROCNEARNEAR或或FARFAR 过程名过程名 ENDPENDP注:注:lPROCPROC和和ENDPENDP必须成对出现必须成对出现lPROCPROC和和ENDPENDP前的过程名必须有且相同前的过程名必须有且相同l过程的类型由过程的类型由PROCPROC的操作数确定,默认为的操作数确定,默认为NEARNEAR类型类型l由过程定义伪指令定义的子程序,通过由过程定义伪指令定义的子程序,通过CALLCALL指令调用指令调用lPROCPROC和和ENDPENDP之间至少有一条子程序返回指令之间至少有一条子程序返回指令R
60、ETRET,以返,以返回调用它的程序回调用它的程序4.1 4.1 过程的定义过程的定义71格式:格式:段名段名 SEGMENT SEGMENT 定位方式定位方式组合方式组合方式字长选择字长选择 类别名类别名 段名段名 ENDSENDSlSEGMENTSEGMENT和和ENDSENDS必须成对出现,且前面的必须成对出现,且前面的“段名段名”相同相同l段名用来表示段地址段名用来表示段地址4.3 4.3 段的定义段的定义72 用用$ $表示表示,记录正在被汇编程序翻译的指令的地址,记录正在被汇编程序翻译的指令的地址例:例:DATA SEGMENTDATA SEGMENT BUF DB BUF DB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论