从一个教程中我知道movsb会将数据从ds:si
复制到es:di
。但就我而言,它不起作用。
section .text
global _start
_start:
mov esi,s1
mov edi,s2
cld
rep movsb
mov edx,20
mov ecx,s2
mov ebx,1
mov eax,4
int 80h
mov eax,1
int 80h
section .data
s1 db 'qwerty',0
section .bss
s2 resb 20
答案 0 :(得分:2)
Linux启动进程时,除ESP之外,所有寄存器(包括ECX)将为零。 (ABI表示它们可以容纳垃圾,但是Linux选择零以避免信息泄漏。)
因此rep movsb
将复制零字节。是memcpy,不是strcpy,它不查看数据。
这就是为什么您的程序不会崩溃的原因,就像您期望使用rep movsb
而无需先设置ECX一样。