下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 8086指令系统3.1 概述3.2 8086数据类型3.3 8086CPU寻址方式 3.3.1 立即数寻址 3.3.2 寄存器寻址 3.3.3 存储器寻址 3.3.4 I/O端口寻址3.4 8086CPU指令系统3.1 指令的构成 指令:由操作码和操作数构成操作码操作数或操作地址 操作码:指明计算机所要执行的操作类型,由助记符表示 操作数或操作数地址:指令运算的数据,可以是数值的地址,地址的计算方法等操作码操作数或操作地址无操作数:控制类指令单操作数:只给出一个操作数的地址,该操作数可以在寄存器或存储器中,或指令中直接给出立即数双操作数:源操作数,目的操作数,一个操作数在寄存器中,另一
2、个操作数在寄存器或存储器中或由指令直接给出。不允许两个都在存储器中。3.1 指令的构成立即数位移量寄存器方式操作码1-2字节低字节1-2字节1字节(寻址方式)1字节高字节高字节低字节r/m3位reg3位mod2位opcode8086 CPU指令格式3.1 8086指令的基本格式1、基本数据类型字节(Byte,8位)字(2字节,16位) 双字(4字节,32位)四字(8字节,64位,INTEL 80486后引入)双四字(16字节,128位,PIII后引入)3.2 基本数据类型2、基本数据类型在内存中的存储形式多字节数据的存放原则是低位字节在低端地址,高位字节在高端地址。而最低地址就是操作数的地址。
3、寻址根据指令内容确定操作数地址的过程,称为寻址。有效地址根据寻址方式计算所得到的地址叫做有效地址EA,也就是段内偏移地址。有效地址还需要与相应的段基地址组合才是20位的物理地址,该工作由CPU完成。寻址方式在两种方式下被涉及:操作数的寻址方式和对调用或转移指令的寻址方式。3.3 8086CPU的寻址方式计算机中操作数数按存放的方法分为:立即数(指令中)寄存器数存储器数I/O端口操作数寻址方式立即数立即数寻址寄存器数寄存器寻址基址变址寻址存储器数直接寻址寄存器间接寻址基址寻址变址寻址端口寻址直接寻址寄存器间接寻址3.3 8086CPU的寻址方式一、立即数寻址 操作数由指令直接提供。用于对寄存器赋
4、初值 例: MOV AL,80 H MOV AX,1090 H MOV CX,100 H数据指令3.3 8086CPU的寻址方式立即数寻址不需执行总线周期,执行速度快立即数只能是整数,不能是小数、变量或其他类型的数据立即数只能作为源操作数,不能作为目的操作数特点:二、寄存器寻址 操作数在CPU内部的寄存器中,指令给出寄存器名。不需使用总线周期,执行速度快 MOV AH,BL MOV AX,BX MOV CX,AX3.3 8086CPU的寻址方式寄存器寻址 可采用8个寄存器:AX,BX,CX,DX,BP,SP,SI,DI 源操作数和目的操作数均可采用寄存器寻址三、存储器寻址 操作数在存储器中,其
5、地址或地址的计算方法由指令提供。需要执行总线周期,速度较慢3.3 8086CPU的寻址方式存储器寻址(1)直接寻址(2)寄存器间接寻址(3)基址寻址(4)变址寻址(5)基址加变址寻址A1H70H10H.代码段(1)直接寻址 操作数在存储器中,其有效地址由指令直接提供例:MOV AX,1070 H DS = 2000 H,物理地址为: PA=20000H H=21070 H 20 H 30 H 数据段2000:10702000:10712000:1072AH ALAX3.3 8086CPU的寻址方式存储器寻址(2)寄存器间接寻址 操作数在存储器中,寻址方式同直接寻址相似,但偏移地址由指针寄存器提
6、供. 指针寄存器:基址寄存器:BP和BX 变址寄存器:SI和DI指令 寄存器 内存寄存器数据EA3.3 8086CPU的寻址方式存储器寻址BX SIBP DIEA=8 或 16 位移量+EA=8 或16 位移量BX BP SI DI +8086CPU,有效地址EA计算:3.3 8086CPU的寻址方式存储器寻址相对基址寻址相对变址寻址基址加变址寻址基址寻址变址寻址相对基址加变址寻址3.3 8086CPU的寻址方式存储器寻址寄存器间接寻址 若操作数有效地址在SI、DI、BX中,则以DS段寄存器内容为段值。若有效地址在BP中,则以SS段寄存器内容为段值。例:MOV AX,BX; 若DS=2000H
7、,BX=1000H,40 5B 数据段2000:10002000:10012000:1072AH ALAX寄存器相对寻址例1:MOV AL,BX+5; 若DS=6000H,BX=2000H,3.3 8086CPU的寻址方式存储器寻址例2:MOV AL,COUNTSI; MOV AL, COUNT+SI设DS=6000H,SI=1000H,COUNT=05H3.3 8086CPU的寻址方式存储器寻址 基址变址寻址方式例:MOV AX,BX+SI;BX=2000H,SI=0006H相对基址变址寻址方式例:MOV AH,BX+DI HI/O端口:独立编址,用专门的IN和OUT指令对I/O端口进行操作
8、。当端口地址小于等于255(FFH)时,直接寻址当端口地址大于255(FFH),只能用DX作为间接寻址3.3 8086CPU的寻址方式I/O端口寻址直接端口寻址:指令中直接给出端口地址 IN AL, 60H; 将60H中的数据送到AL中 IN AX, 80H; 将80H和81H中数据送到AX中 IN和OUT指令不支持立即数寻址寄存器的间接端口寻址:端口地址存在DX中 MOV DX, 333H; 将端口地址送入DX OUT DX, AL; 将AL中的数据输出到DX指定端口 MOV DX, 330H; 将端口地址送入DX IN AL, DX; 将DX所指端口中的数据送到AL3.3 8086CPU的
9、寻址方式I/O端口寻址串操作指令寻址源串操作数第一个字节/字的有效地址存放在源变址寄存器SI中目的串操作数的第一个字节/字有效地址存放在目的变址寄存器DI中重复串操作时,自动修改SI和DI的内容,指向后面的字节/字指令中,不必给出SI和DI的编码,故串操作指令是隐含寻址方式3.3 8086CPU的寻址方式其他寻址3.3 8086CPU的寻址方式转移指令寻址1、段内短转移直接寻址 转移地址的有效地址是当前IP寄存器内容和指令中指定的8位或16位偏移量之和。EA=IP+DISP8 JMP SHORT QUEST:偏移量为8位的短跳转 假设DISP补=D8H,指令存放在代码段的2198H地址单元的相
10、继两个单元中,则转移地址的有效地址是:EA=2198H+FFD8H=2170H 在计算EA时,IP是下一条指令的首地址;一字节偏移量必须符号扩展为16位才能和IP相加。 段内短转移的转移范围:-128+127 JMP NEAR PTR PROGRA:偏移量为16位的近跳转 近跳转是在64K内的转移。3.3 IA-32指令的寻址方式转移指令寻址1、段内近转移直接寻址 转移地址的有效地址是当前IP寄存器内容和指令中指定的8位或16位偏移量之和。EA=IP+DISP162、段内间接寻址 转移地址的有效地址是一个寄存器的内容或存储单元的内容。 段内近转移的转移范围:-32768 3.3 IA-32指令
11、的寻址方式转移指令寻址例1:JMP BX转移地址的有效地址为:EA=BX指令执行前,BX=2052H,IP=2100H指令执行后,BX=2052H,IP=2052H,程序转移到2052H处执行。例2:JMP TABLEBX转移地址的有效地址为:EA=TABLE+BX指令执行前,DS=3000H,BX=2150H,TABLE=2060H,IP=2100H;指令执行后,IP=(341B0H),程序转移到以341B0H字单元(隐含的字操作)的内容为偏移量的地方执行。3.3 IA-32指令的寻址方式转移指令寻址3、段间直接寻址4、段间间接寻址 JMP FAR PTR NEXTRONT JMP DWOR
12、D PTR INTERBX 它们都是将当前IP以下的双字作为新的CS和IP值。CS在高地址端,IP在低地址端。设 BX = 0158 H,DI = 10A5 H,DS = 2100 H,位移量 = 1B57 H,DS 作为操作数的段寄存器。寻址方式综合举例2)MOV AX,BX直接寻址:有效地址 = 1B57 H 物理地址 = 21000 H+1B57 H = 22B57 H1) MOV AX,1B57 H寄存器间接寻址:有效地址 = 0158 H 物理地址 = 21000 H + 0158 H = 21158 H3)MOV AX,BX+1B57HBX寄存器相对间接寻址: 有效地址 = 015
13、8 H + 1B57 H = 1CAF H 物理地址 = 21000 H + 1CAF H = 22CAF H寻址方式综合举例(续)4) MOV AX,DI变址寻址: 有效地址 = 105A H 物理地址 = 21000 H+105A H = 220A5 H5)MOV AX,DI+1B57HDI寄存器相对变址寻址: 有效地址 = 105A H + 1B57 H = 2BFC H 物理地址 = 21000 H + 2BFC H = 23BFC H6)MOV AX,BX + DI基址加变址寻址 : 有效地址 = 0158 H+105A H = 11FD H 物理地址 = 21000 H + 11F
14、D H = 221FD H寻址方式综合举例(续)7)MOV AX,BX + DI+1B57 H相对基址加变址寻址:有效地址 = 0158 H+105A H + 1B57 H = 2D54 H 物理地址 = 21000 H + 2D54 H = 23D54 H思考题 若SS=1000H,BP=2000H,DS=5000H, BX=4000H,说明下列指令的执行结果。 MOV AX,2C10H MOV AX,2C10H MOV AX,BX+1C00H MOV BX,BP H MOV AX,BP+ SI MOV AH,BX+SI3.3 IA-32指令的寻址方式相关约束 归纳起来,IA-32机器指令的
15、操作数可以定位在以下四处: 指令中; 寄存器中; 存储单元中; I/O端口。 在这些情况下,都有各自的约束和规定。3.3 IA-32指令的寻址方式相关约束1、所有算术指令(除了DIV和IDIV)都允许源操作数是立即数,但不许超过无符号双字整数(232);2、当源操作数是立即数时,目的操作数不可是段寄存器;3、若指令中指定的寄存器是BX、SI、DI,则操作数必在DS中;4、 若指令中指定的寄存器是BP,则操作数必在SS中;3.3 IA-32指令的寻址方式相关约束5、在 串操作中,隐含着源地址:DS:SI;目的地址ES:DI;6、堆栈的出、入操作必须引用SS段;7、操作数在存储单元中,需要指定是字
16、节还是字操作;8、存储器与存储器之间不能直接传输数据。3.4 8086CPU指令系统8086的指令系统可以分成6个功能组:(1)数据传送(Data transfer):4类(2)算术运算(Arithmetic):4种(3)逻辑运算和移位(Logic):4条(4)串操作(String manipulation):5条(5)控制传送(Control transfer):4种(6)处理器控制(Processor control) 5种8086系统中,包含133条基本指令,与不同的寻址方式相结合,可构成上千种指令Data : 立即数Src : 源操作数Dst : 目的操作数Port: I/O端口地址R
17、eg8/16 : 8位或16位通用寄存器Segreg : 段寄存器(mem): 存储单元的内容(port):端口的内容(reg):寄存器的内容(reg):寄存器间接寻址的存储单元的内容(mem):存储单元间接寻址的存储单元内容3.4 8086CPU指令系统3.4 8086CPU指令系统数据传送类指令共14条数据传送类指令可分四种:(1)通用传送指令(2)累加器专用数据传送指令(3)地址-目的数据传送指令(4)标志寄存器传送指令可完成寄存器与寄存器之间、寄存器与存储器之间、寄存器与I/O端口之间的字节或字的传送 特点: 除了SAHF和POPF,以上指令的执行大多不影响标志位。指令类型指令功能指令
18、书写格式通用数据传送字节或字传送字压入堆栈字弹出堆栈字节或字交换MOV d, sPUSH sPOP dXCHG d, s 累加器专用传送换码指令输入字节或字输出字节或字XLATIN 累加器,端口OUT 端口,累加器地址-目的数据传送指令装入有效地址装入DS寄存器装入ES寄存器LEA d, sLDS d, sLES d, s标志寄存器传送指令将FR低字节装入AH寄存器将AH内容装入FR低字节将FR内容压入堆栈从堆栈弹出FR内容LAHFSAHFPUSHFPOPF一、 通用数据传送指令MOV指令堆栈操作指令交换指令XCHG3.4 8086CPU指令系统数据传送类指令一、 通用数据传送指令1、MOV传
19、送指令 格式:MOV DST,SRC ;B/W 执行的操作:(DST) (SRC)注释: 其中,DST表示目的操作数,SRC表示源操作数。此指令把一个字节或一个字从源传送至目的地。 指令执行后,目的操作数与源操作数内容相同。3.4 8086CPU指令系统数据传送类指令一、 通用数据传送指令1、MOV 指令源和目的操作数寻址要求段寄存器CS DS SS ES存储器立即数通用寄存器AX BX CX DXBP SP SI DICS不作目的操作数3.4 8086CPU指令系统数据传送类指令注意事项源操作数和目的操作数的位数要相同立即数只能作为源操作数,不能作为目的操作数立即数不能直接传送到段寄存器,可
20、通过通用寄存器传送段寄存器之间不能直接传送数据两个内存单元之间不能直接传送数据CPU中的寄存器除IP外都可通过MOV指令访问CS只能作为源操作数,不能作为目的操作数3.4 8086CPU指令系统数据传送类指令一、 通用数据传送指令1、MOV 指令可归纳为9种形式1)从累加器到存储器MOV 1234H,AX如:DS=2000H,执行前后如图所示。DSALPHA279A2000021234212359A27AHALAX前MOV ARRAYBXSI,ALMOV ES:DATUM,AX3.4 8086CPU指令系统数据传送类指令一、 通用数据传送指令1、MOV 指令可归纳为9种形式2)从存储器到累加器
21、MOV AX,1234HMOV AL,BPMOV AH,ALPHABPDIMOV AX,ES:BXSI3.4 8086CPU指令系统数据传送类指令一、 通用数据传送指令1、MOV 指令可归纳为9种形式3)从存储器或寄存器送段寄存器MOV DS,DXMOV SS,NEWDIMOV ES,SS:BX注意:CS不作目的操作数!3.4 8086CPU指令系统数据传送类指令一、 通用数据传送指令1、MOV 指令可归纳为9种形式4)从段寄存器送存储器或寄存器MOV BX,ESMOV BETA,DSMOV ARRAYBXDI,SSMOV AX,CS3.4 8086CPU指令系统数据传送类指令一、 通用数据传
22、送指令1、MOV 指令可归纳为9种形式5)从寄存器送寄存器MOV AX,BXMOV CL,DHMOV BX,SIMOV DI,DX注意:两个寄存器之间传输数据必须宽度相同!MOV BL,DX3.4 8086CPU指令系统数据传送类指令一、 通用数据传送指令1、MOV 指令可归纳为9种形式6)从寄存器送存储器MOV MEMBYTE,DLMOV SI,DIMOV ES:BPSI,DX3.4 8086CPU指令系统数据传送类指令一、 通用数据传送指令1、MOV 指令可归纳为9种形式7)从存储器送寄存器MOV BL,MEMBYTEMOV SI,ALPHAMOV DX,ES:BXSIMOV CX,BX3
23、.4 8086CPU指令系统数据传送类指令一、 通用数据传送指令1、MOV 指令可归纳为9种形式8)立即数送寄存器MOV CH,8AHMOV DL,BMOV SI,COUNTMOV DX,2847MOV BX,OFFSET TABLE3.4 8086CPU指令系统数据传送类指令1、MOV 指令可归纳为9种形式9)立即数送存储器MOV BYTE PTR MEM,30HMOV WORD PTRBX,234BH注意:立即数送存储器时,必须说明存储器的操作类型。可以用BYTE PTR或WORD PTR说明是字节操作还是字操作。3.4 8086CPU指令系统数据传送类指令1、MOV 指令应用举例 用MO
24、V指令完成从内存单元A到内存单元B的100个数据的传输。MOV SI,OFFSET AMOV DI,OFFSET BMOV CX,100MOV AL,SIMOV DI,ALINC SIINC DIDEC CXJNZ LOPLOP:A DB 1,2,3,4,5,100B DB 100 DUP(?)3.4 8086CPU指令系统数据传送类指令2、堆栈操作指令 堆栈只有一个出入口; 堆栈具有“先进后出”的特性; 栈顶指针寄存器SP,在任何时候都指向当前的栈顶,即最近入栈的数据单元; 在开始,SP指向堆栈的最底部,即最高地址端。3.4 8086CPU指令系统数据传送类指令2、堆栈操作指令PUSH格式:
25、PUSH SRC ;W执行的操作:(SP-1)(SP-2) (SRC) SP SP-2注释: SRC不能是立即数外,允许其它任何寻址方式。SS4563栈顶SP781A栈底 堆栈可用于现场保护等操作。 3.4 8086CPU指令系统数据传送类指令C312 01006H 01007H 01008H 01009HSP(原栈顶)SP - 2(新栈顶)SP例:设SS=0100 H, SP=0009H,AX=12C3H, BX = 5070 H PUSH AX ;1 SP SP-2 2 0100801007H AX 01000009SSSP16-23.4 8086CPU指令系统数据传送类指令2、堆栈操作指
26、令POP格式:POP DST ;W执行的操作:(DST) (SP+1)(SP) SP SP+2SS4563栈顶SP781A栈底注释: DST不能是立即数和CS外,允许其它任何寻址方式。 堆栈操作不影响标志位。 3.4 8086CPU指令系统数据传送类指令 POP AX ;将栈顶两单元内容送AX ;SP SP+201000007SSSP16+2C312 01006H 01007H 01008H 01009HSP+2 (新栈顶)SP12C3AXSP(原栈顶)3.4 8086CPU指令系统数据传送类指令2、堆栈操作指令指令格式举例PUSH regPUSH memPUSH seregPOP regPO
27、P memPOP segreg ; 除CS外 POP SS 执行后,堆栈所在存储区的位置将改变; POP SP执行后,栈顶的位置要改变; 所以,一般无特殊要求不做这两项操作。3.4 8086CPU指令系统数据传送类指令在保存内容和恢复内容时,要按照相逆的次序执行一系列入栈和出栈操作。如:PUSH AXPUSH BXPUSH DIPOP DIPOP BXPOP AX3.4 8086CPU指令系统数据传送类指令3、交换指令 XCHG实现两个操作数互换,可在寄存器之间、寄存器与存储器间进行。格式: XCHG dst,src XCHG AX,BX XCHG AL,BH XCHG BX,1000H XC
28、HG 2100H,DH XCHG SI,AX 注意:、dst与src不能同时为内存单元; 、不能使用CS、IP作为操作数; 、不能在段寄存器之间交换数据。、XCHG指令不影响标志位3.4 8086CPU指令系统数据传送类指令3.4 8086CPU指令系统累加器专用传送指令二、 累加器专用传送指令IN指令OUT指令换码指令XLAT(1)只能使用AL/AX累加器作为操作数(2)不影响标志位1、IN 指令 数据输入指令,即将一个字节或一个字从输入端口传送到AL或AX寄存器。1)、直接寻址 IN AL,n IN AX,n 寻址空间为:0 255 字节 IN AL, 20H IN AX, 30H ;n是
29、端口号2)、间接寻址 IN AL,DX IN AX,DX 寻址空间为:0 FFFFH MOV DX,1000H IN AL,DX IN AX,DX 3.4 8086CPU指令系统累加器专用传送指令2、OUT 指令 数据输出指令,即将AL或AX寄存器中的一个字节或一个字传送到输出端口。OUT n,ALOUT n,AXOUT DX,ALOUT DX,AX 只能用累加器作为执行输入/输出过程的机构。 IN和OUT传送的是字节还是字可由寄存器决定。8253初始化:MOV AL,50HOUT 04H,ALMOV AL,80HOUT 05H,AL 3.4 8086CPU指令系统累加器专用传送指令3、XLA
30、T 指令 换码指令,在编译时经常需要把一种代码转换成另一种代码。称为查表指令 比如:把字符的扫描码转换成ASCII码、把数字0F转换成七段数管码所需要的相应代码等。 使用该指令前,应先建立一个表格,表格的首地址预先存入BX寄存器,而AL中的值作为查表的索引值,即:要转换的代码应该是相对于表格首地址的偏移量,它是8位无符号数,表格的长度最大只能是256个存储单元。 XLAT指令执行后,AL中的内容则是所要转换成的代码。3.4 8086CPU指令系统累加器专用传送指令格式: XLAT (无参数) ;3、XLAT 指令BX+0BX+1BX+2BX+AL+BX AL3.4 8086CPU指令系统累加器
31、专用传送指令(AL) (BX)+(AL) 十进制数 g f e d c b a 0 0 1 0 0 0 0 0 0 40H 1 0 1 1 1 1 0 0 1 79H 2 0 0 1 0 0 1 0 0 24H 3 0 0 1 1 0 0 0 0 30Haf g be cd分析:七段需七位二进制码表示一个数字,为0表示该段被点亮,为1表示该段熄灭,其部分编码如下: 十进制数字09转换成七段显示码的译码表,现在要取3的对应的七段译码。举例2000H407924301912027800102003HMOV AL,3MOV BX,2000HXLAT执行指令后: AL=30H数码管显示:af g be
32、 cd 十进制数字09转换成七段显示码的译码表,现在要取3的对应的七段译码。举例作 业 一1、设堆栈指针SP的初始值为1000H,AX=2000H,BX=3000H,试问:(1)执行指令PUSH AX后SP的值是多少?(2)再执行PUSH BX及POP AX后,SP、AX、BX的值各为多少?2、判断下列指令书写是否正确,说明理由?(1)XCHG CS,AX(2)MOV BX,1000(3)XCHG BX,IP(4)POP CS(5)IN BX,DX(6)MOV CS,2000作 业 二3、试用两种方法写出从80H端口读入信息的指令;再用两种方法写出从40H端口输出100H的指令。三、 地址-目
33、的数据传送指令LEA指令:有效地址送寄存器LDS指令:指针送寄存器和DSLES指令:指针送寄存器和ES3.4 8086指令系统地址-目的数据传送指令1、LEA(Load Effective Address)指令 格式:LEA REG,SRC 执行的操作:REG EAsrc 注释:该指令把源操作数SRC的有效地址送到指定的寄存器中。 SRC必须是各种寻址方式的存储器操作数; REG必须是16位的寄存器。 用途:用一个寄存器作内存单元的地址指针。3.4 8086指令系统地址-目的数据传送指令1、LEA(Load Effective Address)指令 LEA BX,TABLE 执行前,BX=50
34、8AH,TABLE 的EA=7865H; 执行后,BX=7865H,TABLE 的EA=7865H; 即:将符号TABLE的有效地址值7865H送入BX中。TABLE7865508ABHBLBX前7865BHBLBX后等效于 MOV BX,OFFSET TABLE3.4 8086指令系统地址-目的数据传送指令 LEA SP,BX 比较 MOV SP,BX 执行前,BX=1234H,DS=2000H; 执行后,SP1=1234H;SP2=5678H。1234SP1234BXDSBX7856200002123421235BX=1234HDS78562000021234212355678SPLEA
35、SP,BX的执行情况MOV SP,BX的执行情况3.4 8086指令系统地址-目的数据传送指令2、LDS(Load DS with pointer)指令 格式:LDS REG,SRC 执行的操作:REG (SRC),DS (SRC+2) 注释:该指令把源操作数SRC指出的前两个存储单元的内容送入REG中,后两个存储单元的内容送入DS中。 SRC表示双字(四个字节)的各种寻址方式的存储器操作数的首地址。 REG必须是16位的寄存器,但不能是段寄存器。3.4 8086指令系统地址-目的数据传送指令2、LDS(Load DS with pointer)指令 LDS SI,ADDRBX 执行前,DS=
36、2000H,BX=1000H,ADDR=0020H 操作数的物理地址:20000 =21020H 执行后,SI=1080H,DS=4000HDSADDRBX8010200002102021021004021022210234000DS1080SI3.4 8086指令系统地址-目的数据传送指令3、LES(Load ES with pointer)指令 格式:LES REG,SRC 执行的操作:REG (SRC),ES (SRC+2) 注释:该指令与LDS大致相同,不同之处是以ES代替DS。 通常:指定REG为DI寄存器。 例如:LES DI,BX3.4 8086指令系统地址-目的数据传送指令四、
37、 标志寄存器传送指令LAHF指令:标志位送AHSAHF指令:AH送标志寄存器PUSHF指令:标志进栈POPF指令:标志出栈3.4 8086指令系统标志寄存器传送指令1、LAHF(Load AH with Flags)标志位送AH 格式:LAHF 执行的操作:AH Flag/PSW的低位字节SF ZF AF PF CFD7 D6 D4 D2 D0FlagAH AH的相应位有效,其它位无意义。3.4 8086指令系统标志寄存器传送指令2、SAHF(Store AH into Flags) AH送标志寄存器 格式:SAHF 执行的操作: Flag/PSW的低位字节 AHSF ZF AF PF CFD
38、7 D6 D4 D2 D0FlagAH 该指令不影响OF、DF、IF、TF。3.4 8086指令系统标志寄存器传送指令3、PUSHF(Push the Flags) 标志进栈 格式:PUSHF 执行的操作: SP SP-1,(SP) Flag高8位 SP SP-1,(SP) Flag低8位4、POPF(Pop the Flags) 标志出栈 格式:POPF 执行的操作: Flag低8位 (SP),SPSP+1 Flag高8位 (SP),SPSP+13.4 8086指令系统标志寄存器传送指令 PUSHF和POPF一般用于子程序和中断处理程序的首尾,起到保存和恢复主程序中运行结果的标志的作用。 如
39、:8086中没有能直接改变TF值的指令,可用PUSHF和POPF共同实现。PUSHFPOP AXOR AH,01HPUSH AXPOPF 将TF设置为1的程序举例。3.4 8086指令系统标志寄存器传送指令 PUSHF和POPF必要时可用来修改标志寄存器的内容8086提供加减乘除四种算术运算指令:(1)加法指令:5条(2)减法指令:7条(3)乘法指令:3条(4)除法指令:3条 以上指令的执行大多都要影响相应标志位。3.4.2 算术运算指令3.4 8086指令系统算术运算指令3.4 8086指令系统加法指令一、 加法指令ADD指令:加法ADC指令:带进位加INC指令:自加1AAA指令:加法的非压
40、缩BCD码调整指令DAA指令:加法的压缩BCD码调整指令 格式:ADD DST,SRC ;B/W 执行的操作: (DST) (SRC+DST)1、ADD 加法指令例:(1). ADD AL,50H ; AL AL+50H (2). ADD CX,1000H ;CX CX H (3). ADD DI, SI ;DI DI+SI (4). ADD BX+DI,AX BX=1000H, DI=2000H, AX=1234H EA=BX+DI=3000H 3000H (DS:3001H,3000H) H 指令执行结果影响标志位AF、CF、OF、PF、SF、ZF。3.4 8086指令系统加法指令例:将存
41、储在数据段中,偏移地址为NUMB和NUMB+1连续单元的字节数据累加到AL。程序为:MOV DI, OFFSET NUMB ; 将NUMB的偏移地址 送到DI中MOV AL, 0 ; AL清零ADD AL, DI ; AL加上第一个数,存入AL中ADD AL, DI+1 ;AL累加上第二个数,存入AL中3.4 8086指令系统加法指令格式:ADC DST,SRC执行的操作:(DST) (DST+SRC+CF)例:有两个无符号双精度数(双字)相加。2、ADC 带进位加法指令执行前,DX=0002H,AX=F365H,BX=0005H,CX=E024H。双字加法指令序列为: ADD AX,CX 执
42、行后,AX=D389H,CF=SF=1,ZF=PF=OF=AF=0 ADC DX,BX执行后,DX=0008H,CF=SF=ZF=PF=OF=AF=0 此指令多用于16位以上的多字节加法运算中。3.4 8086指令系统加法指令例:有两个4字节无符号数放在2000H和3000H单元中,低位在前,高位在后,将两个数相加,结果放2000H开始的单元中。 10008432H F00H = ?2000H3000H32840010007F00201)、算法分析1).可以将两个4字节无符号数相加 看成2个字相加;2).两个数的低位字相加后,将可能 产生进位CF;3).高位字相加,应再加上进位位。3.4 80
43、86指令系统加法指令 2).程序 CLC ;清进位 MOV SI,2000H ;取第一个数的首地址 MOV AX,SI MOV DI,3000H ;取第二个字的首地址 ADD AX,DI ;第一个数和第二个数相加 MOV SI,AX ;送低16位结果到2000H单元 MOV AX,SI+2 ; 第二个数的高16位送AX ADC AX,DI+2 ; 高16位数据相加 MOV SI+2,AX 2000H3000H32840010007F0020SIDI3.4 8086指令系统加法指令格式:INC dst ; dst dst+1 dst可以是通用寄存器或存储器数操作:将操作数内容加一,再回送操作数。
44、 INC AX ;AX AX+1 INC BL ;BL BL+1 INC BYTE PTRBX+DI+500;存储器间接寻址时,需用伪指令说明数据的长度注意:INC指令影响标志AF、OF、PF、SF、ZF, 但不影响进位标志CF。3、INC 加一指令3.4 8086指令系统加法指令4、AAA 加法的非压缩BCD码调整0000000000000110B0000000000000111B0000000000001101B+0006H0007H000DH+06D07D13D+00000001 00000011BCD000000000000000100000001+AH0000110100000110
45、00010011+AL+6& 00001111AL00000011调整规则:若(AL& OF)9或AF=1,则: ALAL+6 ALAL&0FH AHAH+1 AF1 CFAFAAA跟在以AL为目的操作数的ADD或ADC指令之后,对AL进行非压缩BCD码调整3.4 8086指令系统加法指令5、DAA 加法的十进制调整指令-压缩BCD码调整00101000B01101000B10010000B+286896+ADD AL,BL (AL=28H,BL=68H)DAA调整规则:若(AL& OF)9或AF=1,则: ALAL+6 AF1 若AL9FH或CF=1,则: ALAL+60H CF110010
46、0000000011010010110+AL+63.4 8086指令系统加法指令注意: AAA和DAA两条指令在执行前必须先进行ADD或ADC指令,并将和放在AL寄存器中。调整后的结果也在AL中。 此两条指令常用于有键盘输入和需要结果显示的场合,以完成:十进制二进制十进制键盘输入运算结果显示转换调整3.4 8086指令系统加法指令例:将内存单元中的两个16位十进制数相加。DSBX1314222536562312FIRSTDSSI1110202131333015SECONDDS2424424667895327THIRDDI 数据均用的是压缩BCD码表示3.4 8086指令系统加法指令例:将内存单
47、元中的两个16位十进制数相加。 程序:LEA BX,FIRSTLEA SI,SECONDLEA DI,THIRDMOV CX,8CLCMOV AL,BXADC AL,SIDAAMOV DI,ALINC BXINC SIINC DIDEC CXJNZ LOPHLTLOP:3.4 8086指令系统加法指令二、 减法指令SUB指令:减法SBB指令:带借位减DEC指令:自减1NEG指令:取补码CMP指令:比较AAS指令:减法的非压缩BCD码调整指令DAS指令:减法的压缩BCD码调整指令3.4 8086指令系统减法指令1、SUB 减法指令格式: SUB DST,SRC执行的操作: DST DST-SRC
48、例: SUB BX,CX ;BXBX-CX SUB BP+2,CL ;BP+2 BP+2-CL SUB AL,20 ;AL AL-20 SUB SI,5010H ;SI SI-5010H SUB WORD PTR DI,1000H ;DI+1DI DI+1DI-1000H 3.4 8086指令系统减法指令格式: SBB DST,SRC执行的操作: DST DST SRCCF 例: SBB AX,2030H;执行:AX AX 2030H CF SBB WORD PTR DI+2,1000H; SBB DX, BX+20H 2、SBB 带借位减法指令 此指令多用于多字节减法运算中。3.4 8086
49、指令系统减法指令将操作数内容减一,再回送操作数。 格式: DEC DST执行的操作: DST DST 1 例: DEC AX ;AX-1,结果送AX DEC BL ;BL BL-1 DEC BYTE PTR DI+2 ;将DI+2所指的一个字节的内存单元减一3、DEC 自减指令 此操作不影响标志位CF。3.4 8086指令系统减法指令4、NEG 取补码指令格式: NEG DST 执行的操作: 对DST求补,0-DST例:NEG AL ;对AL中的数求补,结果送AL NEG CX ;对CX中的数求补,结果送CX因为此操作是用0去减操作数,故只有对0求补时,CF=0,其余情况都使CF=1。操作数是
50、-128(80H)或-32768(8000H)时,结果不变,但OF=1。3.4 8086指令系统减法指令格式: CMP DST,SRC执行的操作: DST-SRC注意: CMP指令执行相减,但不回送结果,结果只影响标志位CF、OF、SF、ZF。 5、CMP 比较指令3.4 8086指令系统减法指令指令例子:CMP AL,100 CMP AX,DATABX CMP DX,DI CMP DATA,1234H5、CMP 比较指令 两个无符号数比较大小 通过借位CF判断大小ZF=1:A=BZF=0:CF=0:AB CF=1:A0,BB;SF=1,则AB OF=1:SF=0,则AB若A0,则根据OF、S
51、F一起判断; OF=0:SF=0,则AB;SF=1,则AB OF=1:SF=0,则AB若A0,BB 如果OF SF=1,则A9或AF=1,则: ALAL-6 ALAL&0FH AHAH-1 AF1 CFAF7、DAS 减法的组合BCD码调整指令调整规则:若(AL& OF)9或AF=1,则: ALAL-6 AF1 若AL9FH或CF=1,则: ALAL-60H CF13.4 8086指令系统减法指令二、 加减法指令综合举例举例 设X,Y,Z都是双精度数,各自的低位字和高位字分别存放在X、X+2、Y、Y+2、Z、Z+2的存储单元中,编程计算以下算式:W=X+Y+24-Z3.4 8086指令系统减法
52、指令二、 加减法指令综合举例举例W=X+Y+24-ZMOV AX,XMOV DX,X+2ADD AX,YADC DX,Y+2ADD AX,24ADC DX,0SUB AX,Z SBB DX,Z+2MOV W,AXMOV W+2,DX3.4 8086指令系统算术运算指令MUL指令:无符号数乘法IMUL指令:带符号数乘法AAM指令:非组合十进制乘法调整三、 乘法指令3.4 8086指令系统乘法指令二进制乘法特点:两个8位数相乘,结果为16位数。两个16位数相乘,结果为32位数。8086乘法指令特点:一个乘数总是放在AL(8位)或AX(16位)中;将DX看成是AX的扩展。乘法分有符号乘法和无符号乘法
53、。3.4 8086指令系统乘法指令例:3的补码:0011,-2的补码 :1110 14的补码:1110 现有 0011 1110 看成是: 有符号数:3 (-2)= -6 ? 无符号数:3 14 = 42(2AH) ?1)对无符号数:直接相乘,结果正确。 0011(3) 1110(14) 0010 1010(2A) 3 14 = 42(2A),结果正确,-6错误!3.4 8086指令系统乘法指令2)有符号数相乘:负数复原为原码,并去掉符号位,相乘后,结果添上符号位,再取补码。 0011(3) 0010(2) 0000 0110(6) 结果添上负号,1 000 0110, 再取补码:1111 1
54、001+1=1111 1010=FAH= -6 3 (-2)= - 6,结果正确; 对于3 14,结果错误。3.4 8086指令系统乘法指令格式: MUL src ;AX ALsrc,字节 ;DX,AX AX src,字1、MUL 无符号数乘法指令MUL BL ;AX ALBLMUL CX ;DX、AX AX CXMUL BYTE PTR DI;AL与DI所指单元的8位数相乘,结 果送AX。MUL WORD PTR SI;AX与SI所指单元的16位数相乘,结 果低位送AX,高位送DX 。 3.4 8086指令系统乘法指令4902H403AH,结果送0510H0513H单元。 MOV AX,4902H MOV B
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 常压储罐管理制度
- 输液泵注射泵应急预案及程序
- 配电室操作管理制度培训课件
- 2025《陈涉世家》中陈胜吴广起义的历史必然性课件
- 2025《祝福》环境描写课件
- 2026年跨境电商交易纠纷合同协议
- 2026年广东生态工程职业学院单招职业倾向性测试题库及答案详解(历年真题)
- 2026年广西农业工程职业技术学院单招职业倾向性测试题库含答案详解(模拟题)
- 2026年广东省汕头市单招职业倾向性测试题库带答案详解(培优a卷)
- 2026年嵩山少林武术职业学院单招职业适应性考试题库含答案详解(精练)
- 2026年湖南安全技术职业学院单招综合素质考试题库及答案解析
- 第6课第1课时呵护花季激扬青春【中职专用】《心理健康与职业生涯》(高教版2023基础模块)
- 道路绿化养护投标方案(技术方案)
- 品牌策划与推广(第3版 数字教材版) 课件全套 人大 第1-9章 品牌的本质及其定位决策-营销活动策划与管理
- 爆破作业人员教育培训制度
- 辊道窑作业标准指导书
- GB/T 24421.1-2023服务业组织标准化工作指南第1部分:总则
- 井巷用全自动全液压凿岩台车设计书
- 蚕桑产业建设汇报材料(四)
- 借调人员协议-三方协议
- 2022版化学检验工高级工考核题库(全真题库)
评论
0/150
提交评论