NSG(Nefus Study Group)/Assignment
NEFUS Study Group Assignment 0x2
Triton
2008. 10. 28. 21:59
어셈블리로 puts 만들기
1. 주의할 점: Carrage Return, Line Feed, Null Character를 인식하며, 바이오스 인터럽트를 사용하지 않은채 구연할 것.2. 제출 기한은 포스팅일로부터 3일.
3. 제출은 트랙백으로 제출할 것.
[org 0h]
[bits 16]
jmp 0x7c0:start
strA db 'HELLO WORLD',10,10,10,13,'ASDF',10,13,'A',0
start :
xor esi, esi
mov ax, cs
mov ds, ax
mov ax, 0xb800
mov es, ax
xor di, di
push di
mov si, strA
call puts
jmp $
linef :
mov ax, di
add di, 160
inc si
jmp print_loop
carr :
xor dx, dx
mov ax, di
mov bx, 160
div bx
mul bx
mov di, ax
inc si
jmp print_loop
puts :
pop di
xor di, di
xor dx, dx
print_loop :
mov dl, [si]
cmp dl, 10 ;linefeed
je linef
cmp dl, 13 ;carriage return
je carr
cmp dl, 0
je endputs
mov byte[es:di], dl
inc di
mov byte[es:di], 0x06
inc di
inc si
jmp print_loop
endputs :
push di
ret
※ 2바이트 이상 div를 하게 되면 dx:ax 값을 가지고 나누기를 하여 몫은 ax에 나머지는 dx에 저장된다.