一 代码实现
DATAS SEGMENT ;数据段
X DW 100
Y DW 50
Z DW 25
V DW 10
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS ;定义DS:DX
MOV DS,AX ;DS指向缓冲区首地址基地址
MOV AX, X ;把X传给Ax
IMUL Y ;带符号与AX相乘
NOP
MOV CX,AX ;把相乘的结果的低位传给CX
MOV BX,DX ;把相乘的结果的高位传给BX
MOV AX, Z ;把z传给AX
CWD ;字扩展
ADD CX, AX ;AX与CX相加结果存到CX
ADC BX, DX ;BX与DX带进位相加结果存到BX
SUB CX, 328 ;CX减去328
SBB BX, 0 ;BX带借位减去0
MOV AX, V ;把v传给AX
CWD ;字扩展
SUB CX, AX ;CX减去AX即数字v
SBB BX, DX ;BX带借位减去DX
MOV AX, CX ;把CX传给AX
MOV DX, BX ;把BX传给DX
IDIV Y ;带符号除以Y
MOV AH, 4CH ;返回DOS
INT 21H
CODES ENDS
END START
该程序的功能是:对已初始数据先分别装入到X、Y、Z、V 单元,计算表达式((Z +X*Y -328) -V)/ Y,并将带符号除法运算结果的商存入AX寄存器,余数存入DX 寄存器。其中X、Y、Z、V 均为16位带符号数。
二 运行结果
分析:首先u命令找到返回DOS前的地址0030,然后运用g命令,可以看到AX=005D,DX=0025,对应的十进制数分别为,AX=93,DX=37,与理论值相同,程序运行正确。