第2章汇编语言与汇编程序_第1页
第2章汇编语言与汇编程序_第2页
第2章汇编语言与汇编程序_第3页
第2章汇编语言与汇编程序_第4页
第2章汇编语言与汇编程序_第5页
已阅读5页,还剩118页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1微机原理、汇编与接口技术2第二章 汇编语言与汇编程序2.22.22.32.3符号指令中的表达式符号指令中的表达式符号指令的寻址方式符号指令的寻址方式常用指令常用指令2.42.4 伪指令伪指令2.12.12.52.5常用系统功能调用和常用系统功能调用和 BIOSBIOS3机器指令机器指令用二进制编码形式下达的指示和命令。用二进制编码形式下达的指示和命令。如:如:1100 1101 0010 00011100 1101 0010 0001 机器语言编写程序烦琐,难记机器语言编写程序烦琐,难记忆,不易理解,易出错忆,不易理解,易出错符号指令符号指令由由助记符、符号助记符、符号组成,它与机器指令一组

2、成,它与机器指令一一对应。一对应。 1100 1101 0010 0001 1100 1101 0010 0001 INT 21HINT 21H 汇编汇编机器只能识别机器指令,所以需要将符号指机器只能识别机器指令,所以需要将符号指令翻译成机器指令,翻译的过程称作汇编。令翻译成机器指令,翻译的过程称作汇编。汇编程序汇编程序完成汇编任务的程序。完成汇编任务的程序。41E1EPUSH DSPUSH DS2BC02BC0SUB AX,AXSUB AX,AX5050PUSH AXPUSH AXB84D14B84D14MOV AX,144DMOV AX,144D8ED88ED8MOV DS,AXMOV D

3、S,AX 汇编语言源程序汇编语言源程序汇编程序汇编程序目标文件目标文件汇编语言源程序汇编语言源程序用符号指令书写的程序。用符号指令书写的程序。5学习要点学习要点l正确正确定义各种符号,熟练使用地址表达式定义各种符号,熟练使用地址表达式l熟练掌握汇编语言的常用指令熟练掌握汇编语言的常用指令l掌握符号指令的寻址方式掌握符号指令的寻址方式l汇编语言的格式汇编语言的格式6以字母开头的一串字符以字母开头的一串字符为了区别符号和数据,以字母开头的十六进制数,为了区别符号和数据,以字母开头的十六进制数,其前面要加一个前导其前面要加一个前导0 0如:如: 0FFH 0FFH 数据数据 FFH FFH 符号符号

4、 符号符号汇编中的各种符号由伪指令定义,有汇编中的各种符号由伪指令定义,有常量、变量和标号常量、变量和标号三类三类2.1 2.1 符号指令中的表达式符号指令中的表达式7常用的有二进制数、十进制常用的有二进制数、十进制数数、十六进制、十六进制数数和和ASCIIASCII字符字符如:如: 1010B1010B, 1010,0AH0AH,A A,$ $,ABCABC1 1、常量常量 在汇编时已有确定数值的量在汇编时已有确定数值的量ASCIIASCII字符做数值常量时,需加单引号字符做数值常量时,需加单引号2.1.1 2.1.1 常量和数值表达式常量和数值表达式(1 1)数值常量)数值常量8程序中为经

5、常使用的数值取的名。程序中为经常使用的数值取的名。用用EQUEQU或或“”伪指令定义,如:伪指令定义,如: P EQU 314 P EQU 314 P=314 P=314注注:汇编时,汇编程序不给符号常量分配存储单元:汇编时,汇编程序不给符号常量分配存储单元(2 2)符号常量)符号常量2.1.1 2.1.1 常量常量92 2、数值表达式数值表达式数字表达式数字表达式由常量与运算符组成的有意义的由常量与运算符组成的有意义的式子式子,结果为一数值。,结果为一数值。在汇编语言源程序中,允许对常量进行以下三种类型在汇编语言源程序中,允许对常量进行以下三种类型的运算:的运算:(1 1)算术运算算术运算

6、包括,包括,/ /,MODMOD(求余)(求余)(2 2)逻辑运算)逻辑运算 包括包括ANDAND,OROR,XORXOR,NOTNOT(3 3)关系运算)关系运算 包括:包括:EQEQ(),(),NENE(),),LTLT(),(),GTGT(),(),LELE(),),GEGE()2.1.1 2.1.1 常量常量101 1、 标号的标号的三个属性三个属性 (1 1)段地址段地址定义该标号所在段的段首址定义该标号所在段的段首址 (2 2)偏移地址偏移地址标号所在段的段首址到该标号定标号所在段的段首址到该标号定义指令的字节距离义指令的字节距离 (3 3)类型类型NEARNEAR和和FARFAR

7、两种两种 NEARNEAR段内调用,段内调用,FARFAR段间调用段间调用标号标号指令地址的符号表示指令地址的符号表示2.1.22.1.2 标号标号112.1.32.1.3 标号标号2 2 、标号的定义、标号的定义标号只在代码段中定义和使用,定义的方式有两种:标号只在代码段中定义和使用,定义的方式有两种: (1 1)书写在符号指令前,)书写在符号指令前,用:定义用:定义,为,为NEARNEAR类型,类型, NEARNEAR型标号只能在段内使用!型标号只能在段内使用!例:例: CYCLECYCLE:MOV ALMOV AL,SI SI ;定义近标号;定义近标号CYCLECYCLE(2 2)用)用

8、PROCPROCENDPENDP伪指令伪指令定义过程名定义过程名例:例:ABC PROC FAR ;ABC PROC FAR ;定义过程名定义过程名ABCABC为为FARFAR型标号型标号 ABC ENDP ABC ENDP12在汇编中都使用变量和地址表达式来表示存储器的在汇编中都使用变量和地址表达式来表示存储器的地址。地址。变量变量是存储器中的数据或数据区的符号表示。是存储器中的数据或数据区的符号表示。变量名变量名是数据的地址或数据区的首地址。是数据的地址或数据区的首地址。地址表达式地址表达式由变量、标号、寄存器、常量和运算符由变量、标号、寄存器、常量和运算符组成。组成。寄存器只能是寄存器只

9、能是1616位的位的SISI、DIDI、BXBX、BPBP和和3232位的通用寄存器位的通用寄存器 , ,且寄存器必须位于且寄存器必须位于 中。中。2.1.3 2.1.3 变量变量1.1.变量和地址表达式变量和地址表达式13(1 1)段地址)段地址定义变量所在段的段首地址定义变量所在段的段首地址. . 由由SEGSEG算符指定算符指定如:如: SEG W SEG W ;取变量;取变量W W的段地址的段地址(2 2)偏移地址)偏移地址变量所在段的段首址到该变量的字节变量所在段的段首址到该变量的字节距离距离. .由由OFFSETOFFSET算符指定算符指定如:如: OFFSET W OFFSET

10、W ;取变量;取变量W W的偏移地址的偏移地址2 2、变量的属性、变量的属性(3 3)类型)类型存取该变量中数据的字节数存取该变量中数据的字节数变量的类型有:字节(变量的类型有:字节(bytebyte),字(),字(wordword),双字),双字(dworddword),四字(),四字(qwordqword),十字节(),十字节(tbytetbyte),一个),一个数据分别占数据分别占1 1,2 2,4 4,8 8,1010个字节单元个字节单元14数据存放规律数据存放规律字节数据字节数据-一个字节单元存放一个字节单元存放字数据字数据-二个字节单元存放二个字节单元存放双字数据双字数据-四个字节

11、单元存放四个字节单元存放规定:规定:1.1.“低对低低对低, ,高对高高对高”2.2.低位字节的地址为字的地址低位字节的地址为字的地址3 3、变量存储区中数据的存放、变量存储区中数据的存放15在数据段或附加数据段中用伪指令定义在数据段或附加数据段中用伪指令定义格式:格式: 变量名变量名 DBDB 表达式表达式, , ;定义字节变量;定义字节变量 变量名变量名 DW DW 表达式表达式, , ;定义字变量;定义字变量 变量名变量名 DD DD 表达式表达式, , ;定义双字变量;定义双字变量 变量名变量名 DQ DQ 表达式表达式, , ;定义四字变量;定义四字变量 变量名变量名 DT DT 表

12、达式表达式, , ;定义十字节变量;定义十字节变量数据定义伪指令指明了变量的数据定义伪指令指明了变量的类型类型表达式确定了变量的表达式确定了变量的初值初值4 4、变量的定义、变量的定义16(1 1)表达式为常量或数值表达式)表达式为常量或数值表达式存入数值存入数值 如:如:W1W1 DWDW 1 1(2 2)表达式为)表达式为ASCIIASCII字符串字符串 存入存入ASCIIASCII值值 如:如:B1B1 DWDW AB ;用用DWDW定义时,串长不可大于定义时,串长不可大于2 2 B2B2 DBDB AB$ ;用用DBDB定义时,串长可大于定义时,串长可大于2 2(3 3)表达式为重复子

13、句)表达式为重复子句 格式:格式:N DUPN DUP(表达式)(表达式) 如:如:B3B3 DBDB 2 2 DUP(0)DUP(0) B4B4 DBDB 2 2 DUP(5,A)DUP(5,A)4 4、变量的定义、变量的定义17(4 4)地址表达式)地址表达式(只适用只适用DW、DD和和DF3个伪指令个伪指令) 格式:格式: 变量名变量名 DW DW 地址表达式地址表达式 ; ;取其偏移地址取其偏移地址来初来初 ; ;始化变量始化变量 变量名变量名 DD DD 地址表达式地址表达式 ; ;取其偏移地址和段取其偏移地址和段 ; ;地址地址来初始化其变量来初始化其变量(5 5)由以上表达式组成

14、的序列,之间用)由以上表达式组成的序列,之间用 ,分隔分隔 B5 B5 DBDB 1,2,31,2,3 B6 B6 DBDB 1, ,2, ,3 ; ; 此行的此行的, ,不是序列分隔符不是序列分隔符4 4、变量的定义、变量的定义18W1 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的高的高1616位段基址和偏移地址初始位段基

