STACKS SEGMENT STACK
DW 20H DUP(?)
TOP LABEL WORD
STACKS ENDS --定義棧
DATAS SEGMENT
TABLE DB '123456789ABCDEF'
DATAS ENDS --建一張表,對應十六進制的表示方式
CODES SEGMENT
ASSUME CS:CODE,SS:STACKS,DS:DATAS
MAIN PROC FAR
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
MOV AX,DATAS
MOV DS,AX
MOV AX,1234
CALL BINIHEX
EXIT:
MOV AH,4CH
INT 21H
MAIN ENDP
BINIHEX PROC NEAR
PUSH CX
PUSH BX
PUSH DX
--保存現場
LEA BX,TABLE --將表的首地址送到BX目的是使用XLAT指令
MOV DH,4 --循環的次數爲四次
L1: PUSH AX
AND AX,F000H --讓AX和F000H做與運算,目的是保留前四位
MOV CL,4 --設置循環左移位數爲4
RCL AX,CL --循環左移四位
XLAT --換碼指令:(AL)<--((BX)+(AL))
MOV DL,AL --將AL中的值送到DL進行輸出
MOV AH,2
INT 21H
POP AX --將求與運算之前的AX出棧
RCL AX,CL --左移四位,進行下一次運算
DEC DH --DH自減
CMP DH,0 --如果DH不等於0,則循環這段操作
JNZ L1
POP DX
POP BX
POP CX
MOV AH,4CH
INT 21H
BINIHEX ENDP
CODES ENDS END MAIN