看板 ASM 關於我們 聯絡資訊
在上集中有指出一重大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
TaiwanXDman:推一個 其實我寫x86習慣用小寫 這樣看好累QQ 12/07 10:41
POWERPC:大寫在公開場合比較正式 XD,雖然字母O與數目的0很相似... 12/07 13:00
jason12308:寫CODE還有分在私人場合還是公開場合喔XDDDDDDDDDDD 12/07 17:57
tomnelson:組譯後出來的機器碼不都一樣? XDDDDDDDDDDDDDDDDDDDDDDD 12/07 21:33