실행환경
- cpu : 인텔계열(64bit)
- 컴파일러 : nasm
- 리눅스 : ubuntu 16.04 LTS
설치방법
- sudo apt-get install nasm
컴파일
- nasm -f elf64 파일명.asm -o 파일명.o --> 목적파일을 만든다.
- ld 파일명.o -o 파일명 --> 실행파일을 만든다.
문제 : 0~24 수를 입력한 후 오전 혹은 오후 몇 시의 형태로 출력
ex) 15 --> 오후 : 3
test8.asm
section .data
x db 'x :'
len equ $ -x
a db '오전 : '
la equ $ -a
p db '오후 : '
lp equ $ -p
e db 'error'
le equ $ -e
ent db 0x0A
section .bss
num resb 3
t resb 3
section .text
global _start
%macro write 2
mov eax,4
mov ebx,1
mov ecx,%1
mov edx,%2
int 0x80
%endmacro
%macro read 2
mov eax,3
mov ebx,1
mov ecx,%1
mov edx,%2
int 0x80
%endmacro
_start:
write x,len
read num,3
mov al,[num]
mov bl,[num+1]
cmp bl,10
je _cpa
jmp _cpb
_cpa:
sub al,'0'
cmp al,0
jge _cpa2
jmp _err
_cpa2:
cmp al,9
jle _true
_cpb:
sub al,'0'
sub bl,'0'
mov cl,10
mul cl
add al,bl
cmp al,0
jge _cp
jmp _err
_cp:
cmp al,23
jle _true
jmp _err
_true:
mov cl,12
div cl
cmp al,0
je _am
jmp _pm
_am:
mov al,ah
mov ah,0
mov cl,10
div cl
add al,'0'
mov [num],al
add ah,'0'
mov [num+1],ah
write a,la
write num,2
jmp _exit
_pm:
mov al,ah
mov ah,0
mov cl,10
div cl
add al,'0'
mov [num],al
add ah,'0'
mov [num+1],ah
write p,lp
write num,2
jmp _exit
_err:
write e,le
jmp _exit
_exit:
mov eax,1
int 0x80
'Programming Language > Assembly' 카테고리의 다른 글
[Assembly] 어셈블리 Test9 (0) | 2016.12.05 |
---|---|
[Assembly] 파일입출력 (0) | 2016.12.05 |
[Assembly] 어셈블리 Test7 (0) | 2016.12.04 |
[Assembly] 어셈블리 Test6 (0) | 2016.12.04 |
[Assembly] 어셈블리 Test5 (0) | 2016.12.04 |