gets 함수를 만들기 전 '\n'의 위치 등을 찾아주는 strchr 함수를 구현하는 것이 편할 것 같아 구현하였다.
.globl main main: push %ebp mov %esp, %ebp push $0x65 push $helloworld call strchr push %eax call puts leave ret strchr: push %ebp mov %esp, %ebp mov 0x08(%ebp), %eax movb 0x0c(%ebp), %bl .strchr_loop: cmpb (%eax), %bl je .strchr_finish cmpb $0x00, (%eax) je .strchr_notfound inc %eax jmp .strchr_loop .strchr_notfound: mov $0x01, %eax .strchr_finish: leave ret puts: push %ebp mov %esp, %ebp mov 0x08(%ebp), %eax push %eax call strlen mov %eax, %edx mov $0x04, %eax mov $0x01, %ebx mov 0x08(%ebp), %ecx int $0x80 push $0x0a lea (%esp), %ecx mov $0x04, %eax mov $0x01, %ebx mov $0x01, %edx int $0x80 add $0x04, %esp leave ret strcpy: push %ebp mov %esp, %ebp xor %eax, %eax mov 0x08(%ebp), %edi mov 0x0c(%ebp), %esi .strcpy_loop: movb (%esi), %al movb %al, (%edi) cmpb $0x00, %al je .strcpy_finish inc %esi inc %edi jmp .strcpy_loop .strcpy_finish: leave ret strlen: push %ebp mov %esp, %ebp xor %ecx, %ecx mov 0x08(%ebp), %eax .strlen_loop: movb (%eax), %bl cmpb $0x00, %bl je .strlen_finish inc %eax inc %ecx jmp .strlen_loop .strlen_finish: mov %ecx, %eax leave ret helloworld : .string "Hello, World"
'Programming' 카테고리의 다른 글
Assembly Programming - isAlpha, isNumber (0) | 2015.10.11 |
---|---|
Assembly Programming - gets (0) | 2015.10.10 |
Assembly Programming - puts (0) | 2015.10.10 |
Assembly Programming - strcpy (0) | 2015.10.10 |
Assembly Programming - strlen (0) | 2015.10.10 |