htoa.asm

来自「汇编编程艺术」· 汇编 代码 · 共 92 行

ASM
92
字号
StdGrp		group	stdlib,stddata
stddata		segment	para public 'sldata'
stddata		ends
;
stdlib		segment	para public 'slcode'
		assume	cs:stdgrp
		extrn	sl_malloc:far
;
;
; Modification 10/22/91 due to comments by David Holm (dgh on BIX).
;
;
; HTOA- Converts value in AL to a string of length two containing two
;	hexadecimal characters.  Stores result into string at address
;	ES:DI.
;
; HTOA2-Just like HTOA except it does not preserve DI.
;
		public	sl_htoa
sl_htoa		proc	far
		push	di
		call	far ptr sl_htoa2
		pop	di
		ret
sl_htoa		endp
;
;
		public	sl_htoa2
sl_htoa2	proc	far
		push	ax
		call	hextoa
		mov	byte ptr es:[di], 0
		clc				;Needed by sl_htoam
		pop	ax
		ret
sl_htoa2	endp
;
;
; WTOA- Converts the binary value in AX to a string of four hexadecimal
;	characters.
;
; WTOA2-Like the above, except it does not preserve DI.
;
		public	sl_wtoa
sl_wtoa		proc	far
		push	di
		call	far ptr sl_wtoa2
		pop	di
		ret
sl_wtoa		endp
;
		public	sl_wtoa2
sl_wtoa2	proc	far
		push	ax
		xchg	al, ah
		call	hextoa
		xchg	al, ah
		call	hextoa
		mov	byte ptr es:[di], 0
		clc				;Needed by sl_wtoam
		pop	ax
		ret
sl_wtoa2	endp
;
;
;
hextoa		proc	near
		push	ax
		mov	ah, al
		shr	al, 1
		shr	al, 1
		shr	al, 1
		shr	al, 1
		cmp	al, 0ah		;Magic sequence to convert 0-F to
		sbb	al, 69h		; "0"-"F".  By DGH
		das
		mov	es:[di], al
		inc	di
		mov	al, ah
		and	al, 0fh
		cmp	al, 0ah		;See above comment
		sbb	al, 69h
		das
		mov	es:[di], al
		inc	di
		pop	ax
		ret
hextoa		endp
;
stdlib		ends
		end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?