10.8 mul习题 求解释
视频51小甲鱼叫做的一个习题 我怎么用DEBUG调试 7和8的结果怎么不对呢??编程计算DATA段中 第一组数据的3次方,结果保留在后面一组dword单元中
assume cs:code
data segment
dw1,2,3,4,5,6,7,8
dw0,0,0,0,0,0,0,0
data ends
code segment
start:mov ax,data
mov ds,ax
mov si,0
mov di,16
mov cx,8
s:mov bx,ds:
call s1
mov ds:,ax
mov ds:,dx
add si,2
add di,2
loop s
mov ax,4c00h
int 21h
s1:mov ax,bx
mul bx
mul bx
ret
code ends
end start mov ds:,al
mov ds:,ah
试试 本帖最后由 china0008 于 2011-3-1 22:41 编辑
assume cs:code
data segment
dw1,2,3,4,5,6,7,8
dw0,0,0,0,0,0,0,0
data ends
code segment
start:mov ax,data
mov ds,ax
mov si,0
mov bx,0
mov cx,8
s: mov bl,ds:
call s1
mov ds:,ax
add si,2
loop s
mov ax,4c00h
int 21h
s1:mov ax,bx
mul bl
mul bl ret
code ends
end start给你做了答案其实你的思路是对的,说明你学懂了。但是忽略的 长度相关的问题。具体看我这里。 你的问题主要在s1:子程序 mul bx这里乘数16为。导致结果是32位。高位在dx,低位在ax。看你原来的保存结果的源码 你把32位的结果写到了 24位的范围了,结果自然一片混乱。 本帖最后由 china0008 于 2011-3-1 22:45 编辑
mov ds:,al
mov ds:,ah
试试
thrill 发表于 2011-3-1 22:29 http://www.fishc.com/dz/images/common/back.gif
问题解决 thanks 问题解决 thanks
ckzmo 发表于 2011-3-1 22:39 http://fishc.com/dz/images/common/back.gif
这样存在一个隐患。你的s1子程序对dx有影响,就是如果dx中有值,你这样做,你就把dx给丢弃了。不过对于这个题这样做也是会得到正确结果的。但是思路上不够严密。 mov ds:,al
mov ds:,ah
试试
thrill 发表于 2011-3-1 22:29 http://fishc.com/dz/images/common/back.gif
这样存在一个隐患。你的s1子程序对dx有影响,就是如果dx中有值,你这样做,你就把dx给丢弃了。不过对于这个题这样做也是会得到正确结果的。但是思路上不够严密。 本帖最后由 china0008 于 2011-3-1 23:03 编辑
恩 dx有值的话就也得加上不过你的输出格式只有16位,我就直接忽略了有dx也没地方放了
那不如修改他的s1 子程序 让产生的结果保持16位。反正最大的数才512 。16位足够用了。 这样存在一个隐患。你的s1子程序对dx有影响,就是如果dx中有值,你这样做,你就把dx给丢弃了。 ...
china0008 发表于 2011-3-1 22:46 http://www.fishc.com/dz/images/common/back.gif
请举个列子,本人初学者 8086的乘法乘数为16位的时候,积就用32位来保存。而题目的保存结果的空间是16位的。那你的结果不是要丢弃16位的数据。 根据题目的实际情况。用 8位的乘数就足够了。这样产生的积刚好是16位。正好符合题意。 是这个意思吗?
mov ds:,ax 低位
mov ds:,dx 高位
add di,2
页:
[1]