程序集x86分区fpoint异常

时间:2013-06-26 16:45:22

标签: assembly

我想划分两个单字节数, 然后尝试获取商和余数(将它们放在单字节变量中)。

到目前为止,这是我的代码:

;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

存储在al中, 并且余数存储在啊, 正确?

运行后,我从控制台收到“浮点异常(核心转储)”。

我的代码出了什么问题?


编辑:商,余数和numb2变量是8位


使用Ubuntu x86 - NASM

3 个答案:

答案 0 :(得分:2)

;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

答案 1 :(得分:1)

您无法使用“mov”将8位值移动到16位寄存器中。 CPU将从存储器偏移'numb2'开始拉入16位。无论它是什么,它都太大而不适合在div之后。你应该使用:

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

OR

mov al,byte [numb2]      ;nasm

xor ah,ah
mov cl,10
div cl

每条注释:根据汇编程序使用“byte ptr”或“byte”。但是指定对象的大小总是很好的做法。否则,汇编程序必须根据使用的寄存器推断对象的大小。

答案 2 :(得分:0)

我通过使用寄存器的扩展版本(EAX,EBX,ECX,EDX)解决了该问题。 余数存储在EDX中,商存储在EAX