사용자로부터 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

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

'NASM' 카테고리의 다른 글

9일차  (0) 2020.06.23
8일차.  (0) 2020.06.21
7일차.  (0) 2020.06.20
6일차.  (0) 2020.06.19
5일차.  (0) 2020.06.18

+ Recent posts