Debugging 汇编语言中的除法(AT&;T语法)生成浮点异常
我最近在学习汇编语言,我正在尝试实现一个函数,它包含两个参数,第一个是值,第二个是长度为3的数组。然后我想分别在数组中存储值%16和(值/16)%16。但是,当我实现它时,它会生成一个浮点异常:Debugging 汇编语言中的除法(AT&;T语法)生成浮点异常,debugging,assembly,x86-64,att,Debugging,Assembly,X86 64,Att,我最近在学习汇编语言,我正在尝试实现一个函数,它包含两个参数,第一个是值,第二个是长度为3的数组。然后我想分别在数组中存储值%16和(值/16)%16。但是,当我实现它时,它会生成一个浮点异常: subq $8,%rsp movq $0,%r10 movq %rdi,%rax /*store input into %rax*/ movq $16,%rbx /*store 16 into %rbx*/ idivq %rbx /*store divi
subq $8,%rsp
movq $0,%r10
movq %rdi,%rax /*store input into %rax*/
movq $16,%rbx /*store 16 into %rbx*/
idivq %rbx /*store dividend in rax, and remainder in rdx*/
movq %rdx,(%rsi,%r10) /*store remainder in %rsi[0]*/
addq $1,%r10 /*increase %r10 by 1*/
idivq %rbx /*do the division again*/
movq %rdx,(%rsi,%r10)
addq $8,%rsp
当我用
char buf[16];
hex_format_byte_as_hex("h", buf);
ASSERT(0 == strcmp(buf, "48"));
它生成一个浮点异常。为什么会这样?有人能指出我在工作中做错了什么吗?提前感谢您。
idivq
使用单个操作数时将rdx:rax
作为输入。您没有初始化rdx
。初始化rdx
最简单的方法是在idiv
之前发出cqo
指令。