汇编语言程序设计:第二章 汇编语言指令系统和寻址方式1_第1页
汇编语言程序设计:第二章 汇编语言指令系统和寻址方式1_第2页
汇编语言程序设计:第二章 汇编语言指令系统和寻址方式1_第3页
汇编语言程序设计:第二章 汇编语言指令系统和寻址方式1_第4页
汇编语言程序设计:第二章 汇编语言指令系统和寻址方式1_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、第二章 汇编语言指令系统和寻址方式2.1 寻址方式 2.1.1 汇编指令的书写形式 2.1.2 三种类型的操作数 2.1.3 寻址规则2.2 指令系统 2.2.1 数据传送指令 2.2.2 算术运算指令 2.2.3 逻辑运算指令 2.2.4 字符串指令 2.2.5 程序转移指令 2.2.6 处理器控制指令2.1 寻址方式2.2.1 汇编指令的书写形式 一条汇编指令通常可以写成如下形式: 标号: 操作码 目标操作数 , 源操作数 ;注释 (1)其中 中的内容为可选项。 (2)标号必须是用字母打头的字母或数字组成的字符串,标号供转移指令作为转移的目标。 (3)指令末尾的分号表示由 ;起直至ENTE

2、R前均为注释部分,在输入源程序时,每一条汇编指令的末尾必须输入换行键ENTER表示本指令的结束,下一指令的开始。汇编指令的书写形式操作码 目标操作数, 源操作数一条能汇编成机器代码指令的汇编指令必须有唯一的操作码。操作码是汇编指令的关键字,它指出该指令要做什么。指令行中可以没有源操作数和目标操作数。在这种情况下通常是对某一固定的或称作隐含操作数的操作。一条汇编指令中的源操作数用来指出指令处理的对象来自何处。一条汇编指令中的目标操作数用来指出指令的处理结果置于何处。在许多指令中目标操作数既表示处理的对象之一来自何处,又指出处理的结果置于何处。这种指令被称为单操作数指令。指令行中既有源操作数又有目

3、标操作数的指令称为双操作数指令。双操作数指令中目标操作数一定出现在源操作数的左边。目标操作数总是紧接着操作码出现在源操作数的左边,因此有也称目标操作数为左源。汇编指令的书写形式举例: LOOP1:AAA ; 此处可添加注释 MOV AX, 053H;此处可添加注释 INC DH ;此处可添加注释第一条指令:带标号LOOP1,AAA是操作码,这一指令隐含使用固定操作数AL;第二条指令: MOV是操作码,双操作数指令, AX是目标操作数,053H是源操作数第三条指令: INC是操作码单操作数指令 在DOS下运行汇编程序,注释部分只能用英文和ASCII码符号书写,在中文操作系统下则可用中文书写,是指

4、换行键。操作码通常是指指令功能的助记符,它给出了指令功能便于记忆的形式,例如,MOV是Movement的缩写等。2.1.2 三种类型的操作数(1)立即数操作数(2)寄存器操作数(3)内存操作数单操作数指令的操作数只能是寄存器操作数或内存操作数。双操作数指令的目标操作数只能是寄存器操作数或内存操作数,而源操作数可以是三者之一,但是两操作数不能同时为内存操作数。 寻址方式就是寻找指令中的操作数的方式,寻址主要是指寻找内存数据的地址。(1)立即数操作数 立即数操作数作为代码指令的一部分出现在双操作数指令中。除了乘法、除法和字符串操作指令之外,立即数操作数均可作为源操作数。立即数操作数在汇编指令中可以

5、以十六进、八进制、二进制或十进制形式书写,例如0F0H、777Q、101B、99D等,注意,在用十六进制书写时第一个字符是非数字09时,前面一定要补一个0,例如,FAH应记为0FAH。汇编指令中立即数操作数还可以以一个表达式的形式出现,此时该立即数就是表达式的值。(2)寄存器操作数 寄存器操作数是以寄存器的内容参加运算,或用寄存器存放结果。MOV AX, 3456H中的AX,MOV DL, 41H中的DL就是寄存器操作数。段寄存器的内容指出当前4个段的基址,这些寄存器不能用一般的传送指令将立即数送入。如果需要将立即数置入段寄存器中的DS、ES或SS,则首先应将该值送入AX或其他通用寄存器,然后

