微机原理 80x86指令系统
- 格式:pdf
- 大小:655.67 KB
- 文档页数:80
微机原理第4章练习题及答案第4章 80x86指令系统一、自测练习题㈠选择题 1.MOV AX,[BX+SI]的源操作数的物理地址是( )。
A.(DS)×16+(BX)+(SI) B. (ES)×16+(BX)+(SI) C.(SS)×10H+(BX)+(SI) D.(CS)×10H+(BX)+(SI)2.MOV AX,[BP+Sl]的源操作数的物理地址是( )。
A.(DS)×10H+(BP)+(SI) A. (ES)×16+(BP)+(SI) C.(SS)×16+(BP)+(SI) D.(CS)×10H+(BP)+(SI) 3.MOV AX,ES:[BX+SI]的源操作数的物理地址是( )。
A.(DS)×16+(BX)+SI) B.(ES)×10H+(BX)+(SI) C.(SS)×10H+(BX)+SI) D.(CS)×16+(BX)+(SI)4.JMP WORD PTR[DI]是( )。
A.段内间接转移B.段间间接转移C.段内直接转移D.段间直接转移5.JMP FAR PTR BlOCK(BLOCK是符号地址)是( )。
A.段内间接转移B.段间间接转移C..段内直接转移D.段间直接转移6.INC指令不影响( )标志。
A.OF B.CF C.SF D.ZF 7.条件转移指令JNE的测试条件是( )。
A.ZF=1 B.CF=0 C.ZF=0 D.CF=1 8.下列指令中,有语法错误的是( )。
A.MOV [SI],[DI] B.IN AL,DX C.JMP WORD PTR[BX+8] D.PUSH WORD PTR 20[BX+S1] 9.假定(SS)=2000H,(SP)=0100H,(AX)=2107H,执行指令PUSH AX后,存放数据21H的物理地址是。
A.20102H B.20101H C.200FEH D.200FFH 10.对于下列程序段:AGAIN:MOV AL,[SI] MOV ES:[DI],AL INC SI INC DI LOOP AGAIN 也可用指令完成同样的功能。
第4章 80x86指令系统一、自测练习题㈠选择题1.MOV AX,[BX+SI]的源操作数的物理地址是( )。
A.(DS)×16+(BX)+(SI) B. (ES)×16+(BX)+(SI)C.(SS)×10H+(BX)+(SI) D.(CS)×10H+(BX)+(SI) 2.MOV AX,[BP+Sl]的源操作数的物理地址是( )。
A.(DS)×10H+(BP)+(SI) A. (ES)×16+(BP)+(SI)C.(SS)×16+(BP)+(SI) D.(CS)×10H+(BP)+(SI) 3.MOV AX,ES:[BX+SI]的源操作数的物理地址是( )。
A.(DS)×16+(BX)+SI) B.(ES)×10H+(BX)+(SI)C.(SS)×10H+(BX)+SI) D.(CS)×16+(BX)+(SI)4.JMP WORD PTR[DI]是( )。
A.段内间接转移B.段间间接转移C.段内直接转移D.段间直接转移5.JMP FAR PTR BlOCK(BLOCK是符号地址)是( )。
A.段内间接转移B.段间间接转移C..段内直接转移D.段间直接转移6.INC指令不影响( )标志。
A.OF B.CF C.SF D.ZF7.条件转移指令JNE的测试条件是( )。
A.ZF=1 B.CF=0 C.ZF=0 D.CF=1 8.下列指令中,有语法错误的是( )。
A.MOV [SI],[DI] B.IN AL,DXC.JMP WORD PTR[BX+8] D.PUSH WORD PTR 20[BX+S1] 9.假定(SS)=2000H,(SP)=0100H,(AX)=2107H,执行指令PUSH AX后,存放数据21H的物理地址是()。
A.20102H B.20101H C.200FEH D.200FFH 10.对于下列程序段:AGAIN:MOV AL,[SI]MOV ES:[DI],ALINC SIINC DILOOP AGAIN也可用指令()完成同样的功能。
4.1.3 8086/8088指令系统8086/8088CPU指令系统包含有133条基本指令。
按其功能可以分为6类,它们是:⑴数据传送类指令⑵算术运算类指令⑶逻辑运算与位移类指令⑷字符串指令⑸控制转移类指令⑹处理器控制类指令。
一、数据传送类指令数据传送类指令时将数据、地址或立即数传送到寄存器或存储器单元中。
可完成寄存器与寄存器之间、寄存器与存储器之间、寄存器与I/O端口之间的字节或字传送。
它又可分为通用数据传送指令、输入/输出指令、目标地址传送指令和标志传送指令四组。
特点:除SAHF和POPF不影响标志寄存器内容。
(一)通用数据传送指令1. 最基本的传送指令指令格式及操作:MOV dst,src;(dst)←(src)将源操作数s指定的内容送到d目的操作数dst是目的操作数,它可以是存储器、通用寄存器(不能为IP)和段寄存器(不能为CS),不能为立即数。
Src是源操作数,它可以是存储器、通用寄存器、段寄存器和立即数。
MOVE指令需要注意的问题:①MOVE指令可传送8位数据,也可传送16位数据。
②MOVE指令中的两操作数s和d,必用1个寄存器,不允许同时为存储单元。
③不能用CS和IP做目的操作数。
④不允许段寄存器之间直接数据传送。
⑤不允许立即数做目的操作数。
⑥不能向段寄存器送立即数。
2.堆栈操作指令堆栈操作指令是用来完成压入和弹出堆栈操作的。
8086/8088指令系统中提供了完成这两种操作的相应指令。
⑴压入堆栈指令指令格式及操作:PUSH src;(SP) ←(SP)-2,((SP)+1:(SP)) ←(src) src源操作数可以是寄存器操作数和存储器操作数,且必须是16位的操作数,但不能是立即数。
⑵弹出堆栈指令指令格式及操作:POP dst; (dst) ←((SP)+1:(SP)),(SP) ←(SP)+2dst目的操作数可以是寄存器操作数和存储器操作数,且必须是16位的操作数,但不能是立即数。
特点:①s和d可以是16位寄存器或存储器两相邻单元;②堆栈按字操作;③每执行一条入栈指令,堆栈地址指针SP减2,入栈的数据位于栈顶;④高位字节先入栈,放在高位地址单元,低位字节后入栈,放在较低地址单元;先进先出原则;⑤执行弹出指令时,过程相反,栈顶指针的值加2;⑥CS段寄存器的值可以入栈,但不能反过来弹出一个字到CS3.交换指令将源操作数和目的操作数(字或字节)相互对应交换位置。
指令格式及操作:XCHG opr1, opr2;(opr1) ←→(opr2)4.字节转换指令通过查表来完成代码转换,用于实现字节翻译的功能。
指令格式及操作:XLAT src_table;(AL) ←((BX)+(AL))XLAT指令是用来将一种字节代码转换成另一种字节代码。
执行的结果放在AL中。
使用指令前:BX寄存器的内容指向表格首址;AL中存放待查的码,即某一项与表首地址的距离。
XLAT指令还可以有以下几种表示形式:XLAT;不写操作数XLATB;有B就不允许再写操作数。
XLAT ES:src_table;重设段寄存器为ESHex_table码,则可用以下几条指令实现:Hex_table+F46H6100FH(二) 输入/输出指令只能用累加器作为执行I/0数据传送的机构。
输入输出指令可以分为两大类:一类是直接端口地址的输入/输出指令:一类是通过DX寄存器间接端口地址的输入/输出指令。
⑴输入指令①直接寻址的输入指令寻址范围0-255(少于8位地址)指令格式及操作:IN acc, port;(acc) ←(port)②间接寻址的输入指令寻址范围0-65535(少于或超过8位地址)指令格式及操作:IN acc, DX;(acc) ←((DX))⑵输出指令①直接寻址的输出指令指令格式及操作:OUT port, acc; (port) ←(acc)②间接寻址的输出指令指令格式及操作:OUT DX, acc; ((DX)) ←(acc)(三)目标地址传送指令1. 取有效地址指令指令格式:LEA reg16, mem此指令的功能是将存放源操作数的16位偏移地址(即有效地址EA)送到一个16位的通用寄存器中。
即源操作数必须是一个存储器操作数,目的操作数必须是一个通用寄存器操作数。
例如:LEA BX, bufferLEA AX, [BP][DI]LEA DX, beta[BX][SI]注意LEA指令和MOV指令的异同。
不同:LEA BX, buffer;将存储器buffer的偏移地址送到BXMOV BX, buffer;将存储器buffer的内容传送到BX相同:LEA BX, bufferMOV BX, OFFSET buffer以上两条指令都是将存储器buffer的偏移地址送到BX。
其中OFFSET buffer表示存储器偏移地址。
LAHF和SAHF指令操作示意图3.标志压入堆栈指令将16位标志寄存器F的内容入栈保护。
指令格式及操作:PUSHF;(SP) ←(SP)-2,;((SP)+1;(SP)) ←(FLAG)4.标志弹出堆栈指令将当前栈顶和次栈顶中的数据弹出,送回标志寄存器当中。
指令格式及操作:POPF; (FLAG) ←((SP)+1;(SP)),;(SP) ←(SP)+2经常成对出现,用在子程序和中断处理程序的首尾,用来保护和恢复主程序涉及的标志寄存器的内容。
必要时可修改标志寄存器的内容。
二、算术运算指令8086/8088有丰富的算术运算指令,而且可以处理4种类型的数据,无符号/有符号、8/16位二进制数、无符号压缩型/非压缩型十进制。
根据运算结果影响标志位,有时要利用某些标志位才能得到正确的结果。
分成5小类:加法减法乘法除法十进制调整指令1.加法指令结果。
①功能:源操作数和目的操作数相加,结果送到目的操作数。
源操作数:通用寄存器、存储器、立即数目的操作数:通用寄存器、存储器提示:目的操作数不能为立即数,源操作数和目的操作数不能同时为存储器。
ADD dst, src(dst) ←(dst) +(src)②功能:源操作数和目的操作数相加外,再加上进位标志CF ,结果送到目的操作数。
CF 将从新根据结果置成新的状态,ADC 指令一般用于16位以上的多字节数相加。
ADC dst, src (dst) ←(dst) +(src)+1③功能:将目的操作数当作无符号数,加1后结果送到目的操作数。
目的操作数:通用寄存器、存储器,但不允许为立即数。
间接寻址的存储单元加1时,数据长度需用伪指令说明。
循环程序中,常用该指令对地址指针和循环计数值进行修改。
INC d d ←d +1例 4.3 计算两个多字节十六进制数之和:3B74AC60F8H+20D59E36C1H=?式中被加数和加数均有5个字节,可以编一个循环程序实现以上运算。
假设已将被加数和加数分别存入从DATA1和DATA2开始的两个内存区,且均为低位字节在前,高位字节在后,如图4.15所示。
要求相加所得结果仍存回以DATA1为首址的内存区。
程序流程图如图4.16所示。
程序如下:MOV CX,5;设置循环次数MOV SI,0 ;置位移量初值CLC ;清进位CFLOOPER:MOV AL,DATA2[SI];取一个加数ADC DATA1[SI],AL;和一个被加数相加INC SI ;位移量加1DEC CX ;循环次数减1JNZ LOOPER ;加完否,若没完,转LOOPER,继续相加HLT ;程序暂停开始如果两个对应的BCD数相加若得到的结果大于9或向高位有进位就需要使用BCD码的调整指令。
AAA指令(非压缩型BCD码加法调整指令)的操作为:如果(AL) ∧0FH>9 或(AF)=1(低4位>9或有进位)则(AL) ←(AL)+06H(AH) ←(AH)+1(AF) ←1(CF) ←(AF)(AL) ←((AL) ∧0FH)否则(AL) ←((AL) ∧0FH)DAA指令(压缩型BCD码加法调整指令)的操作为:如果(AL) ∧0FH>9, (AF)=1则(AL) ←(AL)+06H(AF) ←1如果(AL) > 9FH 或(CF)=1(高四位>9或有进位)则(AL) ←(AL)+60H(CF) ←1[例]要求计算两个至今指数之和,7+8=?。
可用以下指令实现:MOV AX, 0007H;(AL)=07H,(AH)=00HMOV BL, 08H;(BL)=08HADD AL, BL;(AL)=0FHAAA;(AL)=05H,(AH)=01H;(CF)=(AF)=1MOV AX, 0007H;(AL)=07H,(AH)=00HMOV BL, 08H;(BL)=08HADD AL, BL;(AL)=0FHDAA;(AL)=15H,(AH)=00H;(CF)=0,(AF)=12.DASBCD调整指令○×○○○○①功能:目的操作数减去源操作数,结果送到目的操作数。
源操作数:通用寄存器、存储器、立即数目的操作数:通用寄存器、存储器提示:目的操作数不能为立即数,源操作数和目的操作数不能同时为存储器。
不允许进行段寄存器减法。
SUB dst, src (dst) ←(dst) -(src)②功能:目的操作数减去源操作数外,再减去进位标志CF ,结果送到目的操作数。
CF 将从新根据结果置成新的状态,SBB 指令一般用于16位以上的多字节数相加。
SBB dst, src (dst) ←(dst) -(src)-1③功能:将目的操作数减1后结果送到目的操作数。
目的操作数:通用寄存器、存储器,但不允许为立即数。
间接寻址的存储单元加1时,数据长度需用伪指令说明。
循环程序中,常用该指令对地址指针和循环计数值进行修改。
DEC d d ←d -1④功能:将目的操作数取负后结果送到目的操作数。
目的操作数:通用寄存器、存储器,但不允许为立即数。
NEG d d ←0-d⑤功能:目的操作数减去源操作数,不送回结果,只根据运算结果置标志位。
源操作数:通用寄存器、存储器、立即数目的操作数:通用寄存器、存储器提示:目的操作数不能为立即数,源操作数和目的操作数不能同时为存储器。
不允许进行段寄存器比较。
CMP d, s d-s 只置标志位例4.4 内存数据段存放了200个带符号数,首地址为TAB1,要求将各数取绝对值后存入以TAB2为首址的内存区。
由于200个带符号数中可能既有正数,又有负数,因此先要判断正负。
如为正数,可以原封不动地传送到另一内存区;如为负数,则需先求补即可得到负数的绝对值,然后再传送。
程序如下:LEA SI,TAB1;(SI)←源地址指针LEA DI,TAB2 ;(DI)←目标地址指针MOV CX,200 ;(CX)←循环次数CHECK:MOV AL,[SI] ;取一个带符号数到ALOR AL,AL ;AL内容不变,只影响标志位JNS NEXT ;若(SF)=0,则转NEXTNEG AL ;否则求补NEXT:MOV [DI],AL ;传送到目标地址INC SI ;源地址加1INC DI ;目标地址加1DEC CX ;循环次数减1JNZ CHECK ;如不等于零,则转CHECKHLT ;停止AAS指令的操作为:如果(AL) ∧0FH>9 或(AF)=1则(AL) ←(AL)-06H(AH) ←(AH)-1(AF) ←1(CF) ←(AF)(AL) ←((AL) ∧0FH)否则(AL) ←((AL) ∧0FH) DAS指令的操作为:如果(AL) ∧0FH>9, (AF)=1则(AL) ←(AL)-06H(AF) ←1如果(AL) > 9FH 或(CF)=1则(AL) ←(AL)-60H(CF) ←13.乘法指令①功能:完成两个无符号的二进制数相乘。