15、址和偏移地址初始D DB2 DB 2 DUP(-5,-1)B2 DB 2 DUP(-5,-1) DB 1 DUP(10, DB 1 DUP(10, E E ) ) ;重复因子;重复因子1 1不能省不能省 DB DB 1313 , ,1,31,3在附加数据段在附加数据段DATA2DATA2中定义的变量如下:中定义的变量如下:EQ DB 1234567890ABCDEFHEQ DB 1234567890ABCDEFHEW DW EW DW ABAB , , CDCD ;用;用DWDW定义变量时,长度不超过定义变量时,长度不超过2 2个字个字符符例例 画出数据的存储形式画出数据的存储形式19变量、标

16、号以及由其组成的地址表达式均有类型属性变量、标号以及由其组成的地址表达式均有类型属性. .地址表达式的类型属性由其中的变量或标号(地址表达式的类型属性由其中的变量或标号(一个一个地址表达式不可能同时含有变量和标号地址表达式不可能同时含有变量和标号)决定)决定. .不含不含变量或标号变量或标号, ,仅含寄存器的地址表达式没有类型属性仅含寄存器的地址表达式没有类型属性. .在编程时往往需要临时改变原定义的变量、标号或地在编程时往往需要临时改变原定义的变量、标号或地址表达式的类型属性址表达式的类型属性, ,或者明确没有类型属性的地址或者明确没有类型属性的地址表达式的类型表达式的类型. .而仍而仍保持

17、保持它们原来的段地址和偏移地它们原来的段地址和偏移地址属性不变址属性不变. .格式:格式: 类型类型 PTR PTR 地址表达式地址表达式如:如:BYTEBYTE PTR BX+5PTR BX+5 WORDWORD PTR B2PTR B25. 5. 地址表达式类型的变更地址表达式类型的变更20例:例: B DB 3B DB 3 W W DW 1122HDW 1122H WORD PTR B ;WORD PTR B ;将将B B临时改变为字类型临时改变为字类型 BYTEBYTE PTRPTR W ;W ;将将W W临时改变为字节类型临时改变为字节类型 BYTEBYTE PTRPTR B+1;B

18、+1;例:例: BYTEBYTE PTRPTR BXBX ;寄存器有类型属性,不能变更寄存器有类型属性,不能变更 BYTEBYTE PTRPTR BXBX 2.1.4 2.1.4 变量和标号类型的变更变量和标号类型的变更21第二章 汇编语言与汇编程序2.12.12.32.3符号指令中的表达式符号指令中的表达式符号指令的寻址方式符号指令的寻址方式常用指令常用指令2.42.4 伪指令伪指令2.22.22.52.5常用系统功能调用和常用系统功能调用和 BIOSBIOS22符号指令的格式:符号指令的格式: 操作助记符操作助记符 目的操作数目的操作数,源操作数,源操作数 ;注释;注释操作助记符操作助记符

19、指明指明指令进行什么操作指令进行什么操作目的操作数或源操作数指明用什么方式寻找操作的数据目的操作数或源操作数指明用什么方式寻找操作的数据 寻址方式寻址方式寻找操作数据存放位置(地址)的方式寻找操作数据存放位置(地址)的方式寻址方式可分为三大类:寻址方式可分为三大类: 立即寻址:操作数就是操作数据立即寻址:操作数就是操作数据 寄存器寻址:操作数是寄存器名寄存器寻址:操作数是寄存器名 存储器寻址存储器寻址 :操作数是地址表达式:操作数是地址表达式2.22.2 符号指令中的寻址方式符号指令中的寻址方式23操作数据在指定的寄存器中操作数据在指定的寄存器中2.2.12.2.1 寄存器寻址寄存器寻址 例:

20、例: 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位通用寄存器位通用寄存器AX,BX,CX,DX,SI,DI,BP,SP16AX,BX,CX,DX,SI,DI,BP,SP16位通用寄存器位通用寄存器EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP32EAX,EBX,ECX,ED

21、X,ESI,EDI,EBP,ESP32位通用寄存器位通用寄存器传送指令传送指令助记符助记符目的操目的操作数作数源操作源操作数数24操作数即为操作数据,操作数即为操作数据,操作数据就操作数据就在指令中在指令中l立即寻址方式只能用于源操作数,主要用来给寄立即寻址方式只能用于源操作数,主要用来给寄存器或存储器赋初值存器或存储器赋初值 例:例:MOV 5,AL MOV 5,AL l立即数没有类型属性立即数没有类型属性2.2.2 2.2.2 立即寻址立即寻址例:例:MOV AL,5 MOV AL,5 ; ;将字节将字节05H05H送送ALAL,AL=05HAL=05H MOV AX,18 MOV AX,

22、18 ; ;将字将字0012H0012H送送AXAX,AX=0012HAX=0012H MOV BL, MOV BL,1 1 ; ;将字节将字节FFHFFH送送BLBL,BL=0FFHBL=0FFH25操作数据在存储器中,其操作数据在存储器中,其偏移地址由指令直接给偏移地址由指令直接给出出( (地址表达式中只有变量名和常量)地址表达式中只有变量名和常量)2.2.3 2.2.3 直接寻址直接寻址地址表达式为:地址表达式为:变量名变量名 或或 变量名变量名+ +常量常量l段地址默认在段地址默认在DSDS中中 例:例:MOV AX,W MOV AX,W 该指令的源操作数的地址为该指令的源操作数的地址

