3)& 4)
(1)、文本编辑内容4中代码段保存为II4.txt,masm编译link连接通过:
(2)、d命令查看MSG2单元中存放的值,如图(执行AND AX,MSG1+2后,未执行MOV
MSG2,AX指令):
5)
(5-1)编写程序段如下:
(1)、分析题目可知数据段中有X、Y、W、Z和常数10、5,所以有:
DATA DB 5,10
(2)、代码段中先执行(W-X)*10有:
CBW;之前误解为乘指令操作数需16位故而出现此错误。 MUL DATA+1
SUB AL,X
MOV AL,W
W DB 10
Z DW ?
Y DB 8
X DB 2
之后加5结果除于X+Y有:
DIV
CL
ADD CL,Y
ADD AX,DB ;DATA错输入为DB
MOV CL,X
(3)、所以有最初代码如下(错误):
DSEG SEGMENT
DATA DB 5,10 X Y Z W
DB 2 DB 8 DW ? DB 10
DSEG CSEG
ENDS SEGMENT
ASSUME CS:CSEG,DS:DSEG
MOV AX,DSEG
START:
MOV DS,AX MOV AL,W SUB CBW MUL ADD
DATA+1 AX,DB AL,X
MOV CL,X ADD DIV
CL,Y CL
CSEG
ENDS END
START
(5-2)编写程序段如下
(1)、分析题目可知数据段中有X、Y、Z和常数8、2、16,所以有:
Z DW ?
Y DB 3
X DB 5
DATA DB 8,2,16
(2)、代码段先实现(X+X)*8有如下:
MOV AL,X
ADD AL,AL ;实现X+X
MOV CL,3
SHL AL,CL ;逻辑左移3位实现乘8
实现(X-Y)*2有:
SHL BL,CL ;逻辑左移1位实现乘2
MOV CL,1
SUB BL,Y ;实现X-Y
MOV BL,X
实现分子部分(X+X)*8-(X-Y)*2:SUB AL,BL 实现除于16并把结果送Z:
MOV Z,AL
SHR
AL,CL ;逻辑右移4位实现除于16
MOV CL,4
(3)、程序段通过编译并并成功链接,如图:
5.调试过程 1)—— 2)& 3)
(1)、直接运行II2.exe文件可以看到dos窗口未显示任何信息,于是debug II2.exe文件跟踪执行,如图:
(2)、t命令单步运行观察到IP在不断得递增指向下一条指令: