微机原理与接口技术:第三章 指令系统_第1页
微机原理与接口技术:第三章 指令系统_第2页
微机原理与接口技术:第三章 指令系统_第3页
微机原理与接口技术:第三章 指令系统_第4页
微机原理与接口技术:第三章 指令系统_第5页
已阅读5页,还剩173页未读 继续免费阅读

下载本文档

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

文档简介

1、本章内容 指令的基本概念和指令所包含的 基本内容。 8086指令的格式及编码方式。 8086指令的寻址方式及寻址过程。 8086指令系统的分类、功能及操 作过程,每条指令的格式及用法。学习目的 掌握指令及指令系统的基本概念。 掌握8086各种寻址方式所执行的数 据寻址过程。牢固地掌握存储器段地址:偏移地 址的组织结构和段约定的基本概念。 掌握每条8086指令的格式、功能及用法。掌握指令的操作过程中操作数的变化情 况以及对标志位的影响。 学会正确选用指令完成简单的任务。高低高 字低 字高 双 字低 双 字字节字双字四字高 四 字低 四 字双四字7 07 015 815 031 1631 063

2、3263 0127 64NNN+1NN+2NN+4NN+8图3.1 基本数据类型的结构形式基本数据类型及其存储存储规则: 高字节数据存放在地址号高的存储单元中,低字节数据存放在地址号低的存储单元中。例:从地址号为N的存储单元存放字、双字数据96AFH、123F4CHN+5N+4N+3N+2N+1N0AFH96H4CH3FH12H00H数据类型 7 6 0 15 14 0 3130 0 63 62 0字节符号整数字符号整数四字符号整数双字符号整数(b) 7 0 15 0 31 0 63 0字节无符号整数字无符号整数四字无符号整数双字无符号整数(a)3130 0双精度浮点数单精度浮点数 63 62

3、 0 6362 0 79 78 64双扩展精度浮点数(c)图3.2 数字数据类型(a)无符号整数 (b)带符号整数 (c)浮点数 (d)字节、字、双字字符串数据型 7 0 7 07 015 015 015 031 031 031 0字节串字 串双字串NN+1N+MNN+2N+2MNN+4N+4M(d)指针数据类型在实方式下有两种类型的指针:近指针(16位)和远指针(32位)偏 移Near指针31 0偏 移段选择子Far指针或逻辑地址31 047 32(a)(b) 指针数据类型(虚拟方式)3.1 概 述一、指令 (Instruction): 指令通常以二进制代码的形式提供给计算机,这种指令称为机

4、器指令。例:10001000 11011000就是一条2字节的机器指令,指示计算机执行:“把寄存器BL内容复制到寄存器AL之中” 的操作。表示为: ALBL。指示计算机执行什么操作的命令。二、指令系统 (Instruction System): 三、程序 (Program): 完成某个特定任务而编制的一系列指令的有序集合。程序的执行一般是按指令的先后次序一条一条执行,但遇到转移类指令时则可能改变指令的执行次序。计算机所能执行的全部指令。四、指令包含的基本内容1. 做什么操作由指令的操作码字段规定。2. 操作数的来源操作数来自于什么地方。由指令的操作数字段规定。操作数的来源可以是:a. CPU内

5、的某个寄存器;b. 存储器内的某一个或几个单元;c. I/O端口; d. 立即数。3. 操作结果的去向操作的结果将存放在何处。4. 下一条指令的位置指示下一条指令是顺序执行还是转移执行。五、指令的种类1. 数据处理指令2. 数据传送指令3. 程序处理指令4. 状态管理指令六、指令的表示方法1. 二进制代码表示机器语言指令2. 助记符表示汇编语言指令例:10001000 11011000例:MOV BL,ALMOV表示“传送”助记符,BL(寄存器)表示结果存放的位置,AL(寄存器)表示数据的来源。助记符表示的指令便于书写、理解和记忆,但最终必须将助记符指令“翻译”成机器指令才能被识别和执行。这个

6、过程叫“汇编”。助记符指令机器指令汇编 3.2 8086 CPU的寻址方式地址:数据和指令存放的位置。数据存放的位置可以是寄存器、存储器或I/O端口,指令存放的位置只能是存储器中的代码段。寻址方式:寻找指令地址和操作数地址的方式。寻址过程:形成指令地址和操作数地址的过程。结果AHAL1. 固定寻址 (隐含寻址)操作数在某个固定的寄存器中。这个固定的寄存器大多为AL或AX。例:AAA操作:对固定寄存器AL中的内容进行十进制调整,结果仍在AL中。(可能影响AH的内容)十进制调整影响+1送回2. 立即数寻址操作数作为立即数就在指令中给出。例:MOV AX,1234H操作:把立即数1234H送寄存器A