23、为 DSDS:OFFSET WOFFSET W26l直接寻址常用已定义的变量表示直接寻址常用已定义的变量表示 例:例:W2 DW W2 DW 5 5,1994H1994H MOV AX, W2 MOV AX, W2 ; AX=FFFBHAX=FFFBH MOV BX MOV BX,W2W22 2 ; BXBX1994H1994Hl区分立即寻址与直接寻址区分立即寻址与直接寻址 从变量中取数据属于直接寻址方式,注意与符号从变量中取数据属于直接寻址方式,注意与符号常量区别常量区别 例:例:AA EQU 10AA EQU 10 MOV AX MOV AX,AA AA ;立即寻址,;立即寻址,AX=00

24、0AHAX=000AH MOV BX MOV BX,AA+5 AA+5 ;立即寻址,;立即寻址,BX=000FHBX=000FH2.2.3 2.2.3 直接寻址直接寻址27若若BX=0124HBX=0124H, MOVMOV AX,BXAX,BX ; ;寄存器寻址,寄存器寻址,AX=0124HAX=0124H MOVMOV CX,BX ;CX,BX ;间接寻址间接寻址,CX=1958H,CX=1958H 操作数操作数为带方括号的寄存器为带方括号的寄存器:SISI,DIDI,BXBX,BP,EAXESPBP,EAXESP寄存器的内容为操作数据的偏移地址寄存器的内容为操作数据的偏移地址2.2.4

25、2.2.4 间接寻址间接寻址28间接寻址只有一种形式间接寻址只有一种形式 寄存器寄存器 l间接寻址属于存储器寻址,间接寻址属于存储器寻址,寄存器内容为操作数据寄存器内容为操作数据的偏移地址的偏移地址。寄存器寻址中,寄存器内容即为操作。寄存器寻址中,寄存器内容即为操作数据。数据。l只有只有SI,DI,BX,BPSI,DI,BX,BP和和3232位的寄存器可用于间接寻址。位的寄存器可用于间接寻址。 例:例: MOV AXMOV AX,ECX ECX MOV AX MOV AX,CXCX l若用若用BPBP、EBPEBP、ESPESP间址,间址,约定段寄存器为约定段寄存器为SSSS;否则,否则,约定

26、段寄存器为约定段寄存器为DSDS。 例:例:MOV AX, BX ;(DS:BX)MOV AX, BX ;(DS:BX)AX AX l 例:例:MOV AX, BP ;(SS:BP)MOV AX, BP ;(SS:BP)AXAX 2.2.4 2.2.4 间接寻址间接寻址29 操作数据在存储器中,其操作数据在存储器中,其偏移地址为偏移地址为基址寄存器基址寄存器(BXBX或或BPBP或或3232位的寄存器)的内容位的寄存器)的内容与与变量的偏移地址、常变量的偏移地址、常量量之和。之和。 地址表达式:地址表达式: 变量名变量名+ +基址寄存器基址寄存器+ +常量常量 变量名变量名 基基址址寄寄存存器

27、器+ +常量常量 常量常量 基基址址寄寄存存器器+ +变量变量 地址表达式中可以没有变量或地址表达式中可以没有变量或常量,不能没有常量,不能没有基基址址寄寄存存器器 例例1 1:MOV BL,2BXMOV BL,2BX 或或 MOV BL,BX+2MOV BL,BX+2 ;(DS:BX+2);(DS:BX+2)BLBL例例2 2:MOV 6BP,AXMOV 6BP,AX 或或 MOV BP+6,AX ; MOV BP+6,AX ; AXAXSS:BP+6SS:BP+6 段寄存器的确定,首先由变量确定;若无变量,则由寄存器段寄存器的确定,首先由变量确定;若无变量,则由寄存器确定,寄存器确定的原则

28、同间址。确定,寄存器确定的原则同间址。2.2.5 2.2.5 基址寻址基址寻址302.2.5 2.2.5 基址寻址基址寻址例例3 3:MOV AL,BX+W1 MOV AL,BX+W1 或或 MOVMOV AL,W1BX AL,W1BX 以以BXBX的内容作基地址,的内容作基地址,变变量量W1W1的偏移地址为位的偏移地址为位移量移量或者或者以以变量变量W1W1的偏移地址作基的偏移地址作基地址,地址,BXBX的内容看作的内容看作该变量数据区的位移该变量数据区的位移量量AL=19HAL=19H312.2.6 2.2.6 变址寻址变址寻址操作数据在存储器中,其偏移地址为操作数据在存储器中,其偏移地址

29、为变址寄存器(变址寄存器(SISI、DIDI或或3232位的寄存器)位的寄存器)的内容与的内容与变量的偏移地址、常变量的偏移地址、常量量之和。之和。 例:例:MOV AX,2SI MOV AX,2SI 或或 MOV AX,SI+2 MOV AX,SI+2 执行的操作是执行的操作是(DS:SI+2) AX(DS:SI+2) AX段寄存器的确定,首先由变量确定;若无变量,则由段寄存器的确定,首先由变量确定;若无变量,则由寄存器确定,寄存器确定的原则同间址。寄存器确定,寄存器确定的原则同间址。 322.2.7 2.2.7 基址变址寻址基址变址寻址 例例: MOV AX,4 BX+DI: MOV AX

