我正在尝试在x86汇编中实现memset。我会用字节和字来进行复制,因此我将得到两个函数:kmemset
和kmemsetw
,我会以以下方式向我的C代码公开这两个函数:
extern uint8_t* kmemset(uint8_t* dest, uint8_t val, uint8_t size);
extern uint16_t* kmemsetw(uint16_t* dest, uint16_t val, uint8_t size);
问题在于当我测试时,出现了分段错误。我尝试用gdb调试,但似乎无法进入汇编代码。如果有人能对代码进行评论,我会很高兴。(kmemset
非常相似,所以我没有包含它)。
.intel_syntax noprefix
.section .text
.align 16
.global kmemsetw
.type kmemsetw, @function
kmemsetw:
push ebp
mov ebp, esp
push edi
push ecx
push ebx
xor eax, eax
mov ebx, [ebp+4]
mov ax, [ebp+8]
mov ecx, [ebp+12]
mov edi, ebx
rep stosw
mov eax, edi
pop ebx
pop ecx
pop edi
pop ebp
ret
stosd
(存储 dword 大小的数据)。 - 500 - Internal Server Error