1. 2byte 세숫자를 입력받고, 가장큰수, 가장작은수를 메모리에 저장하라

2. 가장큰값과 가장작읍값의 곱을 출력하라.

%include ""io64.inc"
section .text
global CMAIN
CMAIN:
    ;write your code here
    
    ;input
    GET_DEC 2, input_a
    GET_DEC 2, input_b
    GET_DEC 2, input_c

    ; input_a, input_b를 비교
    mov ax, [input_a]
    mov bx, [input_b]

    cmp ax, bx
    jg L_great_ax; ax>bx 가 참이면 이동
    
    ;ax<=bx 이면 실행 
    mov [max], bx
    mov [min], ax
    
    jmp L_max_next_step

L_great_ax:
    mov [max], ax
    mov [min], bx

;처음 비교 끝
L_max_next_step:;최종 최대값 구하기 max 와 c값 비교
    mov ax, [max]
    mov bx, [input_c]
    cmp ax, bx
    jg L_find_max_end; max > input_c 이미 맥스가 구해진 상태 엔드로 이동
    mov [max], bx
;max를 찾음
L_find_max_end:
    ;가장 작은수를 구하자
    mov ax, [min]
    mov bx, [input_c]

    cmp ax, bx
    jl L_find_min_end; min이 이미 제일 작음
    mov [min], bx

L_find_min_end:
    ;최소와 최대값의 곱을 출력해야함 2byte애들임
    mov edx, 0
    mov eax, 0

    mov ax, [max]
    mov bx, [min]

    mul bx ; dx:ax = ax * bx
    shl edx, 16 ;4칸 왼쪽으로(16진수)
    and eax, 0x0000ffff ; 뒤 네칸만 남기고 0으로 설정
    or eax,edx
    mov [total], eax

    ;출력
    PRINT_STRING str_max
    PRINT_DEC 2,max
    NEWLINE

    PRINT_STRING str_min
    PRINT_DEC 2,min
    NEWLINE

    PRINT_STRING str_mul_max_n_min
    PRINT_DEC 4, total
    NEWLINE

    xor rax, rax
    ret
section .bss
    input_a resw 1
    input_b resw 1
    input_c resw 1
    max resw 1
    min resw 1
    total resd 1
section .data
    str_max db 'max : ', 0x00
    str_min db 'min : ', 0x00
    str_mul_max_n_min db 'max*min = ', 0x00

 

 

. 사용자 입력으로 수를 입력받아 3의 배수인지 출력하라

문제에 범위가 적혀있지않아 배운부분으로 적당히 해봄

 

include "io64.inc"

 

section .text

global CMAIN

CMAIN:

;write your code here

GET_DEC 2, input_a

 

;피제수를 두개로 나누고....

mov eax, [input_a]

mov edx, eax

shr edx, 16; 앞 4개만 남기고...

and eax, 0x0000ffff ; 뒤 4개만 남기고...

 

mov bx, 3

div bx ; ax = quotient, dx = remainder

 

cmp dx, word 0

jne L_not_equal

PRINT_STRING str_equal

jmp L_end

L_not_equal:

PRINT_STRING str_not_equal

L_end:

xor rax, rax

ret

section .bss

input_a resw 1

 

section .data

str_equal db '배수이다.',0x00

str_not_equal db '아니다',0x00

 

 

dx:ax값을 ebx로 이동하는 알고리즘을 만들기, shift연산은 사용하지말고 메모리와 mov연산만으로 구현

. 못풀었음.;; 내일 조금 다시 해보다 안되면 질문좀 올려봐야할거같음 

 

'NASM' 카테고리의 다른 글

8일차.  (0) 2020.06.21
7일차.  (0) 2020.06.20
5일차.  (0) 2020.06.18
4일차.  (0) 2020.06.17
3일차.  (0) 2020.06.17

+ Recent posts