30、,4 BX+DI 或或MOV AX,BX+DI+4 MOV AX,BX+DI+4 ;(DS:BX+DI+4)AX (DS:BX+DI+4)AX 段寄存器的确定,首先由变量确定;若无变段寄存器的确定,首先由变量确定;若无变量,则由基址寄存器确定,基量,则由基址寄存器确定,基址址寄存器确定的原寄存器确定的原则同间址。则同间址。 基址寄存器和变址寄存器的位数要相同。基址寄存器和变址寄存器的位数要相同。操作数据在存储器中,其偏移地址为指令中指定操作数据在存储器中,其偏移地址为指令中指定的基址寄存器和变址寄存器的内容的基址寄存器和变址寄存器的内容与与变量的偏移变量的偏移地址、常量地址、常量之和。之和。3

31、3例:例:W W为一字变量,为一字变量,B B为一字节变量,则:为一字节变量,则: MOV ALMOV AL,WBX WBX MOV AL MOV AL,BYTE PTR WBX BYTE PTR WBX MOV AXMOV AX,BSI+5 BSI+5 MOV AX MOV AX,WORD PTR BSI+5 WORD PTR BSI+5 在符号指令中的基址,变址,基址变址三种寻址在符号指令中的基址,变址,基址变址三种寻址中,其中,其位移量可以是常数或符号常量,还可以是变位移量可以是常数或符号常量,还可以是变量名量名。若是变量名,它给出变量所在段的偏移地址,。若是变量名,它给出变量所在段的偏

32、移地址,其意义是其意义是取变量单元中的数据取变量单元中的数据,所以其,所以其类型要与另类型要与另一操作数的类型一致。一操作数的类型一致。34 例:将立即数例:将立即数35H35H存入字节变量存入字节变量BUF+5BUF+5单元中单元中直接寻址直接寻址:MOV BUF+5:MOV BUF+5,35H35H间接寻址间接寻址: :MOV BX, OFFSET BUF+5MOV BX, OFFSET BUF+5 MOV BYTE PTRBX,35H MOV BYTE PTRBX,35H基址寻址基址寻址: :MOV BX, 5MOV BX, 5 MOV BUFBX,35H MOV BUFBX,35H ;

33、常用间址、基址常用间址、基址/ /变址访问一片连续的单元变址访问一片连续的单元 例:例:B1 DB B1 DB AB$AB$ MOV AL, MOV AL, B1B1BX BX ;ALAL41H41H MOV AH, MOV AH, B1B1BXBX1 1 ;AHAH42H42H352.2.8 2.2.8 比例变址寻址比例变址寻址 例例: : MOV EBX,ESIMOV EBX,ESI44 注:比例因子可为且只可为注:比例因子可为且只可为1 1、2 2、4 4、8 8操作数据在存储器中,其偏移地址为指令中给出操作数据在存储器中,其偏移地址为指令中给出的含有变址寄存器的含有变址寄存器比例因子的

34、地址表达式的偏比例因子的地址表达式的偏移地址移地址362.2.9 2.2.9 基址比例变址寻址基址比例变址寻址 可将基址变址寻址看作是比例因子为可将基址变址寻址看作是比例因子为1 1的基的基址比例变址寻址。如:址比例变址寻址。如: MOV ECX,EDIMOV ECX,EDI8+EAX8+EAX MOV EAX,ESIMOV EAX,ESI8+EBX8+EBX操作数据在存储器中,其偏移地址为指令给出的操作数据在存储器中,其偏移地址为指令给出的地址表达式的偏移地址,地址表达式中既有一个地址表达式的偏移地址,地址表达式中既有一个基址寄存器又含有变址寄存器基址寄存器又含有变址寄存器比例因子比例因子3

35、71.1.存储器寻址与地址表达式存储器寻址与地址表达式地址表达式的一般形式是:地址表达式的一般形式是:变量变量 基址寄存器基址寄存器+ +变址寄存器变址寄存器比例因子比例因子+ +常量常量 也可表示为:也可表示为: 基址寄存器基址寄存器+ +变址寄存器变址寄存器比例因子比例因子+ +变量变量+ +常量常量 其他寻址方式都是其他寻址方式都是一般形式一般形式的不完整形式的不完整形式: : 直接寻址直接寻址: :变量变量+ +常量常量 或或 变量变量+ +常量常量 间接寻址间接寻址: : 寄存器寄存器 基址或变址寻址基址或变址寻址: :变量变量 寄存器寄存器+ +常量常量 或或变量变量/ /常量常量

36、 寄存器寄存器 基址变址寻址基址变址寻址: :变量变量 基址寄存器基址寄存器+ +变址寄存器变址寄存器+ +常量常量 或或基址寄存器基址寄存器+ +变址寄存器变址寄存器+ +变量变量+ +常量常量 比例变址寻址比例变址寻址: :变量变量 变址寄存器变址寄存器比例因子比例因子+ +常量常量 或或变址寄存器变址寄存器比例因子比例因子+ +变量变量+ +常量常量 2.2.10 2.2.10 存储器寻址及存储器中段基址或段选择字的确定存储器寻址及存储器中段基址或段选择字的确定382.2.存储器寻址中段寄存器的确定存储器寻址中段寄存器的确定存储器寻址时段寄存器的存储器寻址时段寄存器的基本约定和段更换基本

