section .data
str db "12345", 0Ah
str_len equ $ - str
section .bss
result resd 1 ; 用于存储转换后的整数
section .text
global _start
_start:
; 设置 EDI 寄存器指向字符串末尾
mov edi, str
add edi, str_len
dec edi ; 指向字符串最后一个字符的位置
; 初始化转换后的整数为 0
mov dword [result], 0
convert_loop:
; 从字符串末尾开始逐个字符处理
cmp edi, str
jl convert_done ; 如果已经处理完整个字符串,则退出循环
; 获取当前字符的 ASCII 值
movzx eax, byte [edi]
; 将 ASCII 字符转换为数字('0' 的 ASCII 码为 48)
sub eax, '0'
; 将当前数字乘以相应的权重并加到结果中
mov ebx, 10 ; 权重为 10
mul ebx ; 结果 = 结果 * 10
add dword [result], eax ; 结果 = 结果 + 当前数字
; 处理下一个字符
dec edi
jmp convert_loop
convert_done:
; 结果已经存储在 [result] 中,你可以在这里进行处理
; 例如,将结果输出到标准输出
mov eax, 1 ; sys_write 系统调用编号
mov ebx, 1 ; 文件描述符 1 (标准输出)
mov ecx, result ; 要输出的整数地址
mov edx, 4 ; 要输出的整数的长度(4 字节)
int 0x80 ; 调用系统调用
; 退出程序
mov eax, 1 ; sys_exit 系统调用编号
xor ebx, ebx ; 返回码 0
int 0x80 ; 调用系统调用