汇编--十六进制数输出

本文讲述如何编写一段子程序BINIHEX,完成十六进制数输出的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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
-->