6、再由AX传送给DS、ES或SS。至于CS因其与指令地址有关,一般不需用户干预。标志寄存器FLAG的各位在执行算术逻辑运算指令后一般均被修改,其状态将依指令及执行结果而定,它可以反映出当时处理器和累加器所检测到的结果。标志寄存器一般不能作为操作数,但可用标志指令或INC、DEC、ADD、MUL、DIV等来处理。通用寄存器(AX、BX、CX、DX、SP、BP、SI、DI、AH、AL、BH、BL、CH、CL、DH、DL)和指针及变址寄存器(BX、BP、SI、DI)均可参加算术和逻辑运算操作。虽然经常把AX作为累加器,但所有通用寄存器均可用作累加器。通用寄存器在单操作数指令中可作目标操作数,在双操作数

7、指令中既可作源操作数也可作目标操作数。(2)寄存器操作数一些汇编指令中虽然没有显式地写有寄存器,但是它却隐含着使用所指定的通用寄存器,详见表。 指令隐含应用AAA, AAD, AAM, AASAL, AHCBW, CWDAL, AH或AX, DXDAA, DASALIN, OUTAL或AXMUL, IMUL, DIV, IDIVAL, AX或AX, DXLAHF, SAHFAHLESESLDSDS循环或移位指令CL字符串操作指令CX, SI, DIXLATAL, BX(3)内存操作数 内存操作数又称为存储器操作数,是指把内存某地址存放的字节、字作为指令的处理对象。这时要将该字节、字作为源操作数

8、或目标操作数,当其作为源操作数时从内存中取出,或送到某个寄存器,或参加运算等;当其作为目标操作数时,则是将操作的结果置入该内存单元。无论是何种内存操作数,关键是必须找到其所在地址,即必须指出其所在段和相对于段首的位移(即有效地址EA),才能确定其物理地址。内存操作数地址的确定是寻址规则的重点。内存操作数所在段的段寄存器的名字在汇编指令中一般是不写的,它遵循着如前面的表所示的隐含原则,根据内存操作数类型的不同相应使用不同的段寄存器。 2.1.3 寻址规则与数据有关的寻址方式(1)立即数寻址(Immediate Addressing) (2)寄存器寻址(Register Addressing) /

9、寄存器直接寻址(3)存储器直接寻址(Direct Addressing) /直接寻址(4)寄存器间接寻址(Register Index Addressing) (5)寄存器相对寻址(Register Relative Addressing) (6)基址加变址寻址 (Based Indexed Addressing) (7)相对基址变址寻址 (Based Indexed Addressing) (8)固定寻址(Fixed Addressing) (9)数据串操作数的寻址(String Addressing) 与转移地址有关的寻址方式(1)段内直接寻址(2)段内间接寻址(3)段间直接寻址(4)段间

10、间接寻址I/O端口寻址(I/O PORT Addressing) 寻址规则立即数 操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。 立即数可以是8位、16位或32位数,该数值紧跟在操作码之后。如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。例如: MOV AH, 80H ADD AX, 1234H MOV ECX, 123456H 立即数寻址方式通常用于对通用寄存器或内存单元赋初值。(1) 立即数寻址方式寻址规则寄存器(2) 寄存器寻址方式 指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄

11、存器的寻址方式称为寄存器寻址方式。例如:MOV AX, 55H; ADD AX, BX 指令中可以引用的寄存器及其符号名称如下:8位寄存器有:AH、AL、BH、BL、CH、CL、DH和DL等;16位寄存器有:AX、BX、CX、DX、SI、DI、SP、BP和段寄存器等;32位寄存器有:EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP等。 寄存器寻址方式是一种简单快捷的寻址方式,源和目的操作数都可以是寄存器。 由于指令所需的操作数已存储在寄存器中,或操作的结果存入寄存器,这样,在指令执行过程中,会减少读/写存储器单元的次数。 通常情况下,我们提倡应尽可能地使用寄存器寻址方式,但也不要

12、绝对化。寻址规则存储器相关大多数情况下,操作数在存储器中,所以寻址方式37都是关于存储器的。存储单元地址段基址*16+偏移量。当段基址确定后不需要经常改变,对存储单元的寻址实际上就是确定偏移量即有效地址EA(effective address)。EA=基址+变址+偏移量基址:这里指有效地址的一个基础量,不是指段基址,任何通用寄存器都可以作为基址寄存器。变址:除了SP外,其他通用寄存器都可作为变址寄存器,但常用的变址寄存器为DI和SI。偏移量:操作码后面的32位、16位或8位的数。寻址规则直接寻址(3) 直接寻址方式 指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式

