注册 登录
编程论坛 汇编论坛

请教一段代码

sldtk1 发布于 2007-06-12 18:37, 764 次点击
编写程序段,完成下面公式的计算(其中:变量X和Y是32位有符号数,变量A,B和Z是16位有符号数)。

A←(X-Y+24)/Z的商,B←(X-Y+24)/Z的余数

DATA1 SEGMENT
X DD ?
Y DD ?
Z DW ?
A DW ?
B DW ?
DATA1 ENDS
CODE1 SEGMENT
MOV AX, X
MOV DX, X+2 ;用(DX:AX)来保存32位变量X的数值
SUB AX,Y
SBB DX, Y+2 ;(DX:AX)-(Y+2:Y)
ADD AX, 24D
ADC DX, 0 ;(DX:AX)+24
IDIV Z
MOV A, AX
MOV B, DX
CODE1 ENDS
将商存到A单元这个我会了,就是不明白是怎么把余数存到B里面,小弟刚学汇编,书看了不少可没人教就是难懂,望各位指点一下
4 回复
#2
菜鸟上路2007-06-12 19:08
8位商放在AL,余数放在AH
16位商放在AX,余数放在DX
#3
sldtk12007-06-12 19:42
还是不太清楚,能不能说具体点
MOV DX, X+2 ;用(DX:AX)来保存32位变量X的数值
SBB DX, Y+2 ;(DX:AX)-(Y+2:Y)
ADC DX, 0 ;(DX:AX)+24
为什么要把X+2的内容放到寄存器DX呢,还有用SBB这个减法有什么用?然后加0?后面的注释看不懂
#4
菜鸟上路2007-06-12 20:20
是MOV AX, X MOV DX, X+2 两条指令来保存32位变量X的数值
因为X是双字,所以占4个字节,把X和X+1的内容(也就是2个字节)放在AX中,把X+2和X+3的内容放在DX中

SUB AX,Y ;先用低位减去Y的低4位
SBB DX, Y+2 ;用高位带借位减去Y的高4位

ADD AX, 24D
ADC DX, 0
同上面两条语句类似
#5
sldtk12007-06-12 20:41
这么说有点明白了,谢谢版主
1