7、X中。机器码:B8 34 12 (低字节在地址小的单元)AHALAX.B83412.5678代码段 (存储器中)操作码(B8)操作数(1234H)立即数一条指令指令执行后,AX=1234H (原有的内容被新的内容替换)。1234MOV AX,1234H3. 寄存器寻址操作数在某个寄存器中。例:INC BL操作:使BL中内容加1后送回+1BL00若BL=00H,则执行后BL=01HBL=FFH,则执行后BL=00H (自动溢出)014. 存储器寻址操作数在存储器中的一个或几个单元中。在这种寻址方式下,要找到该操作数,关键是必须找到该操作数所在单元的地址。由于8086采用存储器段组织结构,内存单元

8、的地址由段起始地址 (基地址) 和该单元与段起始地址之间的距离 (以字节数计) 两部分共同决定。段起始地址(基地址):某个段寄存器的内容(又称段基值)乘以16得到。段内偏移量:该单元与段起始地址之间的距离(字节数) 。又称有效地址EA。有效地址EA待寻址的内存单元(CS, DS, ES, SS)16 段基地址物理地址 =段基值16+EA内存单元物理地址8086规定,在执行某种操作时,采用的段寄存器有一个预先的约定。故指令中一般只需给出有关EA的信息,则CPU将能够根据该次操作自动选用段寄存器,并与EA一起形成物理地址。存储器寻址的实质就是如何形成有效地址EA。(1) 直接寻址方式指令中以偏移量

9、方式直接给出操作数的有效地址。即EA=指令中给出的偏移量例:MOV AX,1234H机器码:A1 34 12操作:把偏移量1234H作为EA,在数据段中找到相应的字单元,再将字单元的内容送AX。本例执行完后,AX=3050HEA=1234H设DS=3000H31234H1234H+EA=1234H31234H56783050DS16=30000H30000H= 3000H16.A13412.5030.指令代码段数据段AHALAXMOV AX, 1234Ha. 直接寻址的操作过程与立即寻址不同。为表示它们的区别,直接寻址的偏移量用一对 “ ”表示。立即寻址:MOV AX,1234H直接寻址:MO

10、V AX,1234Hb. 段基值乘以16,相当于段基值(二进制表示)左移4位,或段基值(十六进制表示)在末尾添一个0H。注:(2) 间接寻址方式以间接的方式得到有效地址EA,有几个专用的寄存器可用于间接寻址:BX,BP,SI,DI。a. 基址寻址方式以BX作为基址寻址寄存器,操作数在数据段中。以BP作为基址寻址寄存器,操作数在堆栈段中。EA=BX或BP的内容+8位或16位位移量例:MOV AX,BX机器码:8B 04操作:以BX的内容作为有效地址EA,在数据段中找到对应的字单元,再将该字单元的内容送AX中。EA=BX (位移量为0)设DS=2000H,BX=1000H本例执行后 AX=50A0

11、HDS=2000HDS1620000HEA=BX(=1000H)21000H50A08B.04A050代码段数据段AXAHAL这种寻址方式的优点就在于可以随时修改BX寄存器的内容,而指向不同的存储单元。故BX又称为基址指针寄存器。例:MOV AL,DATABP 这里DATA是以符号表示的位移量。 EA=BP+位移量DATA操作:以EA作为有效地址,在堆栈段中去 寻址字节单元,再将该字节单元内容送AL。b. 变址寻址方式以SI,DI寄存器作为间接寻址寄存器,操作数在数据段中。 EA=SI或DI内容+8位或16位位移量 例:ADD AX,SI EA=SI操作:以EA作为有效地址,在数据段中找到某个