37、约定和段更换见下表:见下表:2.2.10 2.2.10 存储器寻址及存储器中段基址或段选择字的确定存储器寻址及存储器中段基址或段选择字的确定存储器存取方式存储器存取方式约定段寄存器约定段寄存器 段更换段更换偏移地址偏移地址取指令取指令CSCS不允许不允许IPIP、EIPEIP堆栈操作堆栈操作SSSS不允许不允许SPSP、ESPESP数据存取数据存取(BP(BP、EBPEBP和和ESPESP间址、基间址、基址除外址除外) )DSDS另外另外5 5个段寄存器个段寄存器EAEABPBP、EBPEBP和和ESPESP间址、基址数据存取间址、基址数据存取SSSS另外另外5 5个段寄存器个段寄存器EAEA

38、字符串处理指令的源串字符串处理指令的源串DSDSES CS SSES CS SSSISI、ESIESI字符串处理指令的目的串字符串处理指令的目的串ESES不允许不允许DIDI、EDIEDI有效地址有效地址EAEA(Effective(Effective Address) Address)是汇编程序计算后得到是汇编程序计算后得到的地址表达式的偏移地址。的地址表达式的偏移地址。 39例如例如: MOV ES:DI, AL : MOV ES:DI, AL ;AL ES:DIAL ES:DI其中其中ESES为前缀字节,产生目标代码时,它将放在这条为前缀字节,产生目标代码时,它将放在这条MOVMOV指令

39、的前面:指令的前面: 26 ES26 ES: 8805 MOV8805 MOVDIDI,ALAL其中符号指令前其中符号指令前3 3个字节的十六进制数个字节的十六进制数26 88 0526 88 05是符是符号指令号指令MOV ES:MOV ES:DIDI,ALAL的目标代码,即机器指令。的目标代码,即机器指令。 段超越或段更换是在地址表达式前写上段名或段寄段超越或段更换是在地址表达式前写上段名或段寄存器来表示的。存器来表示的。3.3. 段超越或段更换段超越或段更换2.2.10 2.2.10 存储器寻址及存储器中段基址或段选择字的确定存储器寻址及存储器中段基址或段选择字的确定40第二章 汇编语言

40、与汇编程序2.12.1符号指令中的表达式符号指令中的表达式符号指令的寻址方式符号指令的寻址方式常用指令常用指令2.22.2 伪指令伪指令2.32.32.42.42.52.5常用系统功能调用和常用系统功能调用和 BIOSBIOS41 数据传送指令数据传送指令 加减运算指令加减运算指令 逻辑运算指令逻辑运算指令 移位指令移位指令 注:学习时注意注:学习时注意指令格式及功能指令格式及功能2.3 2.3 常用指令常用指令42 1. 1.通用数据传送指令通用数据传送指令 格式:格式: MOV MOV destdest, sourcesource 目的操作数目的操作数 源操作数源操作数 功能:将一个字节或

41、一个字或一个双字数据功能:将一个字节或一个字或一个双字数据从源传送至目的地址中,源保持不变从源传送至目的地址中,源保持不变2.3.1 2.3.1 数据传送类指令数据传送类指令指令特点:将数据从一个部位传送到另一部位。指令特点:将数据从一个部位传送到另一部位。不影响标志寄存器中的状态标志位。不影响标志寄存器中的状态标志位。43MOVMOV指令指令的的9 9种形式:种形式:MOV REGMOV REG,REGREGMOV REGMOV REG,IMMIMMMOV MEMMOV MEM,IMM IMM MOV MEMMOV MEM,REGREGMOV REGMOV REG,MEMMEMMOV SEG

42、REGMOV SEGREG,REG REG ;CSCS除外除外MOV REGMOV REG,SEGREGSEGREGMOV SEGREGMOV SEGREG,MEM MEM ;CSCS除外除外MOV MEMMOV MEM,SEGREGSEGREG2.3.1 2.3.1 数据传送类指令数据传送类指令44l一个指令中,两操作数一个指令中,两操作数类型必须一致类型必须一致l至少至少1 1个操作数的个操作数的类型要明确类型要明确,不能出现二义性,不能出现二义性l代码段寄存器代码段寄存器CSCS和和立即数立即数均不能作为目的操作数均不能作为目的操作数l源操作数和目的操作数源操作数和目的操作数不能同时为不

43、能同时为存储器操作数存储器操作数 l存储器操作数的类型由地址表达式的变量名确定存储器操作数的类型由地址表达式的变量名确定l立即数的类型不明确立即数的类型不明确, ,不含变量名的地址表达式不含变量名的地址表达式的类型也不明确。在立即数送存储器的指令中的类型也不明确。在立即数送存储器的指令中, ,若存储器操作数是不含变量名的地址表达式若存储器操作数是不含变量名的地址表达式, ,则则必需使用必需使用PTRPTR来明确其中一个操作数的类型。来明确其中一个操作数的类型。注意:注意:2.3.1 2.3.1 数据传送类指令数据传送类指令45(1 1)符号位扩展传送指令)符号位扩展传送指令格式:格式: MOV

