Nasm Assembly:我正在尝试复制一个字符串,然后在其中搜索特定单词,更改它并打印它。卡在复制部分。



我被困在弄清楚复制字符串源到目标,它应该被初始化为全零。看起来好像我需要找到字符串的大小,启动计数器寄存器,并将stringitem[counter]推送到堆栈,增量计数器寄存器。我甚至不知道如何开始,更不用说在字符串中搜索单词了。

谢谢!

    bits 64
    global main
    extern printf
    section .text
main:
    ; function setup
    push    rbp
    mov     rbp, rsp
    sub     rsp, 32
    ;
    lea     rdi, [rel message]
    mov     al, 0
    call    printf
;
    lea     rdi, [rel source]
    mov     al, 0
    call    printf
;
    ;mov edi, source
    ;mov esi, target
    ;lea     rdi, [esi]
    ;mov     al, 0
    ;call    printf

    ;mov    ecx,sizeof source -1
;   mov esi,0
;L1:
;   mov     eax,source[esi];    
;   push    eax             
;   inc esi
;   loop    L1

    ; function return
    mov     eax, 0
    add     rsp, 32
    pop     rbp
    ret
    section .data
message: db      'Project',0x0D,0x0a,'Author',0x0D,0x0a,0
source:  db  0x0D,0x0a,"I can't figure out how to copy this text to target.",0x0D,0x0a,0
target:  db '0000000000000000000000000000000000000000000',0x0D,0x0a,0

对于您的数据内存布局,这将执行

lea rdi, [rel target]
lea rsi, [rel source]
mov rcx, target-source
cld
rep movsb

否则,就像Jester说的,一个简单的字节到字节的复制也可以

    lea rdi, [rel target]
    lea rsi, [rel source]
    cld
.copy:
    lodsb
    stosb
    test al, al
    jnz .copy

最新更新