Tuuna Computer Science

[Assembly] C 라이브러리 함수 strlen 구현하기 본문

Assembly

[Assembly] C 라이브러리 함수 strlen 구현하기

GuTTe 2018. 10. 26. 01:01

; %include "asm_io.inc" 부분은 주석처리 하셔야 합니다~


전에 C 라이브러리 함수인 strlen을 만들어두고 블로크 포스팅을 하지 않고 묵혀뒀기에... 올리려한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
%include "asm_io.inc"
 
segment .bss
    input resd 0     ;input이라는 변수를 길이의 변수로 둔다.
 
 
segment .data
    string db "Hello"0    ;측정하려는 문자열
    print db "%d"0         ;printf format 형식
 
segment .text
    global asm_main
    extern printf
 
asm_main:
    push ebp
    mov ebp, esp
    sub esp, 4
 
    mov esi, string ;문자열의 주소를 넘김
    xor eaxeax     
re:
    cmp byte [esi], 0 ;esi의 주소가 가리키는 byte부분이 NULL인지 체크한다.
    je end
    inc eax ;NULL이 아니라면 값을 증가시킨다.
    inc esi  ;문자열의 주소값도 증가시켜 다음 주소를 가리키게 한다.
    jmp re ;loop
 
end:
    mov [input], eax ;최종 결과값을 input이라는 변수에 넣는다. 
   
    push dword [input]
    push print
    call printf
    add esp, 8
 
    call print_nl
 
    mov esp, ebp
    pop ebp
    ret
cs


Comments