12、操作数,再将该操作数与AX的内容相加,结果存放在AX中。c. 基址变址寻址方式既有基址寄存器(BX或BP),又有变址寄存器参与(SI或DI)寻址,操作数在基址寄存器所规定的段中。EA=BX或BP+SI或DI+8位或16位位移量基址变址寻址 基址变址寻址(Based Index Addressing)中的操作数的有效地址是一个基址寄存器(如BX、BP)和一个变址寄存器(如SI、DI)的内容之和,两个寄存器均由指令指出。操作数的段地址分配和前面所述相同,即使用默认段基址或使用段超越前缀来指定段基址。 MOV AX,BXDI 或 MOV AX,BX+DI 设DS=2000H DI=1000H BX=

13、8000H,则该指令表示将物理地址=20000H+8000H+1000H=29000H为首地址的一个字的内容送AX中。 例相对基址变址寻址 相对基址变址寻址(Relative Based Indexed Addressing)中操作数的有效地址是一个基址寄存器和一个变址寄存器的内容和8位或16位位移量这三者之和。同样地,当使用基址寄存器BX时,缺省的段寄存器是DS;当使用基址寄存器BP时,缺省的段寄存器是SS。 例:MOV AX,0260H BX SIEA=BX+SI+0260H,操作数在数据段中MOV AX,INF BP+DIEA=BP+DI+位移量INF,操作数在堆栈段中 * 以上两种基址

14、+变址的格式都是合法的。(3) 串操作指令寻址这类指令规定:源串操作数在数据段,且有效地址EA=SI目的串操作数在附加段,且有效地址EA=DI指令执行后,自动修改SI,DI的值,使之指向新的单元。 8086的段约定8086在执行某种操作时,预先规定了采用的段寄存器和段,即有基本的段约定。如果要改变默认的段约定,则需要在指令中明 确指出来。8086/8088的段约定存储器存取方式基本段约定允许修改的段偏移地址取指令堆栈操作源串目的串用BP作基址寄存器通用数据读写CSSSDSESSSDS无无ES,CS,SS无CS,DS,ESCS,ES,SSIPSPSIDIEAEA5. I/O端口寻址方式(1) 直

15、接端口寻址操作数在某个8位或16位端口中。端口地址可以置于DX中,但不能置于其它寄存器中。端口的输入、输出数据只能置于累加器 AL或AX中。注:b. 端口输出OUT port, ALa. 端口输入IN AL,portport=端口地址 (8位,0255)例:IN AL,80H操作:从端口地址为80H的端口输入一字节送AL。(2) 间接端口寻址可以把端口地址送入DX,然后进行端口寻址:输入: IN AL,DX输出: OUT DX,AL注: 若用AX代替AL,则表示16位数据的端口。 端口地址大于255时,必须将端口地址送入DX,即采用间接寻址端口方式。6. 转移类指令的寻址方式前面所述的各种寻址

16、方式实际上是数据寻址方式,关键是如何找到操作数。转移类指令寻址方式属于程序存储器寻址,关键是要找到下一条待执行指令的地址。(1) 转移范围段内转移:转移范围在同一个段以内段间转移:从一个代码段转移至另一个代码段(2) 转移条件无条件转移有条件转移 (转移范围仅为128+127)(3) 转移方式直接转移 (转移目标直接在指令中给出)间接转移 (转移目标预先放入某个寄存器或存储器中)寻址方式小结:固定寻址:操作数固定在某个寄存器中寄存器寻址:操作数在某个寄存器中立即数寻址:操作数就是操作码后跟的立即数存储器寻址直接寻址间接寻址串操作寻址基址寻址变址寻址基址+变址寻址I/O端口寻址直接端口寻址间接端

17、口寻址转移类指令寻址课堂练习与思考:1.请指出下列每条指令源操作数的寻址方式。(1) MOV AX, BX(2) MOV CH, 3AH(3) MOV BX, 2000H(4) MOV DX, BX(5) MOV CX, BP+2(6) MOV AX, 3BX DI(7) MOV AL, ES:SI(8) MOV BX, DS:BP;寄存器寻址,操作数在BX中;立即数寻址,操作数为3AH;直接寻址,EA=2000H,数在数据段;间接寻址,EA=BX,数在数据段;基址寻址,EA=BP+2,数在堆栈段;相对基址变址寻址,EA=BX+DI+3,数在数据段;含段超越的变址寻址,EA=SI,数在附加段;

18、含段超越的基址寻址,EA=BP,数在数据段课堂练习与思考:2. MOV AX,BX+SI+0080H,即将BX与SI中的内容与0080H相加作有效地址。3.设BX=0123H DI=1000H DS=3200H,默认DS作为操作数对应的段寄存器(假定没使用段前缀),试指出下列指令的寻址方式,并写出其操作数的有效地址和物理地址。(1)MOV AX,1A38H(2)MOV AX,BX(3)MOV AX,BX+1A38H(4)MOV AX,BX+DI(5)MOV AX,BX+DI+1A38H课堂练习与思考:解:(1)直接寻址 有效地址=1A38H, 物理地址=32000H+1A38H=33A38H(

19、2)寄存器间接寻址 有效地址=0123H, 物理地址=32000H+0123H=32123H(3)寄存器相对基址寻址 有效地址=0123H+1A38H=1B5BH, 物理地址=32000H+1B5B=33B5BH(4) 基址变址寻址 有效地址=0123H+1000H=1123H, 物理地址=32000H+1123H=33123H(5)相对基址变址寻址 有效地址=0123H+1000H+1A38H=2B5BH, 物理地址=32000H+2B5BH=34B5BH 3.3 8086指令系统8086指令按功能分为六大类。8086指令系统数据传送指令算术运算指令逻辑运算指令串操作指令程序控制指令CPU控

20、制指令mem 存储器操作数 port 输入输出端口,可用 数字或表达式表示opr 表示操作数 存储单元的内容ac 累加器操作数(AX或AL) reg 寄存器src 源操作数 segreg 段寄存器dist 目的操作数 count 移位次数,可以是 1或CLdata 立即数 S_ins 串操作指令disp 8位或16位位移量本节中要用到的一些符号所表示的含义:一、数据传送指令数据传送指令能够完成下列操作数的传送任务。立即数存储器段寄存器CS,DS,ES,SS通用寄存器组AX,BX,CX,DXBP,SP,SI,DI(CS不能作目的)1. 通用数据传送指令(1) MOV d, s功能:将源操作数s复

21、制到目标操作数d,源保持不变,目标被源代替。注: d, s不能同时为存储器错误指令:MOV BX,SI d不能为立即数错误指令:MOV 1234H,AX d, s必须同时为字节型或字型错误指令:MOV AX,BL 指令后的分号“;”以后为注释部分,对指令的执行没有任何影响,主要是便于阅读或解释指令的功能。例:MOV AX,0 ; AX0,AX清0执行后,AX=0MOV SI,BP ; SIBP,BP内容送SI执行后,SI=BP,BP不变MOV AL,BUFFERS ;BUFFERS内存单元内容送入AL这里,BUFFERS代表符号地址,从该地址单元中取出内容送AL寄存器。相当于直接寻址方式。EA

22、=BUFFERS偏移量3030HBUFFERSALMOV AX,DATA SI+BXEA=SI+BX+DATA,在数据段中寻找字单元,取出该字单元的内容送入AX。设DS=3000H,SI=200H,BX=1000H,DATA的偏移量为100H,则EA=SI+BX+DATA=200H+1000H+100H=1300H物理地址=DS16+EA=30000H+1300H=31300H即从31300H和31301H两单元中取出内容送AX。DS1630000H123434H12HAXAHALEA=1300HDATASIBXDATA31300H31301HMOV AX,DATA SI+BX(2) PUSH

23、 s;SP2 SP, 源操作数压入堆栈保存POP d;SP所指堆栈的内容送目 标, SP+2 SP例:PUSH BX;把BX内容压入堆栈设 SS=2000H,SP=0040H,BX=2340H则执行后,2340H被保存到堆栈,同时SP=003EH,BX内容不变SS1620000HSP=0040H(初值)20040H2003EH4023SP=003EH(压栈后)XX2340BX注:s和d只能为16位寄存器或存储器错误指令:PUSH 1234HPOP AL(3) XCHG d, s ;交换源和目标操作数注:d=通用寄存器s=通用寄存器或存储器例:XCHG AX,SI+400H执行后,5678H被送

24、到内存单元AX=1234H3412SI+400H5678AHALAX34127856(4) XLAT ;查表转换注:a. 表首相对于段起始地址的偏移量预先送入BX中;b. 待查找的表内某单元相对于表首的偏移量送入AL中;c. 以EA=BX+AL在表中(数据段)查找,将查得的数据再送回AL中。例:设表首的偏移地址为2000H,要查找表内第4号单元 (从0号算起)的内容并送回AL,则程序段如下:MOV BX,2000HMOV AL,04HXLAT设表中内容如下页图所示,则执行后,AL=09H 18H34H05H06H09H2000HBX04HAL(表首)TABLEDS1604AL092. 目标地址

