Linux平台下AT&T汇编中将字符串转为数字问题

大家都知道,从C语言开始,我们都摆脱不了输入输出,而在AT&T汇编中,我们的输入会自动转为字符串,这就给我们的运算带来困扰,如果能够让输入直接变成数字,或者我们把字符串转为数字,那样我们就可以进行基本运算了。接下来我们将讨论怎么将字符串转为数字。
因为在ASKII码中一个英文和数字占一个字节,所以我们只需要将每个位置的数取出,然后减去0的ASKII码值48就得到该位置的数,最后将他们组合成一个完整的数就可以了。
代码如下:
# 将123转为数字输出

.section .bss
        .lcomm stack ,30
.section .data
temp:
        .string "123"
.section .text
.globl _start
_start:
        xorl %ebx,%ebx
        movl $10, %ecx
        xorl %eax,%eax          #初始化ebx
        movl $0,%edi            #定位当前位置
        loop:
        movl temp(,%edi,1),%ebx #将该位置值传给eax
        cmpl $0,%ebx
        je exit                 #判断是否结束
        #转为数字
        mull %ecx
        subl $48, %ebx          #将ASKII转为数字
        addl %ebx, %eax
        incl %edi
        jmp loop                #继续

  exit:
        movl %eax, %ebx
        movl $1, %eax
        int $0x80

我们用edi定位当前取到的数的位置,循环一次增加1,而空的ASKII码值为0,所以我们只需要当取到的ASKII码值是0时,则退出循环。每次取出一个数转为数字后要乘上10,最后一个不用乘就可以了。
好了,我们编译链接一下

as --32 -o string_to_numbers.o string_to_numbers.s
ld -m elf_i386 -o string_to_numbers string_to_numbers.o

运行:

./string_to_numbers
echo $?

这里写图片描述
ok,成功了。好了,到这里也该结束了,对于怎样将数字转化为字符串可以到https://blog.csdn.net/qq_26943725/article/details/81044429网址进行观看,希望我的文章可以帮到您,同时也欢迎大家在下面发表问题,谢谢

你可能感兴趣的:(Linux平台下AT&T汇编中将字符串转为数字问题)