44、SX MOVSX regreg,sourcesource功能功能: : 对源操作数中的对源操作数中的8 8位或位或1616位补码数的符号位进行扩位补码数的符号位进行扩展,形成展,形成1616位或位或3232位补码数位补码数如如: : MOVSX EAX MOVSX EAX,BXBX ; ;若若BX=8765HBX=8765H, ,则则EAX=FFFF8765HEAX=FFFF8765H(2 2)零扩展传送指令)零扩展传送指令格式:格式: MOVZX MOVZX regreg,source source 功能功能: :对源操作数中的对源操作数中的8 8位或位或1616位无符号数进行扩展,形成位无

45、符号数进行扩展,形成1616位或位或3232位无符号数位无符号数如:如:MOVZX EAXMOVZX EAX,BLBL ; ;若若BL=65HBL=65H,则,则EAX=00000065HEAX=00000065H2.2.扩展传送指令扩展传送指令2.3.1 2.3.1 数据传送类指令数据传送类指令46(1)(1)字节、字和双字交换指令字节、字和双字交换指令格式:格式:XCHG XCHG destdest,sourcesource 功能功能: : 将源地址与目的地址中的内容互换将源地址与目的地址中的内容互换 XCHG REG, REGXCHG REG, REG XCHG REG, MEM XCH

46、G REG, MEM XCHG MEM, REG XCHG MEM, REG3.3.数据交换指令数据交换指令2.3.1 2.3.1 数据传送类指令数据传送类指令47例如,数据段中有两个字变量例如,数据段中有两个字变量W1W1和和W2W2,编写程序段将两个,编写程序段将两个字变量互换字变量互换 W1 DW 1234HW1 DW 1234H W2 DW 5678H W2 DW 5678H用数据交换指令实现:用数据交换指令实现: MOV AXMOV AX,W1 W1 ;AX=1234HAX=1234H XCHG AX XCHG AX,W2 W2 ;AX=5678HAX=5678H,W2=1234HW

47、2=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 ,AXAX2.3.1 2.3.1 数据传送类指令数据传送类指令482.3.1 2.3.1 数据传送类指令数据传送类指令(2)32(2)32位通用寄存器中位通用寄存器中4 4字节交换(字节交换(Byte SwapByte Swap)指令)指令指令格式指令格式 BSWAP BSWAP regreg指令的意义是把指令的意义是把32

48、32位通用寄存器的第位通用寄存器的第1 1字节与第字节与第4 4字字节交换,第节交换,第2 2字节与第字节与第3 3字节交换。如指令:字节交换。如指令: BSWAP EAXBSWAP EAX若执行前若执行前EAX=12345678H,EAX=12345678H,指令执行后指令执行后EAX=78563412HEAX=78563412H。使用字节交换指令,将数据段中以使用字节交换指令,将数据段中以BXBX为偏移地址的为偏移地址的连续四单元的内容颠倒过来,编写的程序段如下:连续四单元的内容颠倒过来,编写的程序段如下: MOV EAXMOV EAX,BXBX BSWAP EAX BSWAP EAX M

49、OV BX MOV BX,EAXEAX494. 4. 栈操作指令栈操作指令堆栈的概念堆栈的概念l堆栈中数据的存取遵循堆栈中数据的存取遵循“先进后出先进后出”的原则。的原则。l堆栈的活动端称为栈顶,固定端称为栈底。堆栈的活动端称为栈顶,固定端称为栈底。 l80 x8680 x86的堆栈的伸展方向是从高地址向低地址。的堆栈的伸展方向是从高地址向低地址。l堆栈操作都是堆栈操作都是字或双字操作字或双字操作, ,进栈时进栈时SPSP自动减自动减2/4,2/4,出栈时出栈时SPSP自动加自动加2/42/4。 2.3.1 2.3.1 数据传送类指令数据传送类指令50(1)(1)进栈指令进栈指令 格式:格式:

50、PUSH sourcePUSH sourceSP0040HSP003FHSP003EH1234例:例:AX=1234HAX=1234H PUSH AX PUSH AX执行执行AXAH AL12 34执行过程如下图:执行过程如下图:2.3.1 2.3.1 数据传送类指令数据传送类指令51(2)(2)出栈指令出栈指令 格式:格式:POP POP destdestBXBH BLSP0040HSP003FH12SP003EH34执行执行1234例:例:POP BXPOP BX执行过程如下图:执行过程如下图:2.3.1 2.3.1 数据传送类指令数据传送类指令52使用栈操作指令实现将数据段中两个字变量使

51、用栈操作指令实现将数据段中两个字变量W1W1和和W2W2互互换的程序段如下:换的程序段如下:PUSH W1PUSH W1PUSH W2PUSH W2POP W1POP W1POP W2POP W22.3.1 2.3.1 数据传送类指令数据传送类指令532.3.1 2.3.1 数据传送类指令数据传送类指令(3 3)通用寄存器进栈)通用寄存器进栈PUSHA/PUSHADPUSHA/PUSHAD和出栈指令和出栈指令POPA/POPADPOPA/POPADPUSHAPUSHA指令执行的操作是将指令执行的操作是将1616位通用寄存器进栈,进栈次序为位通用寄存器进栈,进栈次序为:AXAX、CXCX、DXD

