[STUDY] 어셈블리어 - 5
2023. 2. 28. 00:31ㆍ코딩/공부 [STUDY]
반응형
1. 과제
목표 > 8바이트 정수를 stdout을 이용해 10진수 정수로 출력하기
참고 코드 >
2. 결과
section .text
global _start
_start:
mov rdi, 3654154
call func
mov rax, 60
xor rdi, rdi
syscall
func:
push rbp
mov rbp, rsp
sub rsp, 8
mov qword [rbp-8], rdi
mov rsi, rdi ; for putChar('-');
cmp qword [rbp-8], 0
jae .check ; putchar('-');
neg qword [rbp-8]
.check:
cmp qword [rbp-8], 10
jb final
xor rdx, rdx ; rdx is remain value
mov rax, qword [rbp-8]
mov rbx, 10
idiv rbx
mov rdi, rax ; x/10
call func
final:
xor rdx, rdx
mov rax, qword [rbp-8]
mov rbx, 10
idiv rbx
add rdx, 48 ; add the + ('0')
mov qword [rbp-8], rdx
cmp rsi, 0
jb .putchar
mov rax, 1
mov rdi, 1
lea rsi, [rbp-8] ; rdx is remain %10 + '0'
mov rdx, 1
syscall
add rsp, 8
pop rbp
ret
.putchar:
neg rdx
mov qword [rbp-8], rdx
mov rax, 1
mov rdi, 1
lea rsi, [rbp-8] ; rdx is remain %10 + '0' but, putchar('-');
mov rdx, 1
syscall
jmp ret
ret:
add rsp, 8
pop rbp
ret
습관인것 같은데 처음에 코드 만들땐 저 조건문 2개를 전부 func 레이블에 집어넣어서
jmp func로 해야하게 만들어버려서 조건을 반대로 수정해서 위 그림처럼 수정했다.
+ 음수는 안만들어도 되는건데 만들다가 포기 다음에 시간 남으면 해봐야지
반응형
'코딩 > 공부 [STUDY]' 카테고리의 다른 글
[STUDY] 동적계획법 (dynamic programming) (0) | 2023.04.16 |
---|---|
[STUDY] 어셈블리어 - 6 (0) | 2023.02.28 |
[STUDY] 어셈블리어 - 4 (0) | 2023.02.25 |
[STUDY] 어셈블리어 - 3 (rip,rsp,rbp,스택프레임) (1) | 2023.02.23 |
[STUDY] 어셈블리어 - 2 (1) | 2023.02.23 |