25、传送指令对于任一个存储器操作数,由段地址和偏移地址确定了它们在存储器中的位置。目标地址传送指令就用于获得存储器操作数的段地址或偏移地址。(1) LEA d, s功能:取存储器源操作数有效地址送入目标dd=通用寄存器例:LEA BX,COUNTER; 取COUNTER地址偏移量BX若COUNTER地址偏移量为0002H,则执行后BX=0002H(2) LDS d, s功能:装入地址指针,段地址DS,偏移地址d这条指令往往改变了段寄存器DS的内容,使得DS指向了另外一个数据段。例:LDS SI,BASE设执行前,DS=1000H,SI=0000H,BASE偏移地址为0004H,10004H1000

26、7H单元内容依次为00H,30H,00H,20H,则执行后,DS=2000H,SI=3000H003000200004HSI=3000H原DS所指向的数据段新DS所指向的数据段1000H1610000HDSBASE30002000SIDS2000H1620000HDS(3) LES d, s功能:装入地址指针,段地址 ES,偏移地址d3. 标志位传送指令(1) LAHF功能:将标志寄存器低8位装入AH寄存器 SFZFAFPFCFFR70AH(2) SAHF功能:把AH的内容送入标志寄存器的低8位。(3) PUSHF功能:把16位的标志寄存器压入堆栈保存,同时SP2SP。(4) POPF功能:将

27、当前SP所指内容(2字节)弹出至标志寄存器,同时SP+2SP。4. I/O数据传送指令功能:从指定端口输入数据至累加器acc (AL或AX) ,port=0255(1) IN acc, portAHALacc端口port16位数据时(2) IN acc, DX功能:从DX指示的端口输入数据至累加器acc , DX=065535(3) OUT port, acc功能:将累加器的数据输出至指定端口。(4) OUT DX,acc功能:将累加器的数据输出到DX所指示的端口。注: 16位端口地址必须送入DX中。 若采用AX,则表示16位数据传送(输入/输出)(4) 换码指令XLAT功能:该指令通过AL和

28、BX寄存器进行表格查找,将8位数装入AL中。它完成的操作为:AL BX+AL,XLAT指令常用于查表操作,即BX寄存器含有表格的起始地址,而AL中的值是作进入表格中的偏移量,查出表格中的内容送入AL中。例 设DS =3000H, AL=09H, BX=0080H执行指令XLAT作用是:将存储单元30089H的内容送入AL中。二、算术运算指令算术运算指令的操作数可以是无符号数,也可以是有符号数。算术运算指令一般影响标志位,而数据传送指令一般不影响标志位。1. 加法指令(1) ADD d, s功能:将s与d相加,结果在d中。根据操作结果设置标志位。例:ADD BX+106BH,1234H设DS=2

29、000H,BX=1200H,EA=1200H+106BH=226BH物理地址:2000H16+226BH=2226BH又设原来(2226BH)=90H,(2226CH)=30H则指令执行后:3090H+1234H=42C4H即(2226BH)=C4H,(2226CH)=42H又 42C4H=0100,0010,1100,0100B 标志位:CF=0,ZF=0,SF=0AF=0,PF=0 (5个1),OF=0(2) ADC d, s功能:将s与d再与进位CF相加,结果留在d中,ADC指令主要用于多字节相加。例:MOV AX,0FH ;AX=000FHADD AL,0F1H ;AL+F1HALAD

30、C AH,0 ;AH+0+CFAH最后结果:AH=01H,AL=00H注:若是立即数,且最高位为数码AF,则必须在前面添加一个0,以避免混淆。(重要)(3) INC d功能:将d加1后送回d。注:INC指令不影响进位标志CF。该指令经常用于修改地址指针寄存器 (BX, BP, SI, DI),使之指向下一个单元。2. 减法指令(1) SUB d, s功能:dsd,同时影响标志位。(2) SBB d, s功能:dsCFd,同时影响标志位。(3) DEC d功能:d1d该指令与INC相反操作,也不影响进位标志CF。(4) NEG d功能:对d进行求补运算后送回 (按位求反再加1)。例:MOV AL

