Re: [心得:x86程式碼] 2位元組無號數轉字串--下集

看板ASM (組合語言)作者 (PPC)時間13年前 (2011/12/07 10:30), 編輯推噓2(202)
留言4則, 4人參與, 最新討論串1/1
在上集中有指出一重大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

12/07 10:41, , 1F
推一個 其實我寫x86習慣用小寫 這樣看好累QQ
12/07 10:41, 1F

12/07 13:00, , 2F
大寫在公開場合比較正式 XD,雖然字母O與數目的0很相似...
12/07 13:00, 2F

12/07 17:57, , 3F
寫CODE還有分在私人場合還是公開場合喔XDDDDDDDDDDD
12/07 17:57, 3F

12/07 21:33, , 4F
組譯後出來的機器碼不都一樣? XDDDDDDDDDDDDDDDDDDDDDDD
12/07 21:33, 4F
文章代碼(AID): #1Eti_D5B (ASM)
文章代碼(AID): #1Eti_D5B (ASM)