【发布时间】:2020-02-05 13:09:47
【问题描述】:
我正在尝试在汇编中编写一个“strcat”函数,但无法获取我传递给它以更改的内存中的值。我的测试崩溃了,我不明白为什么。我似乎也无法以易于理解的方式找到有关 x86_64 程序集的任何好的文档。
global _ft_strcat
_ft_strcat:
push rbx
push rdx
mov rbx, rsi
mov rdx, rdi
parse:
cmp byte [rdx], 0
je concat
inc rdx
jmp parse
concat:
cmp BYTE[rbx], 0
je finish
mov dl, BYTE[rbx]
mov BYTE[rdx], dl
inc rdx
inc rbx
jmp concat
finish:
mov BYTE[rdx], 0
mov rax, rdi
pop rdx
pop rbx
ret
上面是我要写的函数,下面是我的测试。
int main(void)
{
char buffer[50] = "Hello, ";
ft_strcat(buffer, "World!");
printf("%s\n", buffer);
return (0);
}
我遗漏了诸如包含和标题之类的内容,因为从我所看到的情况来看,这与问题无关。我通过调试器运行它,并注意到在我的函数结束时,rdi 寄存器指向的字符串没有改变,但我确实通过了 concat 标签中的循环,它看起来像是从字符串中提取的值rsi 所指向的确实是被复制到了 dl 寄存器中。
【问题讨论】:
标签: c macos assembly x86-64 nasm