假设数据区从地址0x100开始,可以按以下方式实现:

section .data
    msg db 'welcome tomasm!', 0

section .text
    global _start

_start:
    ; 将msg字符串复制到数据区
    mov si, msg ; 将msg的地址存储到SI寄存器中
    mov di, 0x100 ; 将目标地址0x100存储到DI寄存器中
    mov cl, byte [si] ; 将第一个字符复制到CL寄存器中
    mov byte [di], cl ; 将CL寄存器中的字符复制到目标地址
    inc si ; 将SI寄存器加1,指向下一个字符
    inc di ; 将DI寄存器加1,指向下一个目标地址
    cmp cl, 0 ; 判断是否到了字符串结尾
    jz done ; 如果是,表示复制完成,跳转到done标签
    jmp loop ; 如果不是,继续循环复制

loop:
    mov cl, byte [si] ; 将下一个字符复制到CL寄存器中
    mov byte [di], cl ; 将CL寄存器中的字符复制到目标地址
    inc si ; 将SI寄存器加1,指向下一个字符
    inc di ; 将DI寄存器加1,指向下一个目标地址
    cmp cl, 0 ; 判断是否到了字符串结尾
    jz done ; 如果是,表示复制完成,跳转到done标签
    jmp loop ; 如果不是,继续循环复制

done:
    ; 程序结束
    mov eax, 1 ; 将系统调用号1(退出)存储到EAX寄存器中
    xor ebx, ebx ; 将返回值0存储到EBX寄存器中
    int 0x80 ; 调用系统中断,退出程序
``
用si 和 di 实现将字符串welcome tomasm!复制到它后面的数据区中

原文地址: https://www.cveoy.top/t/topic/cnCB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录