사용자로부터 2byte 의 10진수를 입력받고 입력받은수를 2진수로 출력하라.
바로 nasm으로 적어보려고했으나 잘안되서 c로 먼저 굴려봤습니다.
#include <stdio.h>
int main(int argc, const char * argv[]) {
int target = 0;
int remain[100] = {0,};
int index = 0;
scanf("%d",&target);
while (target > 1) {
remain[index] = target % 2;
target = target / 2;
index++;
}
printf("%d\n",target);
for (int i = index - 1; i >= 0; i--) {
printf("%d\n", remain[i]);
}
return 0;
}
이렇게나 간단한건데
속이 터지네요
계속 문제가 생기는 mov eax, dword [target] 부분을
and eax, 0x0000ffff 추가로 땜빵해줬습니다...
필요한 부분은 ax뿐만이라(2byte수 제한) 솔직히 앞부분은 필요없기도하고........
누가좀 알려줬으면 좋겠네요
%include "io64.inc"
section .text
global CMAIN
CMAIN:
mov rbp, rsp; for correct debugging
GET_DEC 2, ax
mov [target], ax
L_loop:
mov eax, 0
mov edx, 0
mov eax, dword [target]
and eax, 0x0000ffff
mov edx, eax
shr edx, 16
and eax, 0x0000ffff
mov ebx, 0
mov bx, 2
div bx
mov ebx, [remainder_index]
mov [remainder + ebx * 2], dx
add [remainder_index], word 1
mov [target], ax
cmp ax, 1
jle L_loop_end
jmp L_loop
L_loop_end:
PRINT_DEC 2, target
;NEWLINE
mov eax, 0
mov eax, [remainder_index]
dec eax
L_print_loop:
PRINT_DEC 2, [remainder + eax * 2]
;NEWLINE
add [print_count], word 1
dec ax
mov bx, [print_count]
cmp bx, [remainder_index]
je L_end
jmp L_print_loop
L_end:
xor rax,rax
ret
section .bss
target resw 1
remainder resw 100
section .data
remainder_index dw 0
print_count dw 0