发布时间 : 星期三 文章微机原理与接口技术复习题1-5(答案)更新完毕开始阅读5760f03367ec102de2bd8946
复习题1:
1、 指出下列指令的错误 (1)MOV AH,BX (2)MOV [BX],[SI] (3)MOV AX,[SI] [DI]
(4)MOV MYDAT [BX] [SI],ES:AX (5)MOV BYTE PTR [BX],1000 (6)MOV BX,OFFSET MYDAT[SI] (7)MOV CS,AX (8)SAL AL, 5
答案:
(1)MOV AH,BX 源操作数与目的操作数长度不相同
(2)MOV [BX],[SI] 这是两个内存单元在传递数据,而这在汇编语言中是不允许的。不允许两内存单元同时作为源操作数和目的操作数进行运算
(3)MOV AX,[SI] [DI] 不能用两个变址连用,其中一个应为基址BX或BP (4)MOV MYDAT [BX] [SI],ES:AX 同(2) (5) MOV BYTE PTR [BX],1000源操作数与目的操作数长度不相同,1000D=3E8H (6)MOV BX,OFFSET MYDAT [SI] OFFSET不能与复杂操作数相连 (7)MOV CS,AX ,不能对CS赋值 (8)MOV CL,5 SAL AL,CL
2、下面哪些指令是非法的?(假设OP1,OP2是已经用DB定义的变量) (1)CMP 15,BX (2)CMP OP1,25 (3)CMP OP1,OP2 (4)CMP AX,OP1 答案
(1)非法 (2)合法 (3)非法 (4)非法
3、假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么? (1)MOV BP,AL
(2)MOV WORD_OP [BX+4*3] [DI],SP (3)MOV WORD_OP1, WORD_OP2 (4)MOV AX, WORD_OP1 [DX] (5)MOV SAVE_WORD, DS
(6)MOV SP, SS:DATA_WORD [BX] [SI] (7)MOV AX, [WORD_OP1+WORD_OP2] (8)MOV AX, [WORD_OP1-WORD_OP2+100] (9)MOV [WORD_OP1], [WORD_OP1-WORD_OP2]
答案:
(1)非法,操作数类型不同。 (2)合法。
(3)非法,不允许两个内存单元直接传递数据。 (4)非法,DX不可以用作基址。 (5)合法。
(6)非法,SS不可以作段跨越前缀。 (7)合法。 (8)合法。
(9)非法,不允许两个内存单元直接传递数据。不允许两内存单元同时作为源操作数和目的操作数进行运算
4、假设VAR1和VAR2为字变量,LAB为标号,试指出下列指令的错误之处。 (1)ADD VAR1,VAR2 (2)SUB AL,VAR1 (3)JMP LAB [SI] (4)JNZ VAR1
(5)JMP NEAR LAB
答案:
(1)不允许两内存单元同时作为源操作数和目的操作数进行运算 (2)操作数类型不同
(3)跳转指令只能转到符号地址
(4)转移指令后不能为变量,只能为标号 (5)格式不对,应为 NEAR PTR。
补充题
5、指出下列指令中的错误,并改正。
(1) MOV BL, 30A0H (2) MOV 0010H, AL (3) XCHG AL, BX (4) MOV [AX], 3456H (5) PUSH AL (6) POP CS
(7) MOV DS, 1000H (8) MOV [BX], [1000H] (9) LDS (BX), [1000H] (10) LEA BX, CX 答:
(1)数据类型不一致,改为:MOV BX,30A0H
(2)0010H是个立即数,既不是一个内存单元的地址,也不是个寄存器 改为:MOV [0010H],AL
(3)数据类型不一致,改为:XCHG AX, BX
(4)这是寄存器间接寻址,只能使用基址变址寄存器。而且需要指定为字类型
改为:MOV WORD PTR [SI], 3456H
(5)PUSH指令是压入堆栈两个字节的操作。改为: PUSH AX (6)不能对CS进行直接修改, 改为:POP CX
(7)不能对段寄存器直接赋值,而只能通过累加器来赋值
改为: MOV AX, 1000H MOV DS, AX
(8)存储器的两个单元之间不能同时作为源操作数和目的操作数参与运算 改为:MOV AX, [1000H] MOV [BX], AX (9)没有()这种指令 改为:LDS BX, [1000H]
(10)源操作数必须是内存单元,寄存器不能给出地址 改为:LEA BX, [CX] = MOV BX,CX
复习题2
5、假设程序中的数值数据定义如下, DATA1 DW 25D3H
DATA2 DB 16 DUP(?) DATA3 DD 2A004455H DATA4 EQU $ - DATA1
试画出这些数值数据在内存中的存储示意图,并问DATA4的值是多少?它表示什么意义?
答案:
DATA1 D3H 25H DATA2 ? ∶ 16个 ? ∶ ? 55H DATA3 44H 00H 2AH $ ?
DATA4 的值为22,表示该数据段的长度.
注意:“$” 为地址计数器的值,用来保存当前正在汇编的指令的偏移地址。
6、有字符型数据定义语句如下 : K1 DB ?,?,?,‘123’ K2 DB ‘ABC’ L EQU K2 – K1
试画出这些字符数据在内存中的存储示意图,并问L的值是多少?它表示什么意义?
答案:
K1 K2 ? ? ? 31H 32H 33H 41H 42H 43H
L的值为6,即为K1数据区的长度。 注意:请考试时准备一个ASCII码表
7. 定义数据段如下,试画出数据存储示意图,并说明X1和X2所对应的逻辑地址各是多少?
DATA SEGMENT AT 10A0H ORG 0010H X1 DB 22, 33 ORG $+0020H X2 DB ‘AB12CD’ DATA ENDS
答: DATA 10A0H:0000H ∶ ∶ ∶ ∶ 22H X1 10A0H:0010H 33H ∶ 10A0H:0012H ∶ ∶ $ 41H X2 10A0H:0032H 42H 31H 32H 43H 44H
8.定义数据段如下,写出执行以下指令后的结果