我剛剛在幾天前開始學習裝配,看起來我碰到了一堵堅固的牆。我有這個問題,我必須在彙編程序中接受一個整數輸入(celcius)並將其轉換爲華氏。裝配中的乘法和除法練習x8086
這裏是我的代碼:
org 100h
jmp compare
var1 db 0
ans1 db ?
num1 db ?
num2 db ?
ex1 db ?
ex2 db ?
compare:
cmp var1,0
je start
jne move
move:
mov bl,var1
mov num1,bl
jmp digits
start:
mov ah,01h
int 21h
mov num1,al
cmp num1,0dh
jne digits
je convert
digits:
mov ah,01h
int 21h
cmp al,0dh
je revert
mov num2,al
jne proceed
proceed:
sub num1,48
mov cl,num1
mov al,10
imul cl
mov num1,al
sub num2,48
mov bl,num2
add num1,bl
mov bl,num1
mov var1,bl
jmp compare
revert:
cmp num2,0 ;also added this one too recently
jne c1
sub num1,48
c1:
mov bl,num1
mov var1,bl
jmp convert
convert:
mov cl, var1
mov al, 9
imul cl
mov cl, 5
idiv cl
add al, 32
mov ans1, al
mov bl,ans1
mov dl,0 ;i recently added this for convertion
mov al,ans1
mov bl,10
div bl
mov ex1,al
mov ex2,ah
adc ex1,48
adc ex2,48
print:
mov ah,02h
mov dl,10
int 21h
mov ah,02h
mov dl,13
int 21h
mov ah,02h
mov dl,ans1
int 21h
mov ah,02h ;print the converted values
mov dl,ex1
int 21h
mov ah,02h
mov dl,ex2
int 21h
ret
我用於輸入15,這將導致 「;」這是ascii中的59。 我需要幫助轉換ascii;到十進制,當我輸入更多 比2數字它說溢出分工。我該如何解決?提前致謝!
編輯:我最近添加了轉換代碼。它現在有點不錯,但如果我在輸入輸入超過「20」輸出錯誤。我用Alden的想法(非常感謝很多人!)修改答案並單獨轉換並打印它。我現在仍在處理這個問題,我還在抓頭哈哈。這麼多錯誤大聲笑。
再次編輯:這太奇怪了。我的程序只能轉換以5結尾的數字。它只能正確轉換5,15,25和35.這太奇怪了,其他所有的輸出都搞亂了。有人可以告訴我爲什麼會發生這種情況?
是輝煌的邏輯在那裏!但我似乎無法理解如何去做。我知道你可以通過將它改爲10來獲得15,並獲得它的餘數來獲得數字,然後打印它。但我無法理解如何做到這一點的方法。對不起,我真的是一個新手組裝我還是不明白那些sp bp和push and pop意味着什麼。現在我只是將答案分爲10和得到了餘數,並設法分離和打印數字..如果我輸入15,結果是「;」我使用了mod和東西,並得到了「59」,這是正確的,但如果我去比20更高的錯誤 – user3110801