微机原理与接口技术第四章课后习题1.指令主要有哪些分类方式?其主要类别是什么?答:操作数、级别、功能。操作数:无操作数、单操作数、双操作数三操作数;级别:机器指令和汇编指令功能:传送类、算术运算类、位操作类、I/O类、串操作类、CPU控制类、转移类;2.80X86的寻址方式有哪些?它们的具体含义是什么?答:操作数寻址方式主要有立即寻址方式、寄存器寻地址、存储器寻址方式、端口寻址方式(1)立即寻址方式:操作对象是这个操作数本身(2)寄存器寻地址:操作对象是寄存器中的内容(3)存储器寻址方式:操作对象是内存地址所对应的存储单元中的内容(4)端口寻址方式:操作数是指明端口的地址、端口地址所对应的端口中的内容是操作对象3.指出下列各指令中源操作数和目的操作数的寻址方式:⑴MOVBX,WORDPTR[2200H]⑵AAA⑶JUM2200H⑷LESDI,[2100H]⑸MOV[BX+SI+8],BX⑹ADDAX,[BP+3000H]答:⑴MOVBX,WORDPTR[2200H]源操作数:直接寻址;目的操作数:寄存器寻址⑵AAA源操作数:寄存器寻址AL(也称隐含寻址);目的操作数:寄存器寻址⑶JUM2200H程序转移段内直接寻址方式⑷LESDI,[2100H]源操作数:直接寻址;目的操作数:寄存器寻址⑸MOV[BX+SI+8],BX源操作数:寄存器寻址;目的操作数:相对基址变址寻址⑹ADDAX,[BP+3000H]源操作数:直接寻址;目的操作数:寄存器相对寻址4.设CS=1000H,DS=2000H,ES=3000H,SS=4000H,IP=100H,SP=200H,BX=300H,BP=400H,SI=500H,则:(1)10202H(2)40300H(3)21010H(4)42156H(5)31510H5.写出清除AX寄存器内容的方法并比较。MOVAX,0XORAX,AX异或指令执行速度最快6.若AX=0ABCDH,BX=7F8FH,CF=1。求分别执行8086CPU指令后,AX寄存器中的内容,并指出标志寄存器SF,ZF,AF,PF,CF及OF的状态。⑴ADDAX,BX⑵ADCAX,BX⑶SBBAX,BX⑷NEGAX⑸ANDAX,BX⑹ORAX,BX⑺XORAX,BX⑻IMULBL答:⑴AX=2B5CH,SZAPCO=001110B⑵AX=2B5DH,SZAPCO=001010B⑶AX=2C3DH,SZAPCO=001001B⑷AX=5433H,SZAPCO=001110B⑸AX=2B8DH,SZAPCO=00X100B⑹AX=FFCFH,SZAPCO=10X100B⑺AX=D442H,SZAPCO=10X100B⑻AX=3283H,SZAPCO=XXXX11B7.若AL=78H,BL=87H⑴求执行指令ADDAL,BL与DAA后,AL=?、标志AF=?、CF=?⑵若执行指令SUBAL,BL与DAS后,AL=?、标志AF=?、CF=?答:⑴AL=65H,AF=1,CF=1。⑵AL=91H,AF=0,CF=1。8.指出下列指令中哪些是错误的,并指出错在何处?⑴MOVDL,[DX]⑵MOVES,2000H⑶SUB[BX],[SI]⑷ADDAX,[BX+CX]⑸XCHGDS,[2400H]⑹DEC15H⑺INAL,DX⑻OUT300H,AX答:⑴错,DX不能作为间接寻址的寄存器。⑵错,立即数不能直接送给段寄存器。⑶错,两个存储单元间内容不能直接相减。⑷错,CX寄存器不能作为变址寄存器。⑸错,不允许段寄存器与存储单元内容进行交换。⑹错,减1指令不能对段寄存器直接操作。⑺对。⑻错,输出指令的地址若是16位,必须用DX间址。9.下列程序段执行后AX=?设数据段有:TABLEDW100,200,300,400ENTRYDW3代码段对DS初始化MOVBX,OFFSETTABLEMOVSI,ENTRYMOVAX,[BX+SI]执行后AX=2C0010.将AL中的8位二进制数按倒序方式重新排列,即AL原来为D7D6…D0,倒序后AL=D0D1…D7。答:MOVCX,8L:SHLAL,1RCRBL,1LOOPLMOVAL,BL11.若起始地址偏移量为2000H的内存单元存放有100个ASCII码字符,现给这些字符添加奇偶校验位(bit7),使每个字符中“1”的个数为偶数,在顺序输出到地址为100H的端口。答:MOVSI,2000HMOVCX,100MOVDX,100HNEXT2:MOVAL,[SI]ANDAL,0FFHJPENEXT1ORAL,80HNEXT1:OUTDX,ALINCSILOOPNEXT2MOVAH,4CHINT21H12.若SS=1000H,SP=2000H,AX=1234H,BX=5678H,FR=2115,试说明执行指令PUSHAXPUSHBXPUSHFPOPCXPOPDX之后,SP=?SS=?CX=?DX=?并画图指出堆栈中各单元的内容。答:SS=1000HSP=1FFEHCX=2115HDX=5678H栈中各单元内容如下所示:13.分别写出实现下列功能的程序段:(1)将AX中间8位,BX低四位,DX高四位拼成一个新字的程序段是:ANDDX,0F000HANDAX,0FF0HANDBX,0FHSHLAX,4SHLBX,4ROLDX,4ADDAX,BXADDAX,DX(2)对数据段中以BX为偏移地址的连续三单元中的无符号数求和。地址RAM11FFAH211511FFCH567811FFEH123412000HMOVAL,[BX]MOVAH,0ADDAL,[BX+1]ADCAH,0ADDAL,2[BX]ADCAH,0(3)将数据段中以BX为偏移地址的连续四单元的内容颠倒过来。MOVAX,[BX]XCHGAH,2[BX]XCHGAL,3[BX]MOV[BX],AX(4)将BX中的四位BCD数用非压缩BCD数按序放在AH、AL、CH和CL中。MOVDX,BXMOVCL,4SHRBX,CLANDBL,0FHANDDX,0F0FHMOVAH,BHMOVCH,BLMOVAL,DHMOVCL,DL14.在不改变AL中数值的情况下,检测AL中1的个数,将结果放在BL中。XORBX,BXMOVDL,ALMOVCX,8CIRCLE:TESTDL,01HJNPZEROADDBL,01HZERO:SHRDL,01HLOOPCIRCLE15.程序分析。(1)AX=05CFH(2)CF=0,AL=B9H(3)SF⊕OF=1,CF=016.程序语句填空。(1)下列是完成1~20之间的奇数累加和存于AL中的程序段:XORAL,ALMOVCX,10MOVBL,1AGAIN:ADDAL,BLADDBL,2LOOPAGAIN(2)下列是在串长为N的串STR中查找是否有’T’字符的程序段:MOVDl,SEGSTRMOVES,DILEADl,STRCLDMOVCX,NMOVAL,’T’REPNESCASBJZFOUND(3)下列是完成1位十六进制数X显示的程序段:MOVDL,XANDDL,0FHADDDL,30HCMPAL,’9’JBENEXTADDDL,7NEXT:MOVAH,02HINT21H17.假定AX和BX中的内容为带符号数,CX和DX的内容为无符号数,请用比较指令和转移指令实现以下条件转移:(1)若CX的内容超过DX的内容,则转到L1。CMPCX,DXJAL1(2)若BX的内容大于AX的内容,则转到L2。CMPBX,AXJGL2(3)判断BX与AX相比较是否产生溢出,若溢出则转到L3。CMPBX,AXJOL3(4)若BX的内容小于等于AX的内容,则转到L4。CMPBX,AXJLEL4@张宏宇