作者POWERPC (PPC)
看板ASM
标题Re: [心得:x86程式码] 2位元组无号数转字串--下集
时间Wed Dec 7 10:30:34 2011
在上集中有指出一重大BUG,本集来看看如何改正过来。
上集中指出若百、千位为0将被忽视掉,因此何种场合百、千位会为0?
依程式运作来看当然不会是小於100的值,所以只有是5位数的值才符合条件,
因此只要碰到5位数目时,在处理其万位之後再作个判断即可。
以下修改完程式码中,有标 ;* 注解者为新加入。
;
; 2位元组无号数据转字串
;
; 输入: AX=值 ; ES:DI=字串存放处
;
; 返回: AL=字串长度(1~5)
;
TOW_BYTE2DEC_STRING:
OR AX,AX
JZ ZERO_NUM
PUSH BX
PUSH CX
PUSH DX
XOR CL,CL
CMP AX,10000
JB TH_NUM
XOR DX,DX
MOV BX,10000
DIV BX
ADD AL,'0'
STOSB
MOV AX,DX
INC CL
CMP AX,100 ;*
JAE TH_NUM3 ;*
PUSH AX ;*
MOV AX,'00' ;*
STOSW ;*
INC CL ;*
INC CL ;*
POP AX ;*
JMP T_NUM ;*
TH_NUM:
CMP AX,100
JB T_NUM
TH_NUM3: ;*
MOV BL,100
DIV BL
MOV CH,AH
AAM
OR CL,CL
JNZ TH_NUM1
OR AH,AH
JNZ TH_NUM1
ADD AL,'0'
STOSB
JMP TH_NUM2
TH_NUM1:
XCHG AH,AL
ADD AX,'00'
STOSW
INC CL
TH_NUM2:
INC CL
MOVZX AX,CH
T_NUM:
OR AL,AL
JZ Z_NUM
AAM
OR CL,CL
JNZ T_NUM1
OR AH,AH
JNZ T_NUM1
ADD AL,'0'
STOSB
INC CL
MOV AL,CL
POP DX
POP CX
POP BX
RETN
T_NUM1:
XCHG AH,AL
Z_NUM:
ADD AX,'00'
STOSW
INC CL
INC CL
MOV AL,CL
POP DX
POP CX
POP BX
RETN
ZERO_NUM:
MOV AL,'0'
STOSB
MOV AL,1
RETN
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.115.19.228
1F:推 TaiwanXDman:推一个 其实我写x86习惯用小写 这样看好累QQ 12/07 10:41
2F:→ POWERPC:大写在公开场合比较正式 XD,虽然字母O与数目的0很相似... 12/07 13:00
3F:推 jason12308:写CODE还有分在私人场合还是公开场合喔XDDDDDDDDDDD 12/07 17:57
4F:→ tomnelson:组译後出来的机器码不都一样? XDDDDDDDDDDDDDDDDDDDDDDD 12/07 21:33