decimal.asm
comment *
MASM32 SDK
ml /c /AT /Fl decimal.asm
link16 /t decimal;
*
.186
.model tiny
LF equ 0ah
CR equ 0dh
STDIN equ 0
STDOUT equ 1
BUFLEN equ 8
.code
org 0100h
main proc
@@loop:
mov ah, 3fh ; ファイル/デバイスの読み出し
mov dx, offset inbuf
mov cx, BUFLEN ; 読み込むバイト数
mov bx, STDIN
int 21h
cmp ax, 2 ; 2バイト以下なら終了
jbe @@exit
mov cx, ax
mov si, offset inbuf
cld
call atoi
mov ax, dx
call printd
mov ah, 09h
mov dx, offset crlf
int 21h
int 21h
jmp @@loop
@@exit:
mov ax, 4c00h
int 21h
main endp
atoi proc
mov dx, 0
@@loop:
lodsb
cmp al, '0'
jb @f
cmp al, '9'
ja @f
sub al, '0'
jmp @@next
@@:
cmp al, 'a'
jb @f
cmp al, 'f'
ja @f
sub al, 'a' - 10
jmp @@next
@@:
ret
@@next:
shl dx, 4
or dl, al
loop @@loop
ret
atoi endp
printd proc
mov bx, offset numbuf_end
mov cx, 10
@@loop:
mov dx, 0
div cx
add dl, '0'
dec bx
mov [bx], dl
cmp ax, 0
jne @@loop
mov ah, 40h ; ファイル/デバイスの書き込み
mov dx, bx
mov cx, offset numbuf_end ; 書き込むバイト数
sub cx, bx
mov bx, STDOUT
int 21h
ret
printd endp
inbuf db BUFLEN dup (?)
numbuf db 5 dup (?)
numbuf_end label byte
crlf db CR, LF, '$'
end main

最終更新:2018年08月19日 21:22