2013-06-26 63 views
2

我想分割兩個單字節數字, ,然後試圖獲得商數和餘數(將它們放置在單個字節變量中)。彙編x86部門fpoint異常

這裏是我到目前爲止的代碼:

;divide 8-bit number by the number 10 
mov ax, [numb2] 
mov cl, 10 
div cl 

;get quotient and remainder 
mov byte[quotient], al 
mov byte[remainder], ah 

存儲在人, 和其餘存儲在啊, 吧?

運行後,我從控制檯中得到「浮點異常(核心轉儲)」。

我的代碼有什麼問題?


編輯:商,餘數和numb2變量是使用Ubuntu的x86 8位


- NASM

+0

[獲取浮點異常,而試圖用匯編DIV(可能重複http://stackoverflow.com/questions/9793060/getting-floating-point-exception-while-trying-to-use -div-in-assembly) – Mysticial

+0

^恐怕鏈接解決方案不起作用。請幫助 –

+0

[Div in assembly]的可能重複(http://stackoverflow.com/questions/17267472/div-in-assembly) – Michael

回答

0

您無法將一個8位值成帶有「mov」的16位寄存器。 CPU將從內存偏移量'numb2'開始提取16位數據。不管它在拉開後太大,都不適合al。您應該使用:

mov al,byte ptr [numb2] ;tasm/masm 

OR

mov al,byte [numb2]  ;nasm 

xor ah,ah 
mov cl,10 
div cl 

每評論:用 「字節的PTR」 或取決於你的彙編 「字節」。但是,指定對象的大小總是很好的做法。否則,彙編器必須根據所使用的寄存器來推斷對象的大小。

+0

它有第一行,錯誤:逗號,冒號或行結尾 –

+0

'byte ptr'是TASM/MASM語法。如果你使用NASM,它只會是「字節」。 – Michael

+0

是的。我只是想指出,指定是很好的做法。如果他指定了對象的大小,這個錯誤將不會發生。 – 2013-06-26 18:49:31

1
;divide 8-bit number by the number 10 
mov ax, [numb2] 
mov cl, 10 
xor ah,ah ;; add this line this function allows to clear ah 
div cl 

;get quotient and remainder 
mov byte[quotient], al 
mov byte[remainder], ah