원래 커맨드라인에 출력하기 위해서는 write 함수를 출력하는 인터럽트를 걸어야 하는데 그걸 하려면 또 strlen으로 문자열의 길이도 가져와야 하고 인자 넣기가 귀찮아 puts 함수를 구현하였다.
문자열 끝에 '\n'을 자동으로 붙여 주기 때문에 조금 고민했었는데 모 학생의 도움으로 간단히 구현하였다.
.globl main main: push %ebp mov %esp, %ebp push $helloworld call puts 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 - strchr (0) | 2015.10.10 |
Assembly Programming - strcpy (0) | 2015.10.10 |
Assembly Programming - strlen (0) | 2015.10.10 |