我被困在弄清楚复制字符串源到目标,它应该被初始化为全零。看起来好像我需要找到字符串的大小,启动计数器寄存器,并将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