31、,7FHNEG AL结果:AL=7F按位求反+1=80H+1=81H(5) 比较指令 CMP d, s功能:作一次减法运算ds,但不回送结果,只根据结果设置标志位。(*)比较指令往往用于判断两数是否相等,或两数大小关系。若相等,则零标志ZF=1。3. 乘法指令乘法指令在指令中只出现一个操作数s (乘数),另一个操作数固定在累加器(AX或AL)中。(1) MUL s功能:无符号数乘法指令a. 8位乘法被乘数=AL,乘数=s积(16位)=AH:AL中,即在AX中AH为高8位,AL为低8位。AL(8位)s(8位)AHAL(16位)b. 16位乘法被乘数=AX,乘数=s积(32位)=DX:AXDX为高

32、16位,AX为低16位。AX(16位)s(16位)DXAX(32位)例:MUL BX若执行前 AX=0012H,BX=0066H则执行后 DX=0000H,AX=072CH(2) IMUL s功能:有符号数乘法指令8086规定,有符号数一般采用补码表示。故有符号数作乘法运算时,必须先把它们转变为原码数相乘,积也为原码数,再将原码数转变为补码数。这个工作由CPU自动完成。例:MOV AL,88H; 88H为 120的补码MOV BL,2IMUL BL结果:AX=FF10H ;FF10H为240的补码若直接用MUL BL指令,则AX=0110H4. 除法指令(1) DIV s功能:无符号数相除a.

33、 字节除被除数=AX,除数=s (s0)结果:商=AL,余数=AHALAHAL(8位)(16位).AH(8位)s(8位)商余数b. 字除被除数=DX:AX,除数= s (s0)结果:商=AX,余数=DXAXDXAX(16位)(32位).DX(16位)s (16位)商余数注:如果除数太小,使得商超出了一个字节或字所能表示的范围,则会产生“被0除”错误。例:MOV AX,800HMOV BL,2DIV BL结果错误,“被0除”(2) IDIV s功能:带符号数除法采用的固定寄存器与DIV相同。(3) CBW和CWDCBW:字节除法的符号扩展指令功能:若AL为正数(D7=0) 则 AH=00H AL

34、为负数(D7=1) 则 AH=FFHCWD:字除法的符号扩展指令功能:若AX为正数(D15=0) 则 DX=0000H AX为负数(D15=1) 则 DX=FFFFHCBW和CWD一般用于带符号数除法指令之前。5. 十进制调整指令运算器按二进制规律进行运算,如果参与运算的是BCD码数,则需要对结果进行调整。100010010000100100001000组合的BCD码数未组合的BCD码数899(低位)8(高位)代表89(1) AAA功能:对未组合型BCD码加法的结果进行校正(调整)。校正(调整)方法:若AL中低4位数值 9 或 AF = 1,则:a. AL+6 AL,且 AL 高4位清0b.

35、AH+1 AH否则不作调整。(2) DAA功能:对组合型BCD码加法的结果进行校正(调整)。DAA同时对AL中低4位和高4位进行调整。例:MOV AH, 0MOV AL, 00000110B;代表6ADD AL, 00000111B;代表7AAA000001106+ 00000111 7调整 + 00000110 000011010001001100000011 AL清000000000+1=00000001AH最后结果 AH = 01H,AL = 03H例. 组合BCD码调整MOV AL, 00100111B;代表27ADD AL, 10000110B;代表86DAA+ 1000011000

36、100111调整 + 01100110101011011 00010011进位1调整后结果:CF=1,AL=00010011(代表13)进位位与AL合成结果: 113(3) AAS功能:对未组合型BCD的减法结果进行调整。功能:对组合型BCD的减法结果进行调整。(4) DAS最后结果 AL = 00110110B(代表36),CF=0例:MOV AL, 01110011B (代表73)MOV BL, 00110111B (代表37)SUB AL, BL01110011 001101110011110000110110DAS相减调整 00000110(5) AAM功能:对未组合型BCD的乘法结果

37、进行调整。例:MOV AL, 00001000B (代表8)MOV BL, 00001001B (代表9)MUL BLAAM00001000 00001001AL= 01001000AH = 00000000最后结果 AH = 00000111B (代表7)对结果进行调整:AL/00001010B=00000111BAHAL%00001010B = 00000010BALAL = 00000010B (代表2)AH,AL中表示未组合型BCD码72。(6) AAD功能:对未组合型BCD码(在AX中)进行除法前的校正。例:MOV AX, 00000111 00000010B (代表72)AAD调整

