




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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学习要点学习要点l正确定义各种符号,熟练使用地址表达式正确定义各种符号,熟练使用地址表达式l熟练掌握符号指令的寻址方式熟练掌握符号指令的寻址方式l掌握符号指令掌握符号指令l汇编语言源程序的格式汇编语言源程序的格式l熟练掌握系统功能调用熟练掌握系统功能调用6以字母开头的一串字符以字母开头的一串字符为了区别符号和数据,以字母开头的十六进制数,为了区别符号和数据,以字母开头的十六进制数,其前面要加一个前导其前面要加一个前导0 0如:如: 0FFH 0FFH 数据数据 FFH FFH 符号符号 符号符号汇编中的各种符号由伪
4、指令定义,有汇编中的各种符号由伪指令定义,有常量、变量和标号常量、变量和标号三类三类1 1 符号指令中的表达式符号指令中的表达式7常用的有二进制数、十进制数、十六进制数和常用的有二进制数、十进制数、十六进制数和ASCIIASCII字符字符如:如: 1010B1010B, 1010,0AH0AH, A A,$ $,ABCABC1.1.常量常量 在汇编时已有确定数值的量在汇编时已有确定数值的量ASCIIASCII字符做数值常量时,需加单引号字符做数值常量时,需加单引号1.1 1.1 常量和数值表达式常量和数值表达式(1 1)数值常量)数值常量8 B B6 6B B5 5B B4 4B B3 3B
5、B2 2B B1 1B B0 00 0 00 0 0(0)(0)0 0 10 0 1(1)(1)0 1 00 1 0(2)(2)0 1 10 1 1(3)(3)1 0 01 0 0(4)(4)1 0 11 0 1(5)(5)1 1 01 1 0(6)(6)1 1 11 1 1(7)(7)0 0 0 0(0)0 0 0 0(0)NULNULDLEDLESPSP0 0 P P p p0 0 0 1(1)0 0 0 1(1)SOHSOHDC1DC1! !1 1A AQ Qa aq q0 0 1 0(2)0 0 1 0(2)STXSTXDC2DC22 2B BR Rb br r0 0 1 1(3)0
6、0 1 1(3)ETXETXDC3DC3# #3 3C CS Sc cs s0 1 0 0(4)0 1 0 0(4)EOTEOTDC4DC4$ $4 4D DT Td dt t0 1 0 1(5)0 1 0 1(5)ENQENQNAKNAK% %5 5E EU Ue eu u0 1 1 0(6)0 1 1 0(6)ACKACKSYNSYN& &6 6F FV Vf fv v0 1 1 1(7)0 1 1 1(7)BELBELETBETB?7 7G GW Wg gw w1 0 0 0(8)1 0 0 0(8)BSBSCANCAN( (8 8H HX Xh hx x1 0 0 1(
7、9)1 0 0 1(9)HTHTEMEM) )9 9I IY Yi iy y1 0 1 0(A)1 0 1 0(A)LFLFSUBSUB* *: :J JZ Zj jz z1 0 1 1(B)1 0 1 1(B)VTVTESCESC+ +; ;K K k k 1 1 0 0(C)1 1 0 0(C)FFFFFSFS, , N N n n1 1 1 1(F)1 1 1 1(F)SISIUSUS/ /? ?O O_ _o oDELDEL9程序中为经常使用的数值取的名。程序中为经常使用的数值取的名。用用EQUEQU或或“”伪指令定义,如:伪指令定义,如: P EQU 314 P EQU 314 P=
8、314 P=314注注:汇编时,汇编程序不给符号常量分配存储单元:汇编时,汇编程序不给符号常量分配存储单元(2 2)符号常量)符号常量1.1 1.1 常量常量和数值表达式和数值表达式102.2.数值表达式数值表达式数字表达式数字表达式由常量与运算符组成的有意义的由常量与运算符组成的有意义的式子式子,结果为一数值。,结果为一数值。在汇编语言源程序中,允许对常量进行以下三种类型在汇编语言源程序中,允许对常量进行以下三种类型的运算:的运算:(1 1)算术运算算术运算 包括,包括,/ /,MODMOD(求余)(求余)(2 2)逻辑运算)逻辑运算 包括包括ANDAND,OROR,XORXOR,NOTNO
9、T(3 3)关系运算)关系运算 包括:包括:EQEQ(),(),NENE(),),LTLT(),(),GTGT(),(),LELE(),),GEGE()1.1 1.1 常量常量和数值表达式和数值表达式111.1.标号的标号的三个属性三个属性 (1 1)段基址段基址定义该标号所在段的段首址的高定义该标号所在段的段首址的高1616位位 (2 2)偏移地址偏移地址标号所在段的段首址到该标号定义指令的标号所在段的段首址到该标号定义指令的字节距离字节距离 (3 3)类型类型NEARNEAR和和FARFAR两种两种 NEARNEAR段内调用,段内调用,FARFAR段间调用段间调用标号标号指令地址的符号表示
10、指令地址的符号表示1.21.2 标号标号121.21.2 标号标号2.2.标号的定义标号的定义标号只在代码段中定义和使用,定义的方式有两种:标号只在代码段中定义和使用,定义的方式有两种: (1 1)书写在符号指令前,)书写在符号指令前,用:定义用:定义,为,为NEARNEAR类型,类型, NEARNEAR型标号只能在段内使用!型标号只能在段内使用!例:例: CYCLECYCLE:MOV ALMOV AL,SI SI ;定义近标号;定义近标号CYCLECYCLE(2 2)用)用PROCPROCENDPENDP伪指令伪指令定义过程名定义过程名例:例:ABC PROC FAR ;ABC PROC F
11、AR ;定义过程名定义过程名ABCABC为为FARFAR型标号型标号 ABC ENDP ABC ENDP13在汇编中都使用变量和地址表达式来表示存储器的在汇编中都使用变量和地址表达式来表示存储器的地址。地址。变量变量是存储器中的数据或数据区的符号表示。是存储器中的数据或数据区的符号表示。变量名变量名是数据的地址或数据区的首地址。是数据的地址或数据区的首地址。地址表达式地址表达式由变量、标号、寄存器、常量和运算符由变量、标号、寄存器、常量和运算符组成。组成。寄存器只能是寄存器只能是1616位的位的SISI、DIDI、BXBX、BPBP和和3232位的通用寄存器位的通用寄存器 , ,且寄存器必须位
12、于且寄存器必须位于 中。中。1.3 1.3 变量变量1.1.变量和地址表达式变量和地址表达式14(1 1)段基址)段基址定义变量所在段的段首地址的高定义变量所在段的段首地址的高1616位位 由由SEGSEG算符指定算符指定如:如: SEG W SEG W ;取变量;取变量W W的段基址的段基址(2 2)偏移地址)偏移地址变量所在段的段首址到该变量的字节变量所在段的段首址到该变量的字节距离距离. .由由OFFSETOFFSET算符指定算符指定如:如: OFFSET W OFFSET W ;取变量;取变量W W的偏移地址的偏移地址2.2.变量的属性变量的属性(3 3)类型)类型存取该变量中数据的字
13、节数存取该变量中数据的字节数变量的类型有:字节(变量的类型有:字节(bytebyte),字(),字(wordword),双字),双字(dworddword),四字(),四字(qwordqword),十字节(),十字节(tbytetbyte),一个),一个数据分别占数据分别占1 1,2 2,4 4,8 8,1010个字节单元个字节单元1.3 1.3 变量变量15数据存放规律数据存放规律字节数据字节数据-一个字节单元存放一个字节单元存放字数据字数据-二个字节单元存放二个字节单元存放双字数据双字数据-四个字节单元存放四个字节单元存放规定:规定:(1)(1)“低对低低对低, ,高对高高对高”(2)(2
14、)低位字节的地址为字的地址低位字节的地址为字的地址3.3.变量存储区中数据的存放变量存储区中数据的存放1.3 1.3 变量变量16在数据段或附加数据段中用伪指令定义在数据段或附加数据段中用伪指令定义 变量名变量名 DBDB 表达式表达式, , ;定义字节变量;定义字节变量 变量名变量名 DW DW 表达式表达式, , ;定义字变量;定义字变量 变量名变量名 DD DD 表达式表达式, , ;定义双字变量;定义双字变量 变量名变量名 DQ DQ 表达式表达式, , ;定义四字变量;定义四字变量 变量名变量名 DF DF 表达式表达式, , ;定义六字节变量;定义六字节变量 变量名变量名 DT D
15、T 表达式表达式, , ;定义十字节变量;定义十字节变量数据定义伪指令指明了变量的数据定义伪指令指明了变量的类型类型表达式确定变量的表达式确定变量的初值初值。表达式有如下。表达式有如下6 6种:种:4.4.变量的定义变量的定义1.3 1.3 变量变量17(1 1)表达式为常量或数值表达式)表达式为常量或数值表达式存入数值存入数值 如:如:W1W1 DWDW 1 1(2 2)表达式为)表达式为ASCIIASCII字符串字符串 存入存入ASCIIASCII值值 如:如:W2W2 DWDW AB ;用用DWDW定义时,串长不可大于定义时,串长不可大于2 2B2B2 DBDB AB$ ;用用DBDB定
16、义时,串长可大于定义时,串长可大于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 变量变量18(4 4)地址表达式)地址表达式(只适用只适用DW、DD和和DF3个伪指令个伪指令) 格式:格式: 变量名变量名 DW DW 地址表达式地址表达式 ; ;取其偏移地址取其偏移地址来初来初 ; ;始化变量始化变量 变量名变量名 DD DD 地址表达式地址表达式 ; ;取取1616位偏移地址和段位偏移地址和段 ;
17、 ;基址基址来初始化其变量来初始化其变量 变量名变量名 DF DF 地址表达式地址表达式 ; ;取取3232位偏移地址和段位偏移地址和段 ; ;基址基址来初始化其变量来初始化其变量(5 5)由以上表达式组成的序列,之间用)由以上表达式组成的序列,之间用 ,分隔分隔 B5 B5 DBDB 1,2,31,2,3 B6 B6 DBDB 1, ,2, ,3 ; ; 此行的此行的“,”,”不是序列分隔符不是序列分隔符1.3 1.3 变量变量19W1 DW B2 W1 DW B2 ;用;用B2B2的偏移地址初始化的偏移地址初始化W1W1变量变量B1 DB B1 DB AB$AB$ ;变量;变量B1B1用用
18、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,-1) DB 1 DUP(10, DB 1 DUP(10, E E ) ) ;重复因子;重复因子1 1不能省不能省 DB DB 1313 , ,1,31,3在附加数据段在附加数据段DATA2DATA2中定义的变量如下:中定义的变量如下:EQ DQ 1234567890ABCDEFHEQ DQ 1234567890ABCDEF
19、HEW DW EW DW ABAB , , CDCD ;用;用DWDW定义,字定义,字符符不超过不超过2 2个个例例 画出数据的存储形式画出数据的存储形式1.3 1.3 变量变量20 变量、标号以及由其组成的地址表达式均有类型属变量、标号以及由其组成的地址表达式均有类型属性。地址表达式的类型属性由其中的变量或标号(性。地址表达式的类型属性由其中的变量或标号(一一个地址表达式不可能同时含有变量和标号个地址表达式不可能同时含有变量和标号)决定。不)决定。不含变量或标号,仅含寄存器的地址表达式没有类型属含变量或标号,仅含寄存器的地址表达式没有类型属性。可以使用性。可以使用PTRPTR算符临时变更原地
20、址表达式的类型属算符临时变更原地址表达式的类型属性性, ,或者明确没有类型属性的地址表达式的类型,而仍或者明确没有类型属性的地址表达式的类型,而仍保持保持它们原来的段基址和偏移地址属性不变。它们原来的段基址和偏移地址属性不变。格式:格式: 类型类型 PTR PTR 地址表达式地址表达式如:如:BYTEBYTE PTR BX+5 PTR BX+5 ;明确类型;明确类型 WORDWORD PTR B2 PTR B2 ;临时变更;临时变更5. 5. 地址表达式类型的变更地址表达式类型的变更1.3 1.3 变量变量21例:例: B DB 3B DB 3 W W DW 1122HDW 1122H WOR
21、D PTR B ;WORD PTR B ;将将B B临时改变为字类型临时改变为字类型 BYTEBYTE PTRPTR W ;W ;将将W W临时改变为字节类型临时改变为字节类型例:例: BYTEBYTE PTRPTR BXBX ;寄存器有类型属性,不能变更寄存器有类型属性,不能变更 BYTEBYTE PTRPTR BXBX 1.3 1.3 变量变量22汇编语言与汇编程序1 13 3符号指令中的表达式符号指令中的表达式操作数的寻址方式操作数的寻址方式常用指令常用指令4 4 伪指令伪指令2 25 5常用系统功能调用和常用系统功能调用和 BIOSBIOS23符号指令的格式:符号指令的格式: 操作助记
22、符操作助记符 目的操作数目的操作数,源操作数,源操作数 ;注释;注释 操作助记符操作助记符指明指明指令进行什么操作指令进行什么操作 源操作数指明操作数据的地址;目的操作数既指明操作数据的源操作数指明操作数据的地址;目的操作数既指明操作数据的地址,还指明(操作后)数据的存放地址地址,还指明(操作后)数据的存放地址 寻址方式寻址方式根据操作数寻找操作数据(或数据的存放)地址根据操作数寻找操作数据(或数据的存放)地址的方式的方式寻址方式可分为三大类:寻址方式可分为三大类: 立即寻址:操作数就是操作数据立即寻址:操作数就是操作数据 寄存器寻址:操作数是寄存器名寄存器寻址:操作数是寄存器名 存储器寻址存
23、储器寻址 :操作数是地址表达式:操作数是地址表达式2 2 操作数的寻址方式操作数的寻址方式24操作数据在指定的寄存器中操作数据在指定的寄存器中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位通用寄存器位通用寄存器AX,BX,CX,DX,SI,DI,B
24、P,SP16AX,BX,CX,DX,SI,DI,BP,SP16位通用寄存器位通用寄存器EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP32EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP32位通用寄存器位通用寄存器传送指令传送指令助记符助记符目的操目的操作数作数源操作源操作数数25操作数即为操作数据,操作数即为操作数据,操作数据就操作数据就在指令中在指令中l立即寻址方式只能用于源操作数,主要用来给寄存立即寻址方式只能用于源操作数,主要用来给寄存器或存储器赋初值器或存储器赋初值 例:例:MOV 5,AL MOV 5,AL l立即数没有类型属性立即数没有类型属性2. 2
25、. 立即寻址立即寻址例:例:MOV AL,5 ;MOV AL,5 ;将字节将字节05H05H送送ALAL,AL=05HAL=05H MOV AX,18 ; MOV AX,18 ;将字将字0012H0012H送送AXAX,AX=0012HAX=0012H MOV BL, MOV BL,1 ;1 ;将字节将字节FFHFFH送送BLBL,BL=0FFHBL=0FFH26操作数据在存储器中,其操作数据在存储器中,其偏移地址由指令直接给偏移地址由指令直接给出出( (地址表达式中只有变量名和常量)地址表达式中只有变量名和常量)3. 3. 直接寻址直接寻址地址表达式为:地址表达式为:变量名变量名 或或 变量
26、名变量名+ +常量常量l段地址默认在段地址默认在DSDS中中 例:例:MOV AX,W MOV AX,W 该指令的源操作数的地址为该指令的源操作数的地址为 DSDS:OFFSET WOFFSET W27 直接寻址方式是指寻找的操作数的地址在指令中直接给出。这种寻址方式在汇编格式中表示为 操作码 地址表达式 (或地址表达式) 操作码 数字表达式28l直接寻址常用已定义的变量表示直接寻址常用已定义的变量表示 例:例:W2 DW W2 DW 5 5,1994H1994H MOV AX, W2 MOV AX, W2 ; AX=FFFBHAX=FFFBH MOV BX MOV BX,W2W22 2 ;
27、BXBX1994H1994Hl区分立即寻址与直接寻址区分立即寻址与直接寻址 从变量中取数据属于直接寻址方式,注意与符号从变量中取数据属于直接寻址方式,注意与符号常量区别常量区别 例:例:AA EQU 10AA EQU 10 MOV AX MOV AX,AA AA ;立即寻址,;立即寻址,AX=000AHAX=000AH MOV BX MOV BX,AA+5 AA+5 ;立即寻址,;立即寻址,BX=000FHBX=000FH29l要注意的是采用直接寻址方式时,如果指令前面没有用前缀指明操作数在哪一段,则默认为段寄存器是数据段寄存器DS。l例如, MOV AX,1070H;将DS段的1070H和1
28、071H两单元的内容取到AX中。执行时,设DS2000H,则执行过程是将绝对地址为21070H和21071H两单元的内容取出送AX。30若若BX=0124HBX=0124H, MOVMOV CX,BX ;CX,BX ;间接寻址间接寻址,CX=1958H,CX=1958H MOV MOV AX,BXAX,BX ; ;寄存器寻址,寄存器寻址,AX=0124HAX=0124H 操作数操作数为带方括号的寄存器为带方括号的寄存器:SISI,DIDI,BXBX,BP,EAXESPBP,EAXESP寄存器的内容为操作数据的偏移地址寄存器的内容为操作数据的偏移地址4. 4. 间接寻址间接寻址31间接寻址只有一
29、种形式间接寻址只有一种形式 寄存器寄存器 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;否则,否则,约定段寄存器为约定段寄存器为DSDS。 例:例:M
30、OV AX, BX ;(DS:BX)MOV AX, BX ;(DS:BX)AX AX l 例:例:MOV AX, BP ;(SS:BP)MOV AX, BP ;(SS:BP)AXAX 32操作数据在存储器中,其操作数据在存储器中,其偏移地址为偏移地址为基址寄存器基址寄存器(BXBX或或BPBP或或3232位的寄存器)的内容与变量的偏移地址、常位的寄存器)的内容与变量的偏移地址、常量之和量之和: : 变量名变量名+ +基址寄存器基址寄存器+ +常量常量 或或 变量名变量名 基址寄存器基址寄存器+ +常量常量 例例: MOV BL,2BX: MOV BL,2BX 或或 MOV BL,BX+2MOV
31、 BL,BX+2 ;(DS:BX+2);(DS:BX+2)BLBL例:例: MOV 6BP,AXMOV 6BP,AX 或或 MOV BP+6,AX ; MOV BP+6,AX ; AXAXSS:BP+6SS:BP+6 段寄存器的确定,首先由变量确定;若无变量,则由寄存器段寄存器的确定,首先由变量确定;若无变量,则由寄存器确定,寄存器确定的原则同间址。确定,寄存器确定的原则同间址。5. 5. 基址寻址基址寻址33以以BXBX的内容作基地址,的内容作基地址,字变量字变量W1W1的偏移地址为的偏移地址为位移量位移量或者或者以字变量以字变量W1W1的偏移地址的偏移地址作基地址,作基地址,BXBX的内容
32、的内容看作该变量数据区的看作该变量数据区的位移量位移量 所以所以 AL=19H AL=19H例如:例如:MOV AL,BYTE PTRBX+W1 MOV AL,BYTE PTRBX+W1 或者或者 MOV AL,BYTEMOV AL,BYTE PTR W1BXPTR W1BX 346. 6. 变址寻址变址寻址操作数据在存储器中,其偏移地址为操作数据在存储器中,其偏移地址为变址寄存器(变址寄存器(SISI、DIDI或或3232位的寄存器)位的寄存器)的内容与的内容与变量的偏移地址、常变量的偏移地址、常量量之和。之和。 例:例:MOV AX,2SI MOV AX,2SI 或或 MOV AX,SI+
33、2 MOV AX,SI+2 执行的操作是执行的操作是(DS:SI+2) AX(DS:SI+2) AX段寄存器的确定,首先由变量确定;若无变量,则由段寄存器的确定,首先由变量确定;若无变量,则由寄存器确定,寄存器确定的原则同间址。寄存器确定,寄存器确定的原则同间址。 357. 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 段寄存器的确定,首先由变量确定;若无变段寄存器的确定,首先由变量确定;若无变量,则由基址寄存器确
34、定,基址寄存器确定的原量,则由基址寄存器确定,基址寄存器确定的原则同间址。则同间址。 基址寄存器和变址寄存器的位数要相同。基址寄存器和变址寄存器的位数要相同。操作数据在存储器中,其偏移地址为指令中指定操作数据在存储器中,其偏移地址为指令中指定的基址寄存器和变址寄存器的内容与的基址寄存器和变址寄存器的内容与变量的偏移变量的偏移地址、常量地址、常量之和。之和。36例:例:W W为一字变量,为一字变量,B B为一字节变量,则:为一字节变量,则: MOV ALMOV AL,WBX WBX MOV AL MOV AL,BYTE PTR WBX BYTE PTR WBX MOV AXMOV AX,BSI+
35、5 BSI+5 MOV AX MOV AX,WORD PTR BSI+5 WORD PTR BSI+5 在符号指令中的基址,变址,基址变址三种寻址在符号指令中的基址,变址,基址变址三种寻址中,其中,其位移量可以是常数或符号常量,还可以是变位移量可以是常数或符号常量,还可以是变量名量名。若是变量名,它给出变量所在段的偏移地址,。若是变量名,它给出变量所在段的偏移地址,其意义是其意义是取变量单元中的数据取变量单元中的数据,所以其,所以其类型要与另类型要与另一操作数的类型一致。一操作数的类型一致。37 例:将立即数例:将立即数35H35H存入字节变量存入字节变量BUF+5BUF+5单元中单元中直接寻
36、址直接寻址: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 ;常用间址、基址常用间址、基址/ /变址访问一片连续的单元变址访问一片连续的单元 例:例:B1 DB B1 DB AB$AB$MOV BX,0MOV BX,0 MOV AL, MOV AL, B1B1BX BX ;ALAL41H41H MOV
37、 AH, MOV AH, B1B1BXBX1 1 ;AHAH42H42H388. 8. 比例变址寻址比例变址寻址 例例: : MOV EBX,ESIMOV EBX,ESI44 注:比例因子可为且只可为注:比例因子可为且只可为1 1、2 2、4 4、8 8操作数据在存储器中,其偏移地址为指令中给出操作数据在存储器中,其偏移地址为指令中给出的含有变址寄存器的含有变址寄存器比例因子的地址表达式的偏比例因子的地址表达式的偏移地址移地址399. 9. 基址比例变址寻址基址比例变址寻址 可将基址变址寻址看作是比例因子为可将基址变址寻址看作是比例因子为1 1的基的基址比例变址寻址。如:址比例变址寻址。如:
38、MOV ECX,EDIMOV ECX,EDI8+EAX8+EAX MOV EAX,ESIMOV EAX,ESI8+EBX8+EBX操作数据在存储器中,其偏移地址为指令给出的操作数据在存储器中,其偏移地址为指令给出的地址表达式的偏移地址,地址表达式中既有一个地址表达式的偏移地址,地址表达式中既有一个基址寄存器又含有变址寄存器基址寄存器又含有变址寄存器比例因子比例因子40( (1 1) )存储器寻址与地址表达式存储器寻址与地址表达式地址表达式的一般形式是:地址表达式的一般形式是:变量变量 基址寄存器基址寄存器+ +变址寄存器变址寄存器比例因子比例因子+ +常量常量 也可表示为:也可表示为: 基址寄
39、存器基址寄存器+ +变址寄存器变址寄存器比例因子比例因子+ +变量变量+ +常量常量 其他寻址方式都是其他寻址方式都是一般形式一般形式的不完整形式的不完整形式: : 直接寻址直接寻址: :变量变量+ +常量常量 或或 变量变量+ +常量常量 间接寻址间接寻址: : 寄存器寄存器 基址或变址寻址基址或变址寻址: :变量变量 寄存器寄存器+ +常量常量 或或变量变量/ /常量常量 寄存器寄存器 基址变址寻址基址变址寻址: :变量变量 基址寄存器基址寄存器+ +变址寄存器变址寄存器+ +常量常量 或基址寄存器或基址寄存器+ +变址寄存器变址寄存器+ +变量变量+ +常量常量 比例变址寻址比例变址寻址
40、: :变量变量 变址寄存器变址寄存器比例因子比例因子+ +常量常量 或变址寄存器或变址寄存器比例因子比例因子+ +变量变量+ +常量常量 10. 10. 存储器寻址及存储器中段基址或段选择字的确定存储器寻址及存储器中段基址或段选择字的确定41(2)(2)存储器寻址中段寄存器的确定存储器寻址中段寄存器的确定存储器寻址时段寄存器的存储器寻址时段寄存器的基本约定和段更换基本约定和段更换见下表:见下表:存储器存取方式存储器存取方式约定段寄约定段寄存器存器 段更换段更换偏移地偏移地址址取指令取指令CSCS不允许不允许IPIP、EIPEIP堆栈操作堆栈操作SSSS不允许不允许SPSP、ESPESP数据存取
41、数据存取(BP(BP、EBPEBP和和ESPESP间址、基间址、基址除外址除外) )DSDS另外另外5 5个段寄存器个段寄存器EAEABPBP、EBPEBP和和ESPESP间址、基址数据存间址、基址数据存取取SSSS另外另外5 5个段寄存器个段寄存器EAEA字符串处理指令的源串字符串处理指令的源串DSDSES CS SSES CS SSSISI、ESIESI字符串处理指令的目的串字符串处理指令的目的串ESES不允许不允许DIDI、EDIEDI有效地址有效地址EAEA(Effective Address)(Effective Address)是汇编程序计算后得到是汇编程序计算后得到的地址表达式的
42、偏移地址。的地址表达式的偏移地址。 42例如例如: MOV ES:DI, AL : MOV ES:DI, AL ;AL ES:DIAL ES:DI其中其中ESES为前缀字节,产生目标代码时,它将放在这条为前缀字节,产生目标代码时,它将放在这条MOVMOV指令的前面:指令的前面: 26 ES26 ES: 8805 MOV8805 MOVDIDI,ALAL其中符号指令前其中符号指令前3 3个字节的十六进制数个字节的十六进制数26 88 0526 88 05是符是符号指令号指令MOV ES:MOV ES:DIDI,ALAL的目标代码,即机器指令。的目标代码,即机器指令。 段超越或段更换是在地址表达式
43、前写上段名或段寄段超越或段更换是在地址表达式前写上段名或段寄存器来表示的。存器来表示的。(3)(3) 段超越或段更换段超越或段更换43汇编语言与汇编程序1 1符号指令中的表达式符号指令中的表达式操作数的寻址方式操作数的寻址方式常用指令常用指令2 2 伪指令伪指令3 34 45 5常用系统功能调用和常用系统功能调用和 BIOSBIOS44 数据传送指令数据传送指令 加减运算指令加减运算指令 逻辑运算指令逻辑运算指令 移位指令移位指令 注:学习时注意注:学习时注意指令格式及功能指令格式及功能3 3 常用指令常用指令45 1. 1.通用数据传送指令通用数据传送指令 格式:格式: MOV destMO
44、V dest, sourcesource 目的操作数目的操作数 源操作数源操作数 功能:将一个字节或一个字或一个双字数据功能:将一个字节或一个字或一个双字数据从源传送至目的地址中,源保持不变从源传送至目的地址中,源保持不变3.1 3.1 数据传送类指令数据传送类指令指令特点:将数据从一个部位传送到另一部位。指令特点:将数据从一个部位传送到另一部位。不影响标志寄存器中的状态标志位。不影响标志寄存器中的状态标志位。46MOVMOV指令指令的的9 9种形式:种形式: MOV REGMOV REG,REGREG MOV REGMOV REG,IMMIMM MOV MEMMOV MEM,IMM IMM
45、MOV MEMMOV MEM,REGREG MOV REGMOV REG,MEMMEM MOV SEGREGMOV SEGREG,REG REG ;CSCS除外除外 MOV REGMOV REG,SEGREGSEGREG MOV SEGREGMOV SEGREG,MEM MEM ;CSCS除外除外 MOV MEMMOV MEM,SEGREGSEGREG3.1 3.1 数据传送类指令数据传送类指令47l一个指令中,两操作数一个指令中,两操作数类型必须一致类型必须一致l至少至少1 1个操作数的个操作数的类型要明确类型要明确,不能出现二义性,不能出现二义性l代码段寄存器代码段寄存器CSCS和和立即数
46、立即数均不能作为目的操作数均不能作为目的操作数l源操作数和目的操作数源操作数和目的操作数不能同时为不能同时为存储器操作数存储器操作数 l存储器操作数的类型由地址表达式的变量名确定存储器操作数的类型由地址表达式的变量名确定l立即数的类型不明确立即数的类型不明确, ,不含变量名的地址表达式不含变量名的地址表达式的类型也不明确。在立即数送存储器的指令中的类型也不明确。在立即数送存储器的指令中, ,若存储器操作数是不含变量名的地址表达式若存储器操作数是不含变量名的地址表达式, ,则则必需使用必需使用PTRPTR来明确其中一个操作数的类型。来明确其中一个操作数的类型。注意:注意:3.1 3.1 数据传送
47、类指令数据传送类指令48(1 1)符号位扩展传送指令)符号位扩展传送指令格式:格式: MOVSX regMOVSX reg,sourcesource功能功能: : 对源操作数中的对源操作数中的8 8位或位或1616位补码数的符号位进行扩位补码数的符号位进行扩展,形成展,形成1616位或位或3232位补码数位补码数如如: : MOVSX EAX MOVSX EAX,BXBX ; ;若若BX=8765HBX=8765H, ,则则EAX=FFFF8765HEAX=FFFF8765H(2 2)零扩展传送指令)零扩展传送指令格式:格式: MOVZX regMOVZX reg,source source
48、功能功能: :对源操作数中的对源操作数中的8 8位或位或1616位无符号数进行扩展,形成位无符号数进行扩展,形成1616位或位或3232位无符号数位无符号数如:如:MOVZX EAXMOVZX EAX,BLBL ; ;若若BL=65HBL=65H,则,则EAX=00000065HEAX=00000065H2.2.扩展传送指令扩展传送指令3.1 3.1 数据传送类指令数据传送类指令49(1)(1)字节、字和双字交换指令字节、字和双字交换指令格式:格式:XCHG destXCHG dest,sourcesource 功能功能: : 将源地址与目的地址中的内容互换将源地址与目的地址中的内容互换 XC
49、HG REG, REGXCHG REG, REG XCHG REG, MEM XCHG REG, MEM XCHG MEM, REG XCHG MEM, REG3.3.数据交换指令数据交换指令3.1 3.1 数据传送类指令数据传送类指令50例如,数据段中有两个字变量例如,数据段中有两个字变量W1W1和和W2W2,编写程序段将两个,编写程序段将两个字变量互换字变量互换 W1 DW 1234HW1 DW 1234H W2 DW 5678H W2 DW 5678H用数据交换指令实现:用数据交换指令实现: MOV AXMOV AX,W1 W1 ;AX=1234HAX=1234H XCHG AX XCH
50、G 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 数据传送类指令数据传送类指令51【例例】 XCHG BX XCHG BX,BP+SIBP+SI 指令执行前,指令执行前,(BX)=1234H(BX)=1234H,(BP)=0100H(BP)=0100H,(SI)=0020H(S
51、I)=0020H,(SS)=1F00H(SS)=1F00H,(1F120H)=0000H(1F120H)=0000H, 则则 源操作数物理地址源操作数物理地址=1F00H=1F00H10H+0100H+0020H10H+0100H+0020H =1F00H=1F00H10H+0120H=1F120H10H+0120H=1F120H 指令执行后:指令执行后: (BX)=0000H(BX)=0000H,(1F120H)=1234H(1F120H)=1234H3.1 3.1 数据传送类指令数据传送类指令523.1 3.1 数据传送类指令数据传送类指令(2)32(2)32位通用寄存器中位通用寄存器中4
52、 4字节交换(字节交换(Byte SwapByte Swap)指令)指令指令格式指令格式 BSWAP regBSWAP reg指令的意义是把指令的意义是把3232位通用寄存器的第位通用寄存器的第1 1字节与第字节与第4 4字字节交换,第节交换,第2 2字节与第字节与第3 3字节交换。如指令:字节交换。如指令: BSWAP EAXBSWAP EAX若执行前若执行前EAX=12345678H,EAX=12345678H,指令执行后指令执行后EAX=78563412HEAX=78563412H。使用字节交换指令,将数据段中以使用字节交换指令,将数据段中以BXBX为偏移地址的为偏移地址的连续四单元的内
53、容颠倒过来,编写的程序段如下:连续四单元的内容颠倒过来,编写的程序段如下: MOV EAXMOV EAX,BXBX BSWAP EAX BSWAP EAX MOV BX MOV BX,EAXEAX534. 4. 栈操作指令栈操作指令堆栈的概念堆栈的概念l堆栈中数据的存取遵循堆栈中数据的存取遵循“先进后出先进后出”的原则。的原则。l堆栈的活动端称为栈顶,固定端称为栈底。堆栈的活动端称为栈顶,固定端称为栈底。 l80 x8680 x86的堆栈的伸展方向是从高地址向低地址。的堆栈的伸展方向是从高地址向低地址。l堆栈操作都是堆栈操作都是字或双字操作字或双字操作, ,进栈时进栈时SPSP自动减自动减2/
54、4,2/4,出栈时出栈时SPSP自动加自动加2/42/4。 3.1 3.1 数据传送类指令数据传送类指令543.1 3.1 数据传送类指令数据传送类指令(1)(1)进栈指令进栈指令 格式:格式:PUSH source (PUSH source (PUSH PUSH 源操作数源操作数) )执行的操作:执行的操作:(SP)(SP)(SP)(SP)2 2 先修改指针先修改指针 (SP)+1(SP)+1,(SP)(SP)操作数操作数功能:将功能:将1616位寄存器、段寄存器、位寄存器、段寄存器、1616位存储单元数据压入位存储单元数据压入堆栈。堆栈。55SP0040HSP003FHSP003EH123
55、4例:例:AX=1234HAX=1234H PUSH AX PUSH AX执行执行AXAHAL1234执行过程如下图:执行过程如下图:3.1 3.1 数据传送类指令数据传送类指令56(2)(2)出栈指令出栈指令 格式:格式:POP destPOP dest执行操作:(操作数)(SP)+1,(SP) (SP)(SP)+2 后修改指针BXBHBLSP0040HSP003FH12SP003EH34执行执行1234例:例:POP BXPOP BX执行过程如下图:执行过程如下图:3.1 3.1 数据传送类指令数据传送类指令57使用栈操作指令实现将数据段中两个字变量使用栈操作指令实现将数据段中两个字变量W
56、1W1和和W2W2互互换的程序段如下:换的程序段如下:PUSH W1PUSH W1PUSH W2PUSH W2POP W1POP W1POP W2POP W23.1 3.1 数据传送类指令数据传送类指令58说明:说明: 在在8086/80888086/8088中,中,PUSHPUSH、POPPOP指令的操作指令的操作数不能使用立即寻址方式。数不能使用立即寻址方式。POPPOP指令的操作数还不能使指令的操作数还不能使用用CSCS寄存器。寄存器。 堆栈中数据的压入、弹出必须以字为单堆栈中数据的压入、弹出必须以字为单位,所以位,所以PUSHPUSH和和POPPOP指令只能作字操作。指令只能作字操作。
57、 这两条堆栈指令不影响标志位。这两条堆栈指令不影响标志位。3.1 3.1 数据传送类指令数据传送类指令593.1 3.1 数据传送类指令数据传送类指令(3 3)通用寄存器进栈)通用寄存器进栈PUSHA/PUSHADPUSHA/PUSHAD和出栈指令和出栈指令POPA/POPADPOPA/POPADPUSHAPUSHA指令执行的操作是将指令执行的操作是将1616位通用寄存器进栈,进栈次序为位通用寄存器进栈,进栈次序为:AXAX、CXCX、DXDX、BXBX、指令执行前的、指令执行前的SPSP、BPBP、SISI、DIDI。603.1 3.1 数据传送类指令数据传送类指令PUSHADPUSHAD指
58、令执行的操作是将指令执行的操作是将3232位通用寄存器进栈,位通用寄存器进栈,进栈次序为:进栈次序为:EAXEAX、ECXECX、EDXEDX、EBXEBX、ESP(ESP(指令执行前指令执行前的值的值) )、EBPEBP、ESIESI、EDIEDI,指令执行后,指令执行后ESP-32ESP-32。(4)(4)标志寄存器进栈和出栈指令标志寄存器进栈和出栈指令1616位标志寄存器进栈位标志寄存器进栈/ /出栈指令:出栈指令:PUSHF/POPFPUSHF/POPF3232位标志寄存器进栈位标志寄存器进栈/ /出栈指令:出栈指令:PUSHFD/POPFDPUSHFD/POPFD613.1 3.1
59、数据传送类指令数据传送类指令【例】 若想设置若想设置TF=1TF=1,程序段如下:,程序段如下:PUSHFPUSHFPOPPOPAXAXOR AHOR AH,01H 01H ;修改;修改TFTF位位PUSHPUSHAXAXPOPFPOPF625. 地址传送指令 这是一类专用于传送地址码的指令,可用来这是一类专用于传送地址码的指令,可用来传送操作数的段地址或偏移地址,共包含以下传送操作数的段地址或偏移地址,共包含以下3条指令:条指令: 操作码操作码LEALEALDSLDSLESLES操作功能操作功能取偏址取偏址取偏址和数据段值取偏址和数据段值取偏址和附加数据段值取偏址和附加数据段值 地址传送指令
60、地址传送指令631) 取有效地址指令取有效地址指令LEA(Load Effective Address)汇编格式:汇编格式:LEA 16位寄存器名,存储器寻址方式位寄存器名,存储器寻址方式执行的操作:执行的操作:(16位寄存器位寄存器)源操作数的偏移地址源操作数的偏移地址说明:说明: 这条指令常用在初始化程序段中使一个寄存器成为指针。这条指令常用在初始化程序段中使一个寄存器成为指针。 16位寄存器不包括段寄存器。位寄存器不包括段寄存器。 这条指令不影响标志位。这条指令不影响标志位。 LEA 指令将一个近地址指针写入到指定的寄存器。指令将一个近地址指针写入到指定的寄存器。 64 【例】 LEA BX,TABLE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 45129-2025增强纱线在水泥中强度的测定
- 水泥柱模具施工方案
- 楼盘楼面花架施工方案
- 石材外墙施工方案
- TSHLX 005-2024 太阳能电池边框用铝合金型材
- 二零二五年度美甲店营销推广合作框架协议
- 二零二五年度人力资源服务销售提成与职业规划合同
- 二零二五年度石油开采施工安全协议
- 二零二五年度重庆市文化创意产业园区租赁协议
- 二零二五年度农机作业与农业风险管理合作合同
- 2024-2025学年新教材高中英语 Unit 6 Earth first理解 课文精研读教案 外研版必修第二册
- 2024中华人民共和国农村集体经济组织法详细解读课件
- T-CPQS C010-2024 鉴赏收藏用潮流玩偶及类似用途产品
- 110kV变电站专项电气试验及调试方案
- 2024时事政治必考试题库(预热题)
- DZ∕T 0215-2020 矿产地质勘查规范 煤(正式版)
- 威图电柜空调SK3304500使用说书
- 多图中华民族共同体概论课件第十一讲 中华一家与中华民族格局底定(清前中期)根据高等教育出版社教材制作
- 2024民主评议个人工作总结(5篇)
- 品质部组织架构图构
- 《无损检测》绪论
评论
0/150
提交评论