本实验使用vscode+插件编写代码和调试(点击查看教程)
实验内容
编写程序计算上面表达式。设X为带符号字数据,存在内存的DAX单元,结果存入DAY单元。如果结果为0,则在显示器上输出字符0;如果为负,则在显示器上输出“-”;否则在显示器上输出“+”。
使用DEBUG工具调试程序,查看程序运行结果。
流程图
实验结果
数据段内容
DSEG SEGMENT
DAX DW -1;输入X的值
DAY DW 0;结果单元
DSEG ENDS
空白处右键选择debug调试
可以看到内存中DAX和DAY单元的初值为FFFF和0000,即-1和0
输入g查看结果显示+,DAX和DAY单元的结果为FFFF和0001(注意不是0100,8086的汇编采用小端法,高位存在高地址,低位存在低地址)
根据该分段函数,Y的值不可能为负,所以程序只会显示0或+,不会显示-
当DAX的值为0时显示0
源代码
DSEG SEGMENT
DAX DW -1;输入X的值
DAY DW 0;结果单元
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:
MOV AX,DSEG
MOV DS,AX;将DSEG赋值为DS
MOV AX,DAX
CMP AX,0
JLE ABSL;AX小于等于0
CMP AX,10
JLE TEN;AX小于等于10
CMP AX,40
JLE FOURTY;AX小于等于40
JMP MOVE;AX大于40
ABSL:
NEG AX;取绝对值
JMP MOVE
TEN:ADD AX,1000;计算X+1000
JMP MOVE
FOURTY:
MOV CL,3;计算9X-6
SHL AX,CL
ADD AX,DAX
SUB AX,6
MOVE:
MOV DAY,AX;保存结果
CMP AX,0
JZ EQUAL;结果等于0
JL LITTLE;结果小于0
MOV AH,2;结果大于0
MOV DL,'+';显示+
INT 21H
JMP ENS;结束
EQUAL:
MOV AH,2;显示0
MOV DL,'0'
INT 21H
JMP ENS;结束
LITTLE:
MOV AH,2;显示-
MOV DL,'-'
INT 21H
ENS:MOV AX,4C00H;结束
INT 21H
CSEG ENDS
END START
感谢大家的观看