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연산만으로 구현
. 못풀었음.;; 내일 조금 다시 해보다 안되면 질문좀 올려봐야할거같음