;约定单元法
;子程序将BUF中的16位无符号二进制转换为P进制显示输出
STACK SEGMENT STACK
DW 128 DUP(0)
STACK ENDS
DATA SEGMENT
A DW 1234H,4352H,3A62H,6390H
N DW ($-A)/2
BUF DW ?
STR DW 15 DUP(?)
P DW ?
J DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV CX,N
LEA DI,A
L: MOV AX,[DI]
MOV BUF,AX
MOV P,8
MOV J,'Q'
CALL BCP
MOV P,10
MOV J,'H'
CALL BCP
ADD DI,2
LOOP L
MOV AH,4CH
INT 21H
;入口:BUF缓冲区中存放待转换的二进制,P中存放待转换制基数
;J中存放数制的后缀,STR是存放转换数字的缓冲区
;出口:STR缓冲区中存放转换的结果
BCP PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
MOV AX,BUF
LEA SI,STR
MOV BX,P
MOV CX,0
L1: MOV DX,0
DIV BX
PUSH DX
INC CX
OR AX,AX
JNZ L1
L2: POP AX
CMP AL,10
JB L3
ADD AL,7H
L3: ADD AL,30H
MOV [SI],AL
INC SI
LOOP L2
MOV AL,J
MOV [SI],AL
MOV [SI+1], BYTE PTR 0DH
MOV [SI+2], BYTE PTR 0AH
MOV [SI+3], BYTE PTR '$'
LEA DX,STR
MOV AH,9
INT 21H
POP SI
POP DX
POP CX
POP BX
POP AX
RET
BCP ENDP
CODE ENDS
END START