Atoi函数是将字符串转换为整数的常用函数。在ASM x86 nasm中,可以通过以下代码实现:
section .data
num db '1234' ; 包含数字的字符串
len equ $-num ; 字符串的长度
section .text
global _start
_start:
mov eax, 0 ; 将eax寄存器初始化
mov ecx, len ; 将ecx寄存器设置为字符串的长度
loop1:
cmp byte[num + eax], 0 ; 比较当前字符是否为“\0”
je exit ; 如果是,退出循环
sub byte[num + eax], '0' ; 将字符转换为数值并减去字符0
imul eax, 10 ; 将结果乘以10
add eax, dword [num + eax] ; 将新的数字加到结果中
loop loop1 ; 继续循环直到字符串结束
exit:
; 现在eax寄存器中包含字符串的整数值
这个代码的解释是这样的:我们首先定义了一个包含数字的字符串并找出它的长度。在"_start"标签下,我们将eax和ecx寄存器初始化为0和字符串长度。然后我们使用"loop1"标签开始我们的循环,它将一直执行直到它达到字符串的末尾(即当前字符为“\0”)。
在循环中,我们首先将字符转换为数字(通过将该字符减去字符“0”)并将结果乘以10。然后我们将新的数字添加到之前的结果中。最后,我们继续循环直到字符串结束。在退出循环后,eax寄存器将包含我们所需的整数值。
注意:此代码仅处理正整数