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
添付ファイル