Assembly 在组件64位at&;中以ascii格式打印int;t浮点数错误

Assembly 在组件64位at&;中以ascii格式打印int;t浮点数错误,assembly,integer,ascii,att,Assembly,Integer,Ascii,Att,我写了一个单独的程序,只是为了弄清楚如何做到这一点,早些时候我在打印的数字上加了48,但现在当我得到的数字大于9时,这实际上已经不够了 所以下面的程序应该把23放到我的温度中,比较23到10,如果它小于10,我可以打印,否则把温度放在rax中,把10放到r11中,把23除以10。 将rax的结果放入temp并再次检查。 我仍然需要添加一种检索早期数字的方法,但首先要做的是。 如果我不理解发生了什么,我得到的结果是浮点数错误 #include <stdio.h> #I

我写了一个单独的程序,只是为了弄清楚如何做到这一点,早些时候我在打印的数字上加了48,但现在当我得到的数字大于9时,这实际上已经不够了

所以下面的程序应该把23放到我的温度中,比较23到10,如果它小于10,我可以打印,否则把温度放在rax中,把10放到r11中,把23除以10。 将rax的结果放入temp并再次检查。 我仍然需要添加一种检索早期数字的方法,但首先要做的是。 如果我不理解发生了什么,我得到的结果是浮点数错误

#include <stdio.h>          #Inkludera standard I/O

.data                   #Specifiera data
temp:           .quad   0
temp2:          .quad   0

.text   

  .global main
main:
movq    $23, temp
jmp check

check:
cmpq    $10, $temp
jl  under10
movq    $temp, %rax
movq    $10, %r11
divq    %r11
movq    %rax,temp
jmp check

under10:
addq    $48, temp
movq    $temp,%rdi
call    puts
#包括#Inkludera标准I/O
.数据#指定数据
温度:.0
temp2:.0
.文本
.全球主要
主要内容:
movq$23,临时工
jmp检查
检查:
cmpq$10,$temp
jl 10岁以下
movq$temp,%rax
movq$10,%r11
divq%r11
movq%rax,温度
jmp检查
10岁以下:
加48美元,临时工
movq$temp,%rdi
看涨期权

当您执行
divq%r11
时,实际上是将128位寄存器对
rdx:rax
除以
r11
。因此,要获得适合于
rax
的商,通常需要在除法之前清除
rdx
,即在
divq
之前,添加一个:

xorq %rdx, %rdx   # rdx = 0