52、X、BXBX、指令执行前的、指令执行前的SPSP、BPBP、SISI、DIDI。542.3.1 2.3.1 数据传送类指令数据传送类指令PUSHADPUSHAD指令执行的操作是将指令执行的操作是将3232位通用寄存器进栈,位通用寄存器进栈,进栈次序为:进栈次序为:EAXEAX、ECXECX、EDXEDX、EBXEBX、ESP(ESP(指令执行前指令执行前的值的值) )、EBPEBP、ESIESI、EDIEDI,指令执行后,指令执行后ESP-32ESP-32。(4)(4)标志寄存器进栈和出栈指令标志寄存器进栈和出栈指令1616位标志寄存器进栈位标志寄存器进栈/ /出栈指令:出栈指令:PUSHF/

53、POPFPUSHF/POPF3232位标志寄存器进栈位标志寄存器进栈/ /出栈指令:出栈指令:PUSHFD/POPFDPUSHFD/POPFD55加减运算的操作数:加减运算的操作数:注:注:l两操作数需类型相同,不能同为存储器两操作数需类型相同,不能同为存储器l加减法指令执行后的结果将影响状态标志加减法指令执行后的结果将影响状态标志 2.3.2 2.3.2 加减运算指令加减运算指令56 1.1.加法类指令加法类指令 (1 1)加法指令)加法指令ADDADD格式:格式:ADD ADD destdest,sourcesource操作:操作: source + source + destdest d

54、estdest 即将源操作数据与目的操作数据相加,结果存即将源操作数据与目的操作数据相加,结果存入目的地址中,源地址内容不变入目的地址中,源地址内容不变(2 2)加进位的加法指令)加进位的加法指令ADCADC格式:格式:ADC ADC destdest,sourcesource操作:操作:destdest + source + + source + CFdestCFdest ; CFCF为前为前面指令产生的面指令产生的CFCF57例例 3 3个个3232位无符号数位无符号数12345678H12345678H、8765ABCDH8765ABCDH和和2468FEDCH2468FEDCH相加,相

55、加,其和(仍为其和(仍为3232位无符号数)存入双字变量位无符号数)存入双字变量EQEQ中。用中。用1616位通用位通用寄存器编写的程序段如下程序段如下:寄存器编写的程序段如下程序段如下: MOV DXMOV DX,1234H1234H MOV AX MOV AX,5678H5678H ADD AX ADD AX,0ABCDH 0ABCDH ADC DX ADC DX,8765H8765H ADD AX ADD AX,0FEDCH0FEDCH ADC DX ADC DX,2468H2468H MOV WORD PTR EQ,AX MOV WORD PTR EQ,AX MOV WORD PTR

56、EQ+2,DX MOV WORD PTR EQ+2,DX58用用3232位通用寄存器编写的程序段如下:位通用寄存器编写的程序段如下:MOV EAXMOV EAX,12345678H12345678HADD EAXADD EAX,8765ABCDH8765ABCDHADD EAXADD EAX,2468FEDCH2468FEDCHMOV EQ,EAXMOV EQ,EAX59 格式:格式:INC INC destdest 操作:操作:dest+1destdest+1dest 例:例: MOV BXMOV BX,1 1 INC BX INC BX ; BX=0002HBX=0002Hl该指令该指令不

57、影响不影响CFCF,对其它标志为的影响同,对其它标志为的影响同ADDADDl单操作数指令,只能为单操作数指令,只能为REGREG,MEMMEM,类型要明确,不,类型要明确,不能出现二义性能出现二义性例:例: INC CL INC CL INC SI INC SI INC BYTE PTRSI INC BYTE PTRSI INC 2000H INC 2000H l该指令常用于修改偏移地址和计数次数该指令常用于修改偏移地址和计数次数(3 3)增量指令)增量指令INCINC60 格式:格式:DEC DEC destdest 操作:操作:destdest1dest1dest(1 1) 减法指令减法指

58、令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为前面为前面指令产生的进位指令产生的进位( (借位借位) )(3 3)减量指令减量指令DECDEC61例:例:2 2个个3232位无符号数位无符号数8765ABCDH 8765ABCDH 和

59、和2468FEDCH2468FEDCH相减,其差放双相减,其差放双字变量字变量EQEQ中。用中。用1616位通用寄存器编写的程序段如下:位通用寄存器编写的程序段如下: MOV AX MOV AX,0ABCDH0ABCDH SUB AX SUB AX,0FEDCH0FEDCH MOV DX MOV DX,8765H8765H SBB DX SBB DX,2468H2468H MOV WORD PTR EQ,AX MOV WORD PTR EQ,AX MOV WORD PTR EQ+2,DX MOV WORD PTR EQ+2,DX用用3232位通用寄存器编写的程序段如下:位通用寄存器编写的程序段

60、如下: MOV EAX MOV EAX,8765ABCDH8765ABCDH SUB EAX SUB EAX,2468FEDCH2468FEDCH MOV EQ,EAX MOV EQ,EAX62 (3 3)比较指令)比较指令 CMPCMP 格式:格式:CMP CMP destdest,sourcesource 操作操作: : destdest sourcesourcel 执行减操作,执行减操作,只只影响标志,不改变操作数影响标志,不改变操作数l 主要用来判断两数的大小与是否相等主要用来判断两数的大小与是否相等l 后面常跟条件转移指令,根据比较结果实现程序后面常跟条件转移指令,根据比较结果实现程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论