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에 저장된다.