微机原理与接口技术试题库(含答案)汇总 下载本文

(6)MOV BX, OFFSET [SI+200H] 错,OFFSET运算应在汇编时完成,但[SI+200H]在执行指令时才可获得。应改为: LEA BX,[SI+200H] (7)MOV OP2,[BX] 错,源操作数和目的操作数均为内存单元,不允许。

应改为: MOV AL, [BX]

MOV OP2, AL

(8)CMP HIGH W_OP3, 25错,目的操作数中使用HIGH来分离存储器操作数,这是不允许

的。应改为: CMP BYTE PTR W_OP3+1,25 (9)CMP OP1, OP2错,源操作数和目的操作数均为内存单元,不允许。

应改为: MOV AL, OP2 CMP AL, OP1

(10)CMP AX, OP2错,源操作数为字节类型,目的操作数为字类型,二者不一致。

应改为: CMP AX, WORD PTR OP2 (11)MOV W_OP3[BX+4*3][DI], SP正确。

(12)ADD W_OP3, W_OP4错,源操作数和目的操作数均为内存单元,不允许。

应改为: MOV AX, W_OP4 ADD W_OP3, AX

(13)MOV AX, W_OP3[DX] 错,不能用DX寄存器间接寻址。

应改为: MOV BX, DX MOV AX, W_OP3[BX]

(14)MOV OP1, LOW DS错,源操作数中使用LOW来分离寄存器操作数,这是不允许的。

应改为: MOV WORD PTR OP1,DS

(15)MOV SP, OP2[BX][SI] 错,源操作数为字节类型,目的操作数为字类型,二者不一致。

应改为:MOV SP, WORD PTR OP2[BX][SI] (16)MOV AX, W_OP3+W_OP4错,两个标识符相加无意义。应改为: MOV AX, W_OP1

ADD AX, W_OP2

21

(17)MOV AX,W_OP3-W_OP4+100正确,源操作数为两个标识符(地址)相减再加一数,

汇编时得到一个数。 (18)SUB AL, W_OP3+7错,两个操作数类型不一致。应改为: SUB AL, BYTE PTR W_OP3+7

(19)MOV AX,BX SHL 2错,SHL只能对常量进行运算,左边不能使用寄存器

(20)MOV BX,W_OP3 AND 8FD7H错,AND只能对常量进行运算,左边不能使用变量

4.设已定义数据段 DATA SEGMENT ??

VAR2 DW 10H,7889H ??

VAR5 DB 20H,0

ADRR DW VAR2,VAR5 DATA ENDS

为使ADRR字存储单元中存放内容为“0010H”,ADRR+2字存储单元中存放内容为“0020H”,上述省略号位置应分别填写一条什么语句?说明理由。

答:为使ADRR字存储单元中存放内容为“0010H”,ADRR+2字存储单元中

存放内容为“0020H”,上述省略号位置应分别填写ORG 10H 和 ORG 20H, 或者分别填写语句

VAR1 DB 10H DUP(?) 和 VAR3 6 DUP(?)

5.下面的数据段中,有数据为‘4100H’的字存储单元有几个?它们的偏移量分别是多少? DATA SEGMENT DA1 DB 0 ORG 41H

DA2 DB 0,‘A’,41H,0,41H ADR DW DA1,DA2

DATA ENDS 答:给出的数据段中,有数据‘4100H’的字存储单元有3个,它们的偏移量分别是41H、 44H、47H。

7.试用数据定义语句DB或DW改写下述两语句中的某一个,使它们在存储器中有完全相同的存储情况。 VAR1 DB ‘abcdefghij’

VAR2 DW 6162H,6364H,6566H,6768H,696AH 答:将第一个伪指令语句改写为VAR1 DW ‘ab’,‘cd’,‘ef’,‘gh’,‘ij’,第二个伪指令语句不变。或第一个伪指令语句不变,而将第二个伪指令语句改写为:

22

VAR2 DB 61H,62H,63H,64H,65H,66H,67H,68H,69H,6AH 9.按下面的要求写出程序的框架

(1)数据段的位置从0E000H开始,数据段中定义一个100字节的数组,其类型属性既是字又是字节;

(2)堆栈段从小段开始,段组名(类别名)为STACK;

(3)代码段中指定段寄存器,指定主程序从1000H开始,给有关段寄存器赋值;

(4)程序结束。 答:所求程序框架为: Data SEGMENT AT 0E000H Arr_w LABEL WORD Arr_b DB 100 DUP(?) Data ENDS

Sta_seg SEGMENT PARA ‘STACK’ DB 80 DUP(?) Top LABEL WORD Sta_seg ENDS Code SEGMENT

ASSUME CS:Code,DS:data,SS:sta_seg ORG 1000H Start: MOV AX, data MOV DS, AX MOV AX,Sta_seg MOV SS, AX MOV SP, OFFSET Top

23

?? MOV AH, 4CH INT 21H Code ENDS END Start

10.编写一个程序,要求运行时屏幕显示‘BELL’,同时响铃一次(响铃的ASCII码为07)。 答:所求程序为: Code SEGMENT ASSUME CS:code Start: MOV DL, 42H MOV AH, 2 INT 21H MOV DL, 45H MOV AH, 2 INT 21H MOV DL, 4CH MOV AH, 2 INT 21H MOV DL, 4CH

24

MOV AH, 2 INT 21H MOV DL, 7 MOV AH, 2 INT 21H MOV AH, 4CH INT 21H Code ENDS END Start

11.假设在数据段X_SEG、附加段Y_SEG和堆栈段Z_SEG中分别定义了字变量X、Y和Z,试编制一完整的程序计算 X+Y+Z,并将结果送X。 答:所求程序为:

X_SEG SEGMENT X DW 12eH X_SEG ENDS Y_SEG SEGMENT Y DW 4d2H Y_SEG ENDS

Z_SEG SEGMENT STACK ‘STACK’ Z DW 2CAH

25