본문 바로가기

Programming Language/Assembly

[Assembly] 어셈블리 Test8

실행환경

- 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