📄 string.mac
字号:
; --------------------------------------------------------------------
; 数据处理宏指令库 - STRING.MAC
; --------------------------------------------------------------------
; (0AH型)ASCII转16位二进制数
; 调用:ASC_BIN ASCII缓冲区首地址, 二进制数
; 返回:OUT_NUM - 二进制数
ASC_BIN MACRO ASC_PTR, OUT_NUM
LOCAL A0, A1
PUSH AX
PUSH BX
PUSH CX
PUSH SI
MOV OUT_NUM, 0
LEA SI, ASC_PTR + 1
XOR CH, CH
MOV CL, BYTE PTR [SI]
INC SI
JCXZ A1
XOR AX, AX
A0: MOV BX, 10
MUL BX
MOV BL, [SI]
INC SI
AND BX, 0FH
ADD AX, BX
LOOP A0
LEA SI, OUT_NUM
MOV [SI], AX
A1: POP SI
POP CX
POP BX
POP AX
ENDM
; 16位二进制数转ASCII
; 调用:BIN_ASC ASCII缓冲区首地址
; AX - 二进制数
; 返回:没有无用前导0的ASCII数串
BIN_ASC MACRO ASC_PTR
LOCAL LOP1, LOP2, NZERO
PUSH DX
PUSH CX
PUSH BX
PUSH DI
LEA DI, ASC_PTR
ADD DI, 4
MOV CX, 5
MOV BX, 10
LOP1: XOR DX, DX
DIV BX
MOV [DI], DL
OR BYTE PTR [DI], 30H
DEC DI
LOOP LOP1
LEA DI, ASC_PTR
MOV CX, 4
LOP2: CMP BYTE PTR [DI], '0'
JNZ NZERO
MOV BYTE PTR [DI], ' '
INC DI
LOOP LOP2
NZERO: POP DI
POP BX
POP CX
POP DX
ENDM
; 命令解析器
; 调用:CMDINP 命令提示语地址, 用户输入的命令行
CMDINP MACRO PROMPT, USRINPUT
PUSH BX
LEA BX, USRINPUT
WINDOW 1800H, 184FH, 2FH
PUTS 1800H, PROMPT
GETS 0FFFFH, USRINPUT
POP BX
ENDM
; 0AH型字符串复制到C型
S_A2C MACRO STRA, STRC
LOCAL A0, A1
PUSH AX
PUSH SI
PUSH DI
LEA SI, STRA
LEA DI, STRC
A0: CMP BYTE PTR 2[SI], CR
JE A1
MOV AL, 2[SI]
MOV [DI], AL
INC SI
INC DI
JMP A0
A1: MOV BYTE PTR [DI], 0
POP DI
POP SI
POP AX
ENDM
; 0AH型字符串转$型
S_A2D MACRO STR
LOCAL A0, A1
PUSH AX
PUSH BX
PUSH SI
LEA BX, STR
XOR SI, SI
A0: CMP BYTE PTR 2[BX][SI], CR
JE A1
MOV AL, 2[BX][SI]
MOV [BX][SI], AL
INC SI
JMP A0
A1: MOV BYTE PTR [BX][SI], '$'
POP SI
POP BX
POP AX
ENDM
; C型字符串复制到$型
S_C2D MACRO STRC, STRD
LOCAL A0, A1
PUSH AX
PUSH DI
PUSH SI
LEA SI, STRC
LEA DI, STRD
A0: CMP BYTE PTR [SI], 0
JZ A1
MOV AL, [SI]
MOV [DI], AL
INC SI
INC DI
JMP A0
A1: MOV BYTE PTR [BX][SI], '$'
POP SI
POP DI
POP AX
ENDM
; 交换两个学生记录
; 调用:SI - 源地址
; DI - 目标地址
SWPINFO MACRO
LOCAL SWP
PUSH CX
PUSH BX
PUSH AX
XOR BX, BX
MOV CX, 36
SWP: MOV AL, [SI + BX]
MOV AH, [DI + BX]
MOV [DI + BX], AL
MOV [SI + BX], AH
INC BX
LOOP SWP
POP AX
POP BX
POP CX
ENDM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -