?? string.asm
字號(hào):
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; string.asm
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
; Forrest Yu, 2005
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[SECTION .text]
; 導(dǎo)出函數(shù)
global memcpy
global memset
; ------------------------------------------------------------------------
; void* memcpy(void* es:p_dst, void* ds:p_src, int size);
; ------------------------------------------------------------------------
memcpy:
push ebp
mov ebp, esp
push esi
push edi
push ecx
mov edi, [ebp + 8] ; Destination
mov esi, [ebp + 12] ; Source
mov ecx, [ebp + 16] ; Counter
.1:
cmp ecx, 0 ; 判斷計(jì)數(shù)器
jz .2 ; 計(jì)數(shù)器為零時(shí)跳出
mov al, [ds:esi] ; ┓
inc esi ; ┃
; ┣ 逐字節(jié)移動(dòng)
mov byte [es:edi], al ; ┃
inc edi ; ┛
dec ecx ; 計(jì)數(shù)器減一
jmp .1 ; 循環(huán)
.2:
mov eax, [ebp + 8] ; 返回值
pop ecx
pop edi
pop esi
mov esp, ebp
pop ebp
ret ; 函數(shù)結(jié)束,返回
; memcpy 結(jié)束-------------------------------------------------------------
; ------------------------------------------------------------------------
; void memset(void* p_dst, char ch, int size);
; ------------------------------------------------------------------------
memset:
push ebp
mov ebp, esp
push esi
push edi
push ecx
mov edi, [ebp + 8] ; Destination
mov edx, [ebp + 12] ; Char to be putted
mov ecx, [ebp + 16] ; Counter
.1:
cmp ecx, 0 ; 判斷計(jì)數(shù)器
jz .2 ; 計(jì)數(shù)器為零時(shí)跳出
mov byte [edi], dl ; ┓
inc edi ; ┛
dec ecx ; 計(jì)數(shù)器減一
jmp .1 ; 循環(huán)
.2:
pop ecx
pop edi
pop esi
mov esp, ebp
pop ebp
ret ; 函數(shù)結(jié)束,返回
; ------------------------------------------------------------------------
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -