内容发布更新时间 : 2024/11/8 2:39:33星期一 下面是文章的全部内容请认真阅读。
(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