13、为直接寻址方式。 通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段,如MOV AX, ES:2000。MOV AX, 2000H; 设(DS)=3000H执行结果(AX)=3050H可以用符号地址代替数值地址,如:MOV AX, VALUE;或者MOV AX, VALUEVALUE为存放操作数单元的符号地址。寻址规则直接寻址DATA SEGMENT DB 41H ;偏移量0 DB 42H ;偏移量1DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATAG

14、O: MOV AX, DATA MOV DS, AX MOV DL,DS:0; MOV AH, 2 INT 21H MOV DL,DS:1; INT 21H MOV AH, 4CH INT 21HCODE ENDS END GODATA SEGMENTA1 DB 41H ;变量A1,偏移量0B1 DB 42H ;变量B1,偏移量1DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATAGO: MOV AX, DATA MOV DS, AX MOV DL,A1; MOV AH, 2 INT 21H MOV DL,B1; INT 21H MOV AH, 4CH

15、 INT 21HCODE ENDS END GO 寻址规则直接寻址以上两个例题的执行结果,都是在显示器中输出字符AB。注意:直接寻址在汇编语言的书写形式上类似于直接位移量和立即数寻址,必须从整个程序的上下文分析中才能得出正确结论。中汇编指令MOV AX, DATA中的DATA,MOV AH, 2中的2是立即数,而MOV DL, A1中的A1和MOV DL, B1则为直接位移量。 关于本例中的DATA,它是一个逻辑数据段的段名,这个段名经过汇编、连接和操作系统装入后就是一个具体的段地址常数,因此它是一个立即数。立即数是不能够直接送段寄存器的,必须首先将该段值送至一个16位的通用寄存器,这里是AX

16、,然后通过AX送DS。这就是本例中装填段寄存器为什么要通过下面两条指令的原因: MOV AX, DATA MOV DS, AX 寻址规则寄存器间接寻址 寄存器的内容作为有效地址EA的存储器寻址方式称为寄存器间接寻址。此时寄存器可以是SI, DI, BP, BX之一,在书写汇编指令时相应寄存器名用括起来,表示该寄存器的内容为EA。在不使用段超越前缀的情况下,有下列规定:若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;若有效地址用BP来指定,则其缺省的段寄存器为SS。(4) 寄存器间接寻址方式变址器汇编书写形式有效地址(EA)段寄存器物理地址SISI(SI)DS(DS)*10H

17、+(SI)DIDI(DI)DS(DS)*10H+(DI)BXBX(BX)DS(DS)*10H+(BX)BPBP(BP)SS(SS)*10H+(BP)寻址规则寄存器间接寻址举例 假设有指令:MOV AX, BX; 在执行时,(DS)=2000H,(BX)=1000H,执行指令后AX50A0H. EA=1000H,物理地址为21000H这种寻址方式可以用于表格处理,执行完一条指令后,只需修改寄存器内容就可取出表格中的下一项。寻址规则寄存器相对寻址(5)寄存器相对寻址方式使用变址寄存器(SI, DI)或基址寄存器( BX, BP)的内容和指令中给定的一个直接偏移量(disp)之和构成有效地址的存储器

18、寻址方式。此时EA的构成规则是在寄存器间接寻址中EA的计算后再加上偏移量。变址寻址方式的操作数在汇编指令中书写时可以是下述形式之一: BX偏移量 偏移量BX BX偏移量 其中BX位置处还可以是SI, DI, BP。在不使用段超越前缀的情况下,有下列规定:若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;若有效地址用BP来指定,则其缺省的段寄存器为SS。寻址规则寄存器相对寻址例如: MOV AX,BPVARA MOV AX,VARABP MOV AX,BPVARA都是等同的,其中VARA是变量名,注意:寄存器间接寻址和存储器直接寻址是寄存器相对寻址的特例。在相对寻址中如果不含变

19、址寄存器,就是存储器直接寻址;如果没有直接位移量,仅仅有变址寄存器就是寄存器间接寻址。变址器汇编书写形式有效地址段寄存器物理地址SISI+disp(SI)+dispDS(DS)*10H+(SI)+dispDIDI+disp(DI)+dispDS(DS)*10H+(DI)+dispBXBX+disp(BX)+dispDS(DS)*10H+(BX)+dispBPBP+disp(BP)+dispSS(SS)*10H+(BP)+disp寻址规则寄存器相对寻址举例:MOV AX, COUNTSI, 其中,COUNT为16位偏移量的符号地址。也可以表示为: MOV AX,COUNT+SI如果(DS)=30

20、00H,(SI)=2000H,COUNT=3000H,则EA=2000H+3000H=5000H物理地址=30000H+5000H=35000H执行结果(AX)=1234H寻址规则基址加变址寻址(6)基址加变址寻址方式 操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。 其有效地址如下: BXSI或BXSI 表示:EA=(BX)(SI) BXDI或BXDI 表示:EA=(BX)(DI) BPSI或BPSI 表示:EA=(BP)(SI) BPDI或BXDI 表示:EA=(BP)(DI) 在不使用段超越前缀的情况下,有下列规定:若有效地址用SI、D

21、I和BX等之一来指定,则其缺省的段寄存器为DS;若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。寻址规则基址加变址寻址举例: MOV AX, BXDI也可以表示为: MOV AX,BX+DI如果(DS)=2100H,(BX)=0158H,(DI)=10A5H,则EA=0158H+10A5H=11FDH物理地址=21000H+11FDH=221FDH执行结果(AX)=1234H寻址规则相对基址变址寻址(7)相对基址变址寻址方式 操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。 其有效地址如下: BX

22、SIdisp表示:EA=(BX)(SI)disp BXDIdisp表示:EA=(BX)(DI)disp BPSIdisp表示:EA=(BP)(SI)disp BPDIdisp表示:EA=(BP)(DI)disp下列表达形式是等价的:BXSIdisp或 dispBXSI或BXSIdisp或 BXSIdisp但格式:BX1000H+SI、SI1000H+BX等是错误的,即所用寄存器不能在”“,”之外,该限制对寄存器相对寻址方式的书写也同样起作用。 寻址规则相对基址变址寻址基址寄存器变址寄存器汇编书写形式有效地址段寄存器物理地址BXSIBX+SI+disp(BX)+(SI)+dispDS(DS)*1

23、0H+EABXDIBX+DI+disp(BX)+(DI)+dispDS(DS)*10H+EABPSIBP+SI+disp(BP)+(SI)+dispSS(SS)*10H+EABPDIBP+DI+disp(BP)+(DI)+dispSS(SS)*10H+EA相对基址变址寻址的有效地址形成寻址规则相对基址变址寻址举例: MOV AX, MASKBXSI也可以表示为: MOV AX,MASKBX+SIMOV AX, MASK+BX+SI如果(DS)=3000H,(BX)=2000H, MASK=0250H,(SI)=1000H,则物理地址= 30000H+2000H+1000H+0250H =332

24、50H执行结果(AX)=1234H寻址规则相对基址变址寻址相对基址加变址寻址方式与其它寻址方式之间的变形关系源操作数指令的变形源操作数的寻址方式只有一个偏移量MOV AX, 100H直接寻址方式只有一个寄存器MOV AX, BX 或MOV AX, SI寄存器间接寻址方式有一个寄存器和偏移量MOV AX, BX+100H 或MOV AX, SI+100H寄存器相对寻址方式有二个寄存器MOV AX, BX+SI基址加变址寻址方式有二个寄存器和常数项MOV AX, BX+SI+100H相对基址加变址寻址方式寻址规则固定寻址(8)固定寻址 汇编指令中隐含着对固定目标的操作,这种操作称作固定寻址。 例如

25、,非压缩型BCD码校正指令,或称作ASCII码加法校正指令AAA,表面看只有操作码没有操作数,但其隐含着使用固定操作数AL和AH寄存器。被调整的数位于AL中。调整的结果在AL和AH中。 8086中这一类指令多为对应的单字节指令 。寻址规则数据串寻址(9)数据串寻址方式串操作指令不同于其他指令,它使用隐含的变址寄存器来寻址,且操作过程中自动修改该寄存器内容以指向下一步操作的地址,修改方式分自动增和自动减两种,采用哪种方式取决于此时状态寄存器的DF标志位,当DF=1时减,否则增。源操作串由DS:SI指定,目标串由ES:DI指定。CLD指令置DF0,设置为正向串,每次串操作后SI和DI自动递增;ST

