指令与寻址方式习题解答1.试分别说明下列各指令中源操作数和目的操作数使用的寻址方式:(1)AND AX,0FFH(2)AND BL,[OFFH](3)MOV DS,AX(4)CMP [SI],CX(5)MOV DS:[0FFH],CL(6)SUB [BP][SI],AH(7)ADC AX,0ABH[BX](8)OR DX,-35[BX][DI](9)PUSH DS(10)CMC答:目的操作数源操作数(1)寄存器直接寻址立即数寻址(2)寄存器直接寻址直接寻址(3)寄存器直接寻址寄存器直接寻址(4)寄存器间接寻址寄存器直接寻址(5)直接寻址寄存器直接寻址(6)基址变址寻址寄存器直接寻址(7)寄存器直接寻址寄存器相对寻址(8)寄存器直接寻址基址变址相对寻址(9)无寄存器直接寻址(10)隐含寻址2.试分别指出下列各指令语句的语法是否有错,如有错,指明是什么错误。
(1)MOV [BX][BP],AX(2)TEST [BP],BL(3)ADD SI,ABH(4)AND DH,DL(5)CMP CL,1234H(6)SHR [BX][DI],3(7)NOT CX,AX(8)LEA DS,35[SI](9)INC CX,1(10)P USH 45[DI]答:(1)应将BP,BX其中之一该为SI或DI(2)正确(3)ABH改为0ABH(4)(5)是字操作,CL改为CX(6)移位数大于1时,应用CL(7)NOT指令只有一个操作数(8)LEA指令的源操作数应为一内存单元地址(9)此指令不用指出1(10)45改为45H3.下面两条指令执行后,标志寄存器中CF,AF,ZF,SF和OF分别是什么状态?MOV DL,86ADD DL,0AAH答: 0101,0110 + 1010,1010 = 1,0000,0000CF=1 AF=1 ZF=1 SF=1 OF=14.在8086/8088CPU中可用于作地址指针的寄存器有哪些?答:有BX,CX,DX,BP,SI,DI (IP,SP,)5.已知(DS)=09lDH,(SS)=1E4AH,(AX)=1234H,(BX)=0024H,(CX)=5678H,(BP)=0024H,(SI)=0012H,(DI)=0032H,(09226H)=00F6H,(09228H)=1E40H,(1E4F6H)=091DH。
下列各指令或程序段分别执行后的结果如何?(1)MOV CL,20H[BX][SI](2)MOV [BP][DI],CX(3)LEA BX,20H[BX][SI]MOV AX,2[BX](4)LDS SI,[BX][DI]MOV [SI],BX(5)XCHG CX,32H[BX]XCHG 20H[BX][SI],AX答(1) (CX)=56F6H;(2) (09226H)=5678H;(3) (AX)=1E40H;(4) (1E4F6H)=0024H;(5) (09226H)=1234H,(AX)=5678H.6.已知(SS)=09l 5H,(DS)=0930H,(SI)=0A0H,(DI)=1C0H,(BX)=80H,(BP)=470H。
现有一指令“MOV AX,OPRD”,如源操作数的物理地址为095C0H,试用四种不同寻址方式改写此指令(要求上述每个已知条件至少要使用一次)。
答:(1)MOV AX,[BP](2)MOV AX,[BP+DI+80H](3)MOV AX,[DI+0100H]MOV AX,[SI+0220H](4)MOV AX,[02C0H]7.试按下列要求分别编制程序段:(1)把标志寄存器中符号位SF置‘1’。
(2)寄存器AL中高低四位互换。
(3)由寄存器AX,BX组成一个32位带符号数(AX中存放高十六位),试求这个数的负数。
(4)现有三个字节存储单元A,B,C。
在不使用ADD和ADC指令的情况下,实现(A)+(B)=>C。
(5)用一条指令把CX中的整数转变为奇数(如原来已是奇数,则CX中数据不变,如原来是偶数,则(CX)+1形成奇数)。
答:(1)MOV AH, 80HSAHF(2 ) MOV BL, 0FHAND BL, ALSAL 4SHR 4XOR AL, BL(3 ) MOV DX, 7FHSUB AX, DXMOV DX, 0FFHSUB DX, BXMOV BX, DX(4 ) MOV AH, FFHMOV BL, [B]SUB AH, BLMOV BH, [A]SUB BH, AHMOV [C], BH(5 ) MOV AX, CXNOT AXTEST 01HJNZ NEXTHLTNEXT: INC CXHLT8.试给出下列各指令的机器目标代码:(1)MOV BL,12H[SI](2)MOV 12H[SI],BL(3)SAL DX,1(4)ADD 0ABH[BP][DI],1234H答: (1) 10001010,11011111=8ADF;(2) 10001000,01011100=885C;(3) 11010001,11100010=D1E2;(4) 10000001,10000001=8181.9.执行下列指令后:STR1 DW ‘AB’STR2 DB 16DUP(?)CNT EQU $-STR1MOV CX,CNTMOV AX,STR1HLT寄存器CL的值是多少?寄存器AX的值是多少?答:寄存器CL的值为12H,寄存器AX的值为4241H。
10.JMP FAR PTR ABCD(ABCD是符号地址)的转移方式是什么?答:JMP FAT PTR ABCD 的转移方式是段间直接转移.11.MOV AX,ES:[BX][SI]的源操作数的物理地址是多少(用CS、DS、ES、SS、BX、SI表示出即可)?答:MOV AX,ES:[BX] [SI]的源操作数的物理地址是[ES]×10H+[BX]+[SI].12.运算型指令的寻址和转移型指令的寻址,其不同点在什么地方?答:运算型指令的寻址包括立即数寻址。
寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址和基址加变址寻址方式。
这些寻址方式中,CS,IP寄存器的内容不会发生变化。
转移型指令的寻址方式包括段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址。
在后三种寻址方式中,CS,IP寄存器的内容发生改变。
13.如果TABLE为数据段中0032单元的符号名,其中存放的内容为1234H,当执行指令”MOV AX,TABLE”和”LEA AX,TABLE”后,(AX)中的内容分别为多少?答:执行MOV AX , TABLE后(AX)=1234H执行LEA AX, TABLE 后(AX)=0032.14.当指令”SUB AX,BX”执行后,CF=1,说明最高有效位发生了什么现象?对无符号数来说,操作结果发生了什么现象?答:执行指令SUB AX,BX后,CF=1,说明最高位发生了借位对无符号来说,操作结果发生了溢出。
15.在1000H单元中有一条二字节指令JMP SHORT LAB,如果其中的偏移量分别为30H、6CH、0B8H,则转向地址LAB的值分别为多少?答:转向地址LAB的值分别为:1000×10H+2H+30H=10032H1000×10H+2H+6CH=1006EH1000×10H+2H+B8H=100BAH16.下面两个语句的区别在什么地方:X1 EQU 1000HX2=1000H答:“EQU”和“=”都可以作为赋值语句,但二者的区别是EQU伪操作中的表达式是不许重复定义的,而“=”伪操作则许重复定义。
17.调用指令CALL可进行哪四种调用?答:调用指令CALL可进行段内直接调用,段内间接调用。
段间直接调用。
段间间接调用。
18.(AL)=9AH,(BL)=0BCH,当分别进行下列指令运算后,请写出标志位ZF、PF、CF、SF的内容:( P8050)(1)ADD AL,BL(2)SUB AL,BL(3)AND AL,BL(4)OR AL,BL(5)XOR AL,BL答:(1)ADD AL,BL1 0 0 1 1 0 1 0+)1 0 1 1 1 1 0 01,0 1 0 1 0 1 1 0 ∴ZF=0,PF=1 CF=1 SF=0(2)SUB AL,BL1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0—)1 0 1 1 1 1 0 0 —〉 +)0 1 0 0 0 1 0 01 1 0 1 1 1 1 0∴ ZF=0 PF=1 CF=1 SF=1(3)AND AL,BL1 0 0 1 1 0 1 0AND)1 0 1 1 1 1 0 0 ∴ ZF=0 PF=0 CF=0 SF=01 0 0 1 1 0 0 0(4)OR AL,BL1 0 0 1 1 0 1 0OR)1 0 1 1 1 1 0 0∴ ZF=0 PF=1 CF=0 SF=01 0 1 1 1 1 1 0(5)XOR AL,BL1 0 0 1 1 0 1 0XOR)1 0 1 1 1 1 0 0 ∴ ZF=0 PF=0 CF=0 SF=00 0 1 0 0 1 1 019.若(SP)=2800H,试用两种方法实现(SP)=27FEH.答:方法一:执行一次PUSH指令 PUSH CX方法二:执行一次PUSHF指令20.试简述LES REG,SRC所完成的操作?答:LES REG,SRC 是将SRC和SRC+1中的偏移量送到REG 寄存器,而将SRC+2和SRC+3中的段基址送ES段寄存器。
21.关系操作符EQ、NE、LT、GT、LE、GE计算的结果为逻辑值,试问0FFFFH代表假,0代表真是否正确?答:0FFFFH代表真。
0表示结果为假。
22.堆栈存取操作是以字节为单位的.试分析当堆栈存入数据和从堆栈取出数据时SP的变化?答:当堆栈存入一个字时,(SP)<—SP—2从堆栈中取出一个字时(SP)<—SP+223.试编写汇编程序段完成以下功能:将1000个字符的字符串从内存的BUFFER1搬移到内存的BUFFER2中去。
解答 LEA SI,BUFFER1LEA DI,BUFFER2MOV CX,1000CLDREP MOVSb24.试编写汇编程序段完成以下功能:将数据段中100个字的数据块BLOCK1搬移到同一个数据段的BLOCK2中去。
解答: LEA SI,BLOCK1LEA DI,BLOCK2MOV CX,100CLDREP MOVSW25.试编写汇编程序段完成以下功能:比较DEST和SOURCE中的500个字节,找出第一个不相同的字节,如果找到,则将SOURCE中的这个数送AL中。
解答: CLDLEA DI,DESTLEA SI,SOURCEMOV CX,500REPE CMPBJCXZ NEXTDEC SIMOV AL,BYTE PTR[SI]NEXT:HLT26.试编写汇编程序段完成以下功能:求最大值,若自BLOCK开始的内存缓冲区中,有100个带符号的数,希望找到其中最大的一个值,并将它放到MAX单元中。