38、前, AH = 00000111AL = 00000010调整后, AH = 00000000AL = 00000111B00001010B + 00000010B = 01001000B7D10D2D72D=48HAAD相当于将两个未组合型BCD码数合并为一个二进制数。三、逻辑运算和移位循环指令 逻辑指令在底层软件中提供了对二进制位的控制。可以对位进行置位、清0或取反。常用于控制系统的I/O设备。1. 逻辑运算指令(1) AND d, s功能:s 和 d 按位相 “与”,结果在 d 中。 AND指令通常用于使某些位清0,而另一些位保持不变。例:AND BX, 0F0FH若BX=5555H,则

39、执行后 BX=0505H 0101,0101,0101,0101B0000,1111,0000,1111B0000,0101,0000,0101BAND(2) OR d, s功能:s 和 d 按位相 “或”,结果送 d 。OR 操作经常用于将某些位置位,其它位不变。(3) XOR d, s功能:s 和 d 按位相 “异或”,结果送 d 。XOR 操作经常用于将某些位取反,其它位不变。 0101,0101,0101,0101B0000,1111,0000,1111B0101,1010,0101,1010BXOR例:(4) NOT d功能:将 d 按位求反后送回。(5) TEST d, s功能:s

40、 和 d 按位相 “与”,但不送结果,只根据结果设置标志位。(*)TEST 指令通常用于测试某些位是为0还是为1。2. 移位指令和循环移位指令(1) 算术移位a. 算术左移CF0101101010CF0011010101左移 1 次: SAL d, 1左移多次: SAL d, CL (CL中为移位次数)例:MOV BL, 10001001BSAL BL, 1结果: CF = 1,BL = 00010010B0CF注:移位多次时,移位次数必须预先置入CL中。右移 1 次: SAR d, 1右移多次: SAR d, CLb. 算术右移CF符号位(2) 逻辑移位a. 逻辑左移 SHL与SAL等价。b

41、. 逻辑右移 SHR d, 1 SHR d, CLCF0(3) 循环左移不带进位循环左移 ROL d, 1ROL d, CLCFb. 带进位循环左移 RCL d, 1RCL d, CLCF(4) 循环右移a. 不带进位循环右移 ROR d, 1ROR d, CLCFb. 带进位循环右移 RCR d, 1RCR d, CLCF例:设32位数在DX:AX中,实现32位数整个左移1次。SALAX,1RCLDX,10CFAXSALDXRCL四、串操作指令1. 串的概念串是连续存放在内存中的字节块或字块。每个串有一个起始地址和长度。2. 方向标志方向标志DF选择串操作期间寄存器 DI ,SI 的自增(D

42、F=0)或自减(DF=1)操作。起始地址A00HHGFEDCB串长=8字节块 (串)3. 串所在的段规定:(1) 源串在数据段,用SI作地址指针(2) 目的串在附加段,用DI作地址指针如果源串与目的串实质上在一个段中,则要令ES = DS。4. 串操作指令(1) MOVS d,s或写成 MOVSB (字节串传送) MOVSW (字串传送)功能:源串DS:SI 目的串ES:DI 同时自动修改SI,DI 重复前缀 (REP)可以加到串数据传送指令上。REP前缀使得每次执行串指令后CX减1。CX减1以后,重复执行串指令,直到CX值为0时,指令才终止。 REP 无条件重复直至CX1CX = 0 REP

43、E/REPZ 当ZF = 1且CX1CX0 则重复 REPNE/REPNZ 当ZF = 0且CX1CX0 则重复(2) 串比较 CMPS d, sCMPSB (字节串比较)CMPSW (字串比较)功能:作一次减法:DS:SI ES:DI 但不送结果,同时自动修改SI,DI串比较指令常常与有条件重复前缀配合。(3) 串搜索 SCAS dSCASB (字节串搜索)SCASW (字串搜索)功能:做一次减法 AL ES:DI (字节) AX ES:DI (字) 同时自动修改DI,但不回送结果,只 根据结果置有关标志位串搜索指令也常与有条件重复前缀相配合。(4) 装载串 LODS sLODSB (字节串

44、)LODSW (字串)功能:DS:SI AL或AX 同时自动修改SI(5) 存储串 STOS dSTOSB (字节串)STOSW (字串)功能:AL或AX ES:DI 同时自动修改DI例1. 设源串在1000H:2000H开始的100个字节单元中,要求将源串送到3000H:1020H开始的目的串中。MOV AX,1000HMOV DS,AX;置源数据段寄存器MOV SI,2000H;置源串指针初值MOV AX,3000HMOVES,AX;置目的附加段寄存器MOVDI,1020H;置目的串指针初值CLD;DF = 0,使SI,DI自增MOVCX,64H;置重复次数100DREP MOVSB;重复

