BX(無符號),如BX=20輸出0000000000010100B,用LOOP實現。BX,如BX=12345輸出3039H,用LOOP實現。利用ROL/ROR循環移位將每位/每4位移至最低位,查表輸出對應字符。
DATA SEGMENT
BIN_FMT DB '0000000000000000B$' ; 16位+後綴
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV BX, 20 ; 測試值
LEA SI, BIN_FMT
MOV CX, 16 ; 16位
SHOW_BIN:
ROL BX, 1 ; 最高位移至CF
MOV DL, '0'
ADC DL, 0 ; CF=1則DL='1'
MOV [SI], DL
INC SI
LOOP SHOW_BIN
LEA DX, BIN_FMT
MOV AH, 09H
INT 21H
MOV AH, 4CH
INT 21H
CODE ENDS
END START
DATA SEGMENT
HEX_TAB DB '0123456789ABCDEF'
HEX_FMT DB '0000H$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV BX, 12345 ; 3039H
LEA SI, HEX_FMT
MOV CX, 4 ; 4個十六進制位
SHOW_HEX:
ROL BX, 4 ; 高4位移至低4位
MOV DL, BL
AND DL, 0FH ; 取低4位
XLAT ; AL=HEX_TAB[DL],需先MOV BX, OFFSET HEX_TAB
MOV [SI], AL
INC SI
LOOP SHOW_HEX
LEA DX, HEX_FMT
MOV AH, 09H
INT 21H
MOV AH, 4CH
INT 21H
CODE ENDS
END START
ROL reg, n:循環左移,高位移入低位並進入CF。ADC DL, 0:DL = DL + 0 + CF,巧妙將CF轉為字符'0'/'1'。XLAT:AL = DS:[BX + AL]查表轉換,需預置BX為表首地址。LOOP:CX--; if CX!=0 JMP,隱式使用CX作計數器。百度文庫《匯編語言程序設計》第38頁有詳細講解:鏈接