资源描述
指令的基本概念和指令所包含的指令的基本概念和指令所包含的 基本内容。基本内容。8086 8086指令的格式及编码方式。指令的格式及编码方式。8086 8086指令的寻址方式及寻址过程。指令的寻址方式及寻址过程。8086 8086指令系统的分类、功能及操指令系统的分类、功能及操 作过程,每条指令的格式及用法。作过程,每条指令的格式及用法。掌握指令及指令系统的基本概念。掌握指令及指令系统的基本概念。掌握掌握8086各种寻址方式所执行的数各种寻址方式所执行的数 据寻址过程。据寻址过程。牢固地掌握存储器段地址:偏移地牢固地掌握存储器段地址:偏移地 址的组织结构和段约定的基本概念。址的组织结构和段约定的基本概念。掌握每条掌握每条8086指令的格式、功能及用法。指令的格式、功能及用法。掌握指令的操作过程中操作数的变化情掌握指令的操作过程中操作数的变化情 况以及对标志位的影响。况以及对标志位的影响。学会正确选用指令完成简单的任务。学会正确选用指令完成简单的任务。高高低低高高 字字低低 字字高高 双双 字字低低 双双 字字字节字节字字双字双字四字四字高高 四四 字字低低 四四 字字双四字双四字7 07 015 815 031 1631 063 3263 0127 64NNN+1NN+2NN+4NN+8图图3.1 基本数据类型的结构形式基本数据类型的结构形式基本数据类型及其存储基本数据类型及其存储存储规则:存储规则:高字节数据存放在地址号高的存储高字节数据存放在地址号高的存储单元中,低字节数据存放在地址号低的单元中,低字节数据存放在地址号低的存储单元中。存储单元中。例:例:从地址号为从地址号为N N的存储单元存放字的存储单元存放字、双字数据、双字数据96AFH96AFH、123F4CH123F4CHN+5N+5N+4N+4N+3N+3N+2N+2N+1N+1N N0AFH0AFH96H96H4CH4CH3FH3FH12H12H00H00H数据类型数据类型 7 6 0 15 14 0 3130 0 63 62 0字节符号整数字节符号整数字符号整数字符号整数四字符号整数四字符号整数双字符号整数双字符号整数(b b)7 0 15 0 31 0 63 0字节无符号整数字节无符号整数字无符号整数字无符号整数四字无符号整数四字无符号整数双字无符号整数双字无符号整数(a a)3130 0双精度浮点数双精度浮点数单精度浮点数单精度浮点数 63 62 0 6362 0 79 78 64双扩展精度浮点数双扩展精度浮点数(c c)图图3.23.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位)位)偏偏 移移NearNear指针指针31 031 0偏偏 移移段选择子段选择子FarFar指针或逻辑地址指针或逻辑地址31 031 047 3247 32(a a)(b b)指针数据类型(虚拟方式)指针数据类型(虚拟方式)3.1 3.1 概概 述述一、指令一、指令(Instruction):指令通常以二进制代码的形式提供给计算机,这种指令称为机器指令。例例:10001000 11011000就是一条2字节的机器指令,指示计算机执行:“把寄存器BL内容复制到寄存器AL之中”的操作。表示为:ALBL。指示计算机执行什么操作的命令命令。二、指令系统二、指令系统(Instruction System):三、程序三、程序(Program):完成某个特定任务而编制的一系列指令的有序有序集合。程序的执行一般是按指令的先后次序一条一程序的执行一般是按指令的先后次序一条一条执行,但遇到转移类指令时则可能改变指令的条执行,但遇到转移类指令时则可能改变指令的执行次序。执行次序。计算机所能执行的全部指令全部指令。四、指令包含的基本内容四、指令包含的基本内容1.1.做什么操作做什么操作由指令的操作码操作码字段规定。2.2.操作数的来源操作数的来源操作数来自于什么地方。由指令的操作操作数数字段规定。操作数的来源可以是:操作数的来源可以是:a.CPU内的某个寄存器寄存器;b.存储器内的某一个或几个单元单元;c.I/O端口端口;d.立即数。3.3.操作结果的去向操作结果的去向操作的结果结果将存放在何处。4.4.下一条指令的位置下一条指令的位置指示下一条指令是顺序顺序执行还是转移转移执行。五、指令的种类五、指令的种类1.1.数据处理指令数据处理指令2.2.数据传送指令数据传送指令3.3.程序处理指令程序处理指令4.4.状态管理指令状态管理指令六、指令的表示方法六、指令的表示方法1.二进制代码表示二进制代码表示机器语言指令机器语言指令2.助记符表示助记符表示汇编语言指令汇编语言指令例:10001000 11011000例:MOV BL,ALMOV表示“传送传送”助记符,BL(寄存器)表示结果存放的位置,AL(寄存器)表示数据的来源。助记符表示的指令便于书写、理解和记忆,但最终必须将助记符指令“翻译”成机器指令才能被识别和执行。这个过程叫“汇编”。助记符指令助记符指令机器指令机器指令汇编汇编 3.2 8086 CPU的寻址方式的寻址方式地址地址:数据和指令存放的位置。数据存放的位置可以是寄存器寄存器、存储器存储器或I/OI/O端口端口,指令存放的位置只能是存储器中的代码段代码段。寻址方式:寻址方式:寻找指令地址和操作数地址的方式。寻址过程:寻址过程:形成指令地址和操作数地址的过程。结果AHAL1.1.固定寻址固定寻址 (隐含寻址隐含寻址)操作数在某个固定的寄存器寄存器中。这个固定的寄存器大多为AL或AX。例例:AAA操作操作:对固定寄存器AL中的内容进行十进制调整,结果仍在AL中。(可能影响AH的内容)十进制调整十进制调整影响影响+1送回送回2.2.立即数寻址立即数寻址操作数作为立即数立即数就在指令中给出。例例:MOV AX,1234H操作操作:把立即数1234H送寄存器AX中。机器码:B8 34 12 (低字节在地址小的单元)AHALAX.B83412.5678代码段代码段(存储器中存储器中)操作码操作码(B8)操作数操作数(1234H)立即数立即数一条指令一条指令指令执行后,AX=1234H(原有的内容被新的内容替换)。1234MOV AX,1234H3.3.寄存器寻址寄存器寻址操作数在某个寄存器寄存器中。例例:INC BL操作操作:使BL中内容加1后送回+1BL00若BL=00H,则执行后BL=01HBL=FFH,则执行后BL=00H(自动溢出)014.4.存储器寻址存储器寻址操作数在存储器存储器中的一个或几个单元单元中。在这种寻址方式下,要找到该操作数,关键是必须找到该操作数所在单元的地址地址。由于8086采用存储器段组织结构,内存单元的地址由段起始地址段起始地址(基地址基地址)和该单元与段起始地址之间的距离距离(以字节数字节数计)两部分共同决定。段起始地址段起始地址(基地址):某个段寄存器的内容(又称段基值段基值)乘以16得到。段内偏移量段内偏移量:该单元与段起始地址之间的距距离离(字节数字节数)。又称有效地址EA。有效地址有效地址EA待寻址的内存单元待寻址的内存单元(CS,DS,ES,SS)16 段基地址段基地址物理地址物理地址=段基值段基值 16+EA内存单元物理地址内存单元物理地址8086规定,在执行某种操作时,采用的段寄存器有一个预先的约定约定。故指令中一般只需给出有关EA的信息,则CPU将能够根据该次操作自动自动选用段寄存器段寄存器,并与EA一起形成物理地址物理地址。存储器寻址的实质就是如何形成有效有效地址地址EA。(1)直接寻址方式直接寻址方式指令中以偏移量方式直接直接给出操作数的有效地址。即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直接寻址直接寻址:MOV 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=50A0HDS=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作为有效地址,在数据段数据段中找到某个操作数,再将该操作数与AX的内容相加,结果存放在AX中。c.基址变址寻址方式基址变址寻址方式既有基址寄存器(BX或BP),又有变址寄存器参与(SI或DI)寻址,操作数在基址基址寄存器所规定的段中。EA=BX或BP+SI或DI+8位或16位位移量基址变址寻址基址变址寻址 相对基址变址寻址相对基址变址寻址例例:MOV AX,0260H BX SIEA=BX+SI+0260H,操作数在数据段数据段中MOV AX,INF BP+DIEA=BP+DI+位移量INF,操作数在堆栈段堆栈段中 *以上两种基址以上两种基址+变址的格式都是合法的。变址的格式都是合法的。(3)串操作指令寻址串操作指令寻址这类指令规定这类指令规定:源串源串操作数在数据段数据段,且有效地址EA=SI目的串目的串操作数在附加段附加段,且有效地址EA=DI指令执行后,自动自动修改SI,DI的值,使之指向新的单元。8086的段约定的段约定8086在执行某种操作时,预先预先规定了采用的段寄存器和段,即有基本的段约定段约定。如果要改变默认的段约定,则需要在指令中明 确指出来。8086/8088的段约定的段约定存储器存取方式存储器存取方式基本段约定基本段约定 允许修改的段允许修改的段偏移地址偏移地址取指令取指令堆栈操作堆栈操作源串源串目的串目的串用用BP作基址寄存器作基址寄存器通用数据读写通用数据读写CSSSDSESSSDS无无无无ES,CS,SS无无CS,DS,ESCS,ES,SSIPSPSIDIEAEA(1)直接端口寻址直接端口寻址操作数在某个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,即采用间接寻址端口方式。前面所述的各种寻址方式实际上是数据数据寻址寻址方式,关键是如何找到操作数操作数。转移类指令寻址方式属于程序存储器寻程序存储器寻址址,关键是要找到下一条待执行指令的地址地址。(1)转移范围转移范围段内转移:转移范围在同一个段同一个段以内段间转移:从一个一个代码段转移至另一个另一个代码段(2)转移条件转移条件无条件转移有条件转移(转移范围仅为128+127)(3)转移方式转移方式直接转移(转移目标直接直接在指令中给出)间接转移(转移目标预先放入某个寄存寄存器器或存储器存储器中)寻址方式小结:寻址方式小结:固定寻址固定寻址:操作数固定在某个寄存器寄存器中寄存器寻址寄存器寻址:操作数在某个寄存器寄存器中立即数寻址立即数寻址:操作数就是操作码后跟的立即数立即数存储器寻址存储器寻址直接寻址间接寻址串操作寻址基址寻址变址寻址基址+变址寻址I/O端口寻址端口寻址直接端口寻址间接端口寻址转移类指令寻址转移类指令寻址课堂练习与思考:课堂练习与思考: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,数在附加段;含段超越的基址寻址,EA=BP,数在数据段课堂练习与思考:课堂练习与思考:2.MOV AX2.MOV AX,BX+SI+0080HBX+SI+0080H,即将,即将BXBX与与SISI中的内容与中的内容与0080H0080H相加作有效地址。相加作有效地址。3.3.设设BX=0123H DI=1000H DS=3200HBX=0123H DI=1000H DS=3200H,默认,默认DSDS作为操作为操作数对应的段寄存器作数对应的段寄存器(假定没使用段前缀假定没使用段前缀),试指出下,试指出下列指令的寻址方式,并写出其操作数的有效地址和物列指令的寻址方式,并写出其操作数的有效地址和物理地址。理地址。(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(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控制指令一、数据传送指令一、数据传送指令数据传送指令能够完成下列操作数的传送任务。立即数存储器段寄存器CS,DS,ES,SS通用寄存器组AX,BX,CX,DXBP,SP,SI,DI(CS不能作目的)(1)MOV d,s功能功能:将源操作数s复制到目标操作数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=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。DS1630000H123434H12HAXAH ALEA=1300HDATASIBXDATA31300H31301HMOV AX,DATA SI+BX(2)PUSH 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(压栈后压栈后)XX23 40BX注注:s和d只能为16位寄存器或存储器错误指令:PUSH 1234HPOP AL(3)XCHG d,s;交换源和目标操作数注注:d=通用寄存器s=通用寄存器或存储器例:XCHG AX,SI+400H执行后,5678H被送到内存单元AX=1234H3412SI+400H5678AH ALAX34127856(4)XLAT ;查表转换注注:a.表首相对于段起始地址的偏移量预先送入BX中;b.待查找的表内表内某单元相对于表首的偏移偏移量量送入AL中;c.以EA=BX+AL在表中(数据段)查找,将查得的数据再送回AL中。例例:设表首的偏移地址为2000H,要查找表内第4号单元(从0号算起)的内容并送回AL,则程序段如下:MOV BX,2000HMOV AL,04HXLAT设表中内容如下页图所示,则执行后,AL=09H 18H34H05H06H09H2000HBX04HAL(表首)TABLEDS1604AL09对于任一个存储器操作数,由段地址和偏移地址确定了它们在存储器中的位置。目标地址传送指令就用于获得存储器操作数的段地址或偏移地址。(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,10004H10007H单元内容依次为00H,30H,00H,20H,则执行后,DS=2000H,SI=3000H003000200004HSI=3000H原DS所指向的数据段新DS所指向的数据段1000H1610000HDSBASE30002000SIDS2000H1620000HDS(3)LES d,s功能功能:装入地址指针,段地址 ES,偏移地址d(1)LAHF功能功能:将标志寄存器低低8位位装入AH寄存器 SF ZFAFPFCFFR70AH(2)SAHF功能功能:把AH的内容送入标志寄存器的低低8位位。(3)PUSHF功能功能:把16位的标志寄存器压入堆栈堆栈保存,同时SP2SP。(4)POPF功能功能:将当前当前SP所指内容(2字节)弹出至标志寄存器标志寄存器,同时SP+2SP。功能:从指定端口输入数据至累加器acc(AL或AX),port=0255(1)IN acc,portAH ALacc端口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和BX寄存器进行表格查找,将8位数装入AL中。它完成的操作为:AL BX+AL,XLAT指令常用于查表操作,即BX寄存器含有表格的起始地址,而AL中的值是作进入表格中的偏移量,查出表格中的内容送入AL中。二、算术运算指令二、算术运算指令 算术运算指令的操作数可以是无符号数,算术运算指令的操作数可以是无符号数,也可以是有符号数。也可以是有符号数。算术运算指令一般影响标志位,而数据传算术运算指令一般影响标志位,而数据传送指令一般不影响标志位。送指令一般不影响标志位。(1)ADD d,s功能功能:将s与d相加,结果在d中。根据操作结果设置标志位标志位。例例:ADD BX+106BH,1234H设DS=2000H,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+F1HALADC AH,0 ;AH+0+CFAH最后结果:最后结果:AH=01H,AL=00H注注:若是立即数,且最高位为数码AF,则必须在前面添加一个0,以避免混淆。(重要)(3)INC d功能功能:将d加1后送回d。注注:INC指令不影响不影响进位标志CF。该指令经常用于修改地址指针寄存器(BX,BP,SI,DI),使之指向下一个单元。(1)SUB d,s功能功能:dsd,同时影响影响标志位。(2)SBB d,s功能功能:dsCFd,同时影响影响标志位。(3)DEC d功能功能:d1d该指令与INC相反操作,也不影不影响响进位标志CF。(4)NEG d功能功能:对d进行求补运算后送回(按位求反再加1)。例例:MOV AL,7FHNEG AL结果:结果:AL=7F按位求反按位求反+1=80H+1=81H(5)比较指令 CMP d,s功能功能:作一次减法运算ds,但不回送结果,只根据结果设置设置标志位。(*)比较指令往往用于判断两数是否相等,或两数大小关系。若相等,则零标志ZF=1。乘法指令在指令中只出现一个操作数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为高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=0110H(1)DIV s功能功能:无符号数相除a.字节除被除数=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为负数负数(D7=1)则 AH=FFHCWD:字除法的符号扩展指令功能功能:若AX为正数正数(D15=0)则 DX=0000H AX为负数负数(D15=1)则 DX=FFFFHCBW和CWD一般用于带符号数除法指令之前。运算器按二进制规律进行运算,如果参与运算器按二进制规律进行运算,如果参与运算的是运算的是BCDBCD码数,则需要对结果进行调整。码数,则需要对结果进行调整。100010010000100100001000组合组合的BCD码数未组合未组合的BCD码数899(低位)8(高位)代表89(1)AAA功能功能:对未组合型未组合型BCD码加法码加法的结果进行校正(调整)。校正(调整)方法:若AL中低4位数值 9 或 AF=1,则:a.AL+6 AL,且 AL 高4位清0b.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+1000011000100111调整调整+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的乘法乘法结果进行调整。例:例: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调整前调整前,AH=00000111AL=00000010调整后调整后,AH=00000000AL=00000111B00001010B+00000010B=01001000B7D10D2D72D=48HAAD相当于将两个未组合型BCD码数合并为一个二进制数。三、逻辑运算和移位循环指令三、逻辑运算和移位循环指令 逻辑指令在底层软件中提供了对二进制位的控制。可以对位进行置位、清0或取反。常用于控制系统的I/O设备。(1)AND d,s功能功能:s 和 d 按位按位相“与与”,结果在 d 中。AND指令通常用于使某些位清0,而另一些位保持不变。例例:AND BX,0F0FH若BX=5555H,则执行后 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 和 d 按位按位相“与与”,但不送结果但不送结果,只根据结果设置设置标志位。(*)TEST 指令通常用于测试某些位是为0还是为1。(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.逻辑右移 SHR d,1 SHR d,CLCF0(3)循环左移循环左移a.不带进位循环左移 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次。SAL AX,1RCL DX,10CFAXSALDXRCL四、串操作指令四、串操作指令串是连续存放在内存中的字节块或字块。每个串有一个起始地址和长度。方 向 标 志DF选择串操作期间寄存器 DI,SI 的自增(DF=0)或自减(DF=1)操作。起始地址A00HHGFEDCB串长=8字节块(串)规定:规定:(1)(1)源串在数据段,用源串在数据段,用SISI作地址指针作地址指针(2)(2)目的串在附加段,用目的串在附加段,用DIDI作地址指针作地址指针如果源串与目的串实质上在一个段中,则要令ES=DS。(1)MOVS d,s或写成 MOVSB (字节串传送)MOVSW (字串传送)功能功能:源串DS:SI 目的串ES:DI 同时自动修改SI,DI 重复前缀(REP)可以加到串数据传送指令上。REP前缀使得每次执行串指令后CX减1。CX减1以后,重复执行串指令,直到CX值为0时,指令才终止。REP 无条件无条件重复直至CX1CX=0 REPE/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 (字节串)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,3000HMOV ES,AX;置目的附加段寄存器MOV DI,1020H;置目的串指针初值CLD;DF=0,使SI,DI自增MOV CX,64H;置重复次数100DREP MOVSB;重复串传送,直到CX=0初始化例2.比较两个串,发现有不同的字符时则停止比较。CLDMOV CX,100MOV SI,2500HMOV DI,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 符号,符号,PE:Parity Even 奇偶性偶,奇偶性偶,PO:Parity Odd 奇偶性奇奇偶性奇 80868086提供了四种控制转移指令:无条件转移指令,条件转移提供了四种控制转移指令:无条件转移指令,条件转移指令,循环控制指令和中断指令。指令,循环控制指令和中断指令。除中断指令外,其它转移除中断指令外,其它转移类指令都不影响状态标志。类指令都不影响状态标志。注意指令中条件缩写字母的含意分别是:注意指令中条件缩写字母的含意分别是:(1)JMP 目标 a.段内段内直接直接转移 格式 JMP 目标标号 特点特点:仅仅改变IP值,而CS值不变。例:JMP ADDI这里ADDI为转移目标的标号。指令中的位移量=标号偏移地址-当前IP值E9位移量(低)位移量(高)操作码EAIP(低)IP(高)CS(低)CS(高)转移指令JMP有三种编码格式操作码 EB 位移量例:设标号偏移地址=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新新IP=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的下一条指令地址)压入堆栈堆栈中保存。将目标的偏移地址偏移地址IP。若为远调用则再将目标的段地址段地址CS。转移转移至新的目标(子程序)如果是近调用,则堆栈中只保存返回地址的偏移地址;若是远调用,则还必须保存返回地址的段地址。在子程序中在子程序中 (过程过程),最后一条指令必,最后一条指令必须是返回指令须是返回指令RETRET,它将堆栈中保存的返回,它将堆栈中保存的返回地址自动弹出至地址自动弹出至CSCS和和IPIP。CALL指令段内调用段间调用直接调用间接调用直接调用间接调用(近调用)(远调用)(3)RET n返回指令。返回指令。n n为弹出值,它使为弹出值,它使SPSP值在值在正常返回之后的基础上再加上正常返回之后的基础上再加上n(nn(n为偶为偶数数)。这是为了丢弃原已压栈的一些参数。这是为了丢弃原已压栈的一些参数。条件转移指令共有18条,这些指令根据状态标志决定是否转移,转移的目标范围在-128+127之间。条件转移指令的执行流程条件转移指令的执行流程条件满足?顺序执行下一条指令目标处执行NY,转移(1)无符号数条件转移指令设执行了指令CMP AX,BX,其中AX,BX中均为无符号数(设AX=A,BX=B),则采用以下指令进行转移:含 义指 令转 移 条 件A高于BA高于等于BA低于等于BA低于BJA/JNBEJAE/JNBJB/JNAEJBE/JNACF=0 AND ZF=0CF=0 OR ZF=1CF=1 AND ZF=0CF=1 OR ZF=1(2)有符号数条件转移指令设执行了指令CMP AX,BX,其中AX,BX中均为有符号数(设AX=A,BX=B),则采用以下指令进行转移:含 义指 令转 移 条 件ABABABABJG/JNLEJGE/JNLJL/JNGEJLE/JNGSF OF=0 AND ZF=0SF OF=0 OR ZF=1SF OF=1 AND ZF=0SF OF=1 OR ZF=1(3)单状态标志转移指令含 义指 令转 移 条 件等于/结果为0JE/JZJNE/JNZJCJNCZF=0ZF=1CF=0CF=1不等于/结果不为0有进位/有借位无进位/无借位溢出不溢出有偶数个“1”有奇数个“1”符号位为 1 符号位为 0 JOJNOJP/JPEJNP/JPOJSJNSOF=0OF=1PF=0PF=1SF=0SF=1以CX寄存器作为计数指针,每循环一次,CX减1,当CX减至0时,停止循环。(1)LOOP 目标标号功能功能:CX1 CX,若CX0则转移至目标,否则顺序执行下一条指令。循环前CX必须赋初值(循环次数)(2)LOOPE/LOOPZ 目标标号功能功能:CX1CX,若CX0且且ZF=1则转移至目标,否则停止循环(CX=0或ZF=0)。(3)LOOPNE/LOOPNZ 目标标号目标标号功能功能:CX1CX,若CX0且ZF=0则转移至目标,否则停止循环(CX=0或ZF=1)。(4)JCXZ 目标标号目标标号功能功能:若CX=0则转移至目标地址,否则顺序执行下一条指令。(1)中断入口地址表中断入口地址表8086系统允许有256种中断类型(0255),各种类型的中断在中断入口地址表中占4个字节,前2个字节用于存放中断入口地址的偏移地址,后2个字节用来存放中断入口地址的段基址。偏移地址段基址偏移地址段基址00000H00004H00008H003FCH003FFH0#1#2#255#(2)中断的响应过程中断的响应过程a.标志寄存器FR压栈压栈;b.使IF=0,TF=0;c.将当前程序断点断点的基址和偏移地址入栈保护(以便能够正确返回);d.将中断类型号中断类型号4,得到中断入口地址在中断入口地址表的位置,从该位置起连续的4个单元中获得中断入口地址置入CS,IP;e.CPU转向中断服务程序中断服务程序执行相关程序。(3)中断指令中断指令a.INT n功能功能:执行软件中断,中断类型号为n,n=0255。b.INTO功能功能:等价于INT 4,当运算结果产生溢出(OF=1)时,产生溢出中断。c.IRET 功能功能:中断返回。执行的操作:从堆栈中弹出断点地址送从堆栈中弹出断点地址送CS和和IP;恢复标志寄存器的内容;恢复标志寄存器的内容;CPU回到被打断的地址处继续执行主程序。回到被打断的地址处继续执行主程序。六、处理器控制指令六、处理器控制指令(2)CLD;使DF=0 (用于串操作之中)STD;使DF=1(3)CLI;使IF=0 (禁止可屏蔽中断)STI;使IF=1 (允许可屏蔽中断)(1)CLC;使CF=0 STC;使CF=1 CMC;使CF=CF(非)(1)ESC 外部操作码,源操作数交权指令,可以要求另外的处理器执行某种操作。等待指令,使处理器处于空转等待状态。(2)WAIT(3)LOCK锁定命令,锁定总线,使引脚LOCK变成逻辑0。(4)HLT处理器暂停命令,有四种四种状态可以使处理器脱离暂停:a.RESET 信号有效信号有效b.NMI 有效有效c.INTR 有效有效(且且IF=1)d.DMA 操作操作(5)NOP 空操作指令空操作指令CPU执行此指令时,不做任何具体的操作,但它消耗3个时钟周期个时钟周期的时间,它常用于程序运行中的短延时需求等。
展开阅读全文