作者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