【问题标题】:print int as ascii in assembly 64 bit at&t float number error在汇编 64 位 at&t 浮点数错误中将 int 打印为 ascii
【发布时间】:2015-09-10 16:42:46
【问题描述】:

我编写了一个单独的程序只是为了弄清楚如何做到这一点,之前我将 48 添加到要打印的数字上,但现在当我得到大于 9 的数字时,它就不再足够了。

所以下面的程序应该将 23 放入 my temp 中,如果小于 10,则将 23 与 10 进行比较,否则我可以打印,否则将 temp 放入 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

【问题讨论】:

    标签: assembly integer ascii att


    【解决方案1】:

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

    xorq %rdx, %rdx   # rdx = 0
    

    【讨论】:

      猜你喜欢
      • 2021-02-06
      • 1970-01-01
      • 2013-05-12
      • 2015-01-06
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多