26、D指令置DF1,设置为负向串,每次串操作后SI和DI自动递减。当串操作为字节串时,每次SI和DI递增和递减1;当串操作为字串时,每次SI和DI递增和递减2。与转移地址有关的寻址方式这些寻址方式用来确定转移指令及CALL指令的转向地址。(1)段内直接寻址(Intrasegment direct addressing)(2)段内间接寻址(Intrasegment indirect addressing)(3)段间直接寻址(Intersegment direct addressing)(4)段间间接寻址(Intersegment indirect addressing)与转移地址有关的寻址方式(1)

27、段内直接寻址(Intrasegment direct addressing) 转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位偏移量之和。这是一种相对寻址方式;适用于条件转移及无条件转移指令,但当它用于条件转移时,位移量只允许8位,这称为短跳转。举例 JMP NEAR PRT PROGIA JMP SHORT QUESTPROGIA和QUEST均为转向的符号地址,在机器指令中,用偏移量来表示,符合程序再定位要求。在汇编指令中,如果偏移量为16位,则在符号地址前加操作符NEAR PRT ,如果偏移量为8位,则在符号地址前加操作符SHORT。与转移地址有关的寻址方式(2)段内间接寻址

28、(Intrasegment indirect addressing) 转向有效地址是一个寄存器或是一个存储单元的内容。这个寄存器或存储单元的内容可以用数据寻址方式中除立即数以外的任何一种寻址方式取得,所得到的转向有效地址用来取代IP寄存器的内容。此寻址方式及后两种寻址方式都不能用于条件转移指令,条件转移指令只能使用段内直接寻址的8位偏移量。指令格式举例:JMP BX; JMP WORD PTRBP+TABLE举例: 假设(DS)=2000H, (BX)=1256H, (SI)=528FH, 偏移量=20A1H, (232F7H)=3280H, (264E5H)=2450H. JMP BX; 指

29、令执行后IP=1256H,寄存器寻址方式。 JMP TABLEBX;指令执行后IP=(20000H+1256H+20A1H)=(232F7H)=3280H,寄存器间接寻址方式。 JMP BXSI;指令执行后IP=(20000H+1256H+528FH)=(264E5H)=2450H,基址变址寻址方式。与转移地址有关的寻址方式(3)段间直接寻址(Intersegment direct addressing)指令中直接提供了转向段地址和偏移地址,用此偏移量取代IP寄存器的内容,用指定的段地址取代CS寄存器的内容。汇编指令格式举例:JMP FAR PTR NEXTROUTINT;其中NEXTROUT

30、INT为转向的符号地址, FAR PTR 是表示段间转移的操作符。(4)段间间接寻址(Intersegment indirect addressing)用存储器中的二个相继字的内容来取代IP和CS寄存器的值以达到段间转移的目的。汇编指令格式举例:JMP DWORD PTRINTERS+BX;其中INTERS+BX说明数据寻址方式为寄存器相对寻址方式,DWORD PTR为双字操作符,说明转向地址需要取双字为段间转移指令。I/O端口寻址对分配在I/O空间中的端口有两种寻址方式:直接端口寻址:端口号可以是8位数(0255)。间接端口寻址:间接端口寻址时端口号应事先存放在DX中,间接寻址的端口地址可以

31、是065535的端口地址,当端口号大于255且小于等于65535时必须使用间接端口寻址。 在进行端口寻址时,当端口为8位数据时只能够通过AL寄存器与这些口进行信息交换,当端口为16位口时只能够通过AX寄存器与这些口进行信息交换。这就是说,80X86微处理器与I/O设备的通讯只能够通过累加器AX或AL进行,而不能是其他任何寄存器或内存。 端口间接寻址的寄存器只能是地址寄存器DX,而不能够是其他任何寄存器,而且在这种情况下的间接寻址,汇编指令的书写形式不允许在DX外写方括号。I/O端口寻址I/O端口寻址举例(1) 端口直接寻址,例如: IN AL, 63H;从63H口读信息到AL寄存器 OUT 65, AL;将AL中的内容送入41H端口,口地址可 ;以用汇编允许的任何进制数字(2) 端口间接寻址,例如: MOV DL, 63H IN AL, DL;以上两条指令完成从63H口读信息到AL寄存器又如: MOV DX, 256 OUT DX

温馨提示

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

评论

0/150

提交评论