作者jason12308 (jason12308)
看板ASM
标题Re: [问题] 关於除法指令div的问题
时间Thu Nov 4 21:24:14 2010
※ 引述《ppttcc (ppttcc)》之铭言:
: 关於除法指令div的问题
: 程式目的:将一数除以另一数後将商及余数转成ASCII的数字後输出,
: 发生一些问题:
: 1.除数若在13以下显示的结果就会变成divide overflow,但若超过就没有此问题.
: 2.转成ASCII後完全不是该数字,如20/14後,应是1余6,但转成ASCII输出後,会变成2b,
: 30/14後,应是2余2,但转成ASCII输出後,会变成字元 < l (L的小写),整个都乱掉
: 3.若不呼叫 tochar, 则31/14没有输出任何字元.31/17输出3行空白, 35/20输出两颗心号
: (ASCII数值为3)
: 似乎找不到任何规则可debug?
: 我在怀疑是否有暂存器的数值没清乾净归零,但我用的指令是mov不是add阿?
: 或者没有初始化暂存器为0?但好像也没效果...
: 麻烦帮我看看哪里错了,感谢!感谢!
: 程式码:
: mov dl,20
: mov ax,dx
: mov cl,14
: div cl
: mov dl,ah ;6
: call tochar
: call show
: mov dl,al ;1
: call tochar
: call show
: exit: mov ah,4ch
: int 21h
: ;--------------------------
: tochar proc near
: mov bl,48
: add dl,bl
: ret
: tochar endp
: show proc near
: mov ah,2
: int 21h
: ret
: show endp
.8086
.model small
.stack 100h
.data
.code
.startup
mov al,20
mov ch,al
mov cl,14
div cl
mov ch,al ;商
mov cl,ah ;余
add ch,30h
add cl,30h
mov ah,02h
mov dl,ch
int 21h
mov ah,02h
mov dl,cl
int 21h
.exit
end
我打这样…可执行
--
十六年後,再此重会。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.240.131.164
※ 编辑: jason12308 来自: 111.240.131.164 (11/04 21:28)
1F:推 loveflames:不知道原po程式的dh是不是0 11/04 21:34
2F:→ jason12308:叫原PO用CV *.EXE看啊 11/04 21:38
3F:→ loveflames:看到前面他说用debug载入,应该知道怎麽看暂存器吧 11/04 21:45
4F:→ ppttcc:谢谢!我参考一下! 11/04 22:10