45、串传送,直到CX = 0初始化例2. 比较两个串,发现有不同的字符时则停止比较。CLDMOV CX,100MOV SI,2500HMOVDI,1400HREPE CMPSB;串比较,直到ZF = 0或CX=0才停止。结果:若ZF=0,则两个串不相等; 若ZF=1,则两个串相等。五、程序控制指令程序控制指令用来控制程序的走向,其实质是设法改变当前的CS和IP值,以使CPU转移到一个新的地址处执行程序。A:Above 高于, B:Below 低于, C:Carry 进位, E:Equal 等于, G:Greater 大于, L:Less 小于, N:Not 无, O:Over 溢出 ,S:Sign

46、 符号, PE:Parity Even 奇偶性偶, PO:Parity Odd 奇偶性奇 8086提供了四种控制转移指令:无条件转移指令,条件转移指令,循环控制指令和中断指令。除中断指令外,其它转移类指令都不影响状态标志。注意指令中条件缩写字母的含意分别是:1. 无条件转移指令(1) JMP 目标 a. 段内直接转移 格式 JMP 目标标号 特点:仅仅改变IP值,而CS值不变。 例:JMP ADDI这里ADDI为转移目标的标号。指令中的位移量=标号偏移地址-当前IP值E9位移量(低)位移量(高)操作码EAIP(低)IP(高)CS(低)CS(高)转移指令JMP有三种编码格式操作码 EB 位移量例

47、:设标号偏移地址=1000H,执行完JMP指令后的当前IP值为0009H,则位移量=1000H0009H = 0FF7H编码格式 E9 F7 0F (代表JMP 1000H)b. 段内间接转移格式: JMP BX以BX的内容作为转移目标的偏移地址。CS值不变,IP值改变。c. 段间直接转移格式:JMP FAR_ADDR功能:转移到另一个代码段的目标FAR_ADDR处执行。即以另一个段的基地址CS,标号的偏移地址IP。当前CS=2100HJMP0C020065转移目标的偏移地址转移目标的段地址16 21000H代码段116 65000H新CS=6500H代码段2转移至此当前IP =1500H新I

48、P = 020CHd. 段间间接转移格式:JMP BX+位移量功能:以有效地址EA = BX +位移量作为开始地址,从前2个单元中取出内容IP,后2个单元中取出内容CS,以转移到新的地址执行程序。例:JMP BX+ADDR3设DS=2000H,BX=1400H,ADDR3=020AH,则执行过程如下:2000H30004000IPCS00300040EA=1400H+020AH执行跳转指令后,转移至4000H:3000H处执行程序。数据段(2) CALL 目标 (过程名)CALL指令完成调用子程序的功能。CALL指令完成的操作: 将程序的返回地址(CALL的下一条指令地址)压入堆栈中保存。 将

49、目标的偏移地址IP。若为远调用则再将目标的段地址CS。 转移至新的目标 (子程序)如果是近调用,则堆栈中只保存返回地址的偏移地址;若是远调用,则还必须保存返回地址的段地址。在子程序中 (过程),最后一条指令必须是返回指令RET,它将堆栈中保存的返回地址自动弹出至CS和IP。CALL指令段内调用段间调用直接调用间接调用直接调用间接调用(近调用)(远调用)(3) RET n返回指令。n为弹出值,它使SP值在正常返回之后的基础上再加上n (n为偶数)。这是为了丢弃原已压栈的一些参数。2. 条件转移指令 条件转移指令共有18条,这些指令根据状态标志决定是否转移,转移的目标范围在-128+127之间。条件转移指令的执行流程条件满足 ?顺序执行下一条指令目标处执行NY,转移 (1) 无符号数条件转移指令设执行了指令CMP AX,BX,其中AX,BX中均为无符号数(设AX=A,BX=B) ,则采用以下指令进行转移

温馨提示

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

评论

0/150

提交评论