⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.mac

📁 Student学生成绩管理系统是一个使用MASM宏汇编语言开发的试验性项目。它实现了学生学号、姓名、三门课程成绩的录入、修改、删除以及总成绩计算、按成绩排序等功能
💻 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 + -