编辑代码

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           ; 调用系统调用