📄 sum.asm
字号:
INCLUDE filefuc.mac
PUBLIC QIUHE
STSG SEGMENT STACK 'S'
DW 32 DUP(?)
STSG ENDS
DATA SEGMENT
GILF DB '0'
REPMM DW ?
REPS DW ?
NGF DW ?
GIFL DB ?
SHUZU DW 30 DUP(?)
DB '$'
FILENAME DB 'F:\first.txt',0
CT EQU $-BUFFER
FILEHANDLE DW 2
SAS DB 7
DB ?
DB 7 DUP(?)
BUF DB 10
DB ?
DB 10 DUP(?)
BUFS DB 1020 DUP(' ')
DATA ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
QIUHE PROC FAR
ASSUME CS:CODES,DS:DATA,SS:STACKS
PUSHREG
push DS
LOADDS DATA
OPENFILE FILENAME,FILEHANDLE;打开文件
READFILE 1020,BUFS,FILEHANDLE;读取文件数据
MOV BX,-18
KKSS:
ADD BX,45
CMP BX,1020;判断是否所有记录成绩求和
JA PPSSMM
MOV CL,1
MOV DX,0;初始化成绩总合为零
XOR AH,AH
MOV AL,BUFS[BX];第一门成绩由ASCII转换为二进制
SUB AL,48
CMP AL,0
JL KK
CMP AL,9
JA KK
MUL CL
ADD DX,AX;将第一门成绩个位加入DX
MOV AL,CL
PUSH BX
MOV BL,10
MUL BL
POP BX
MOV CL,AL
KK: XOR AH,AH
DEC BX
MOV AL,BUFS[BX]
SUB AL,48
CMP AL,0
JL KKS
CMP AL,9
JA KKS
MUL CL
ADD DX,AX;将第一门成绩十位加入DX
MOV AL,CL
PUSH BX
MOV BL,10
MUL BL
POP BX
MOV CL,AL
KKS:
XOR AH,AH
DEC BX
MOV AL,BUFS[BX]
SUB AL,48
CMP AL,0
JL PPSS
CMP AL,9
JA PPSS
MUL CL
ADD DX,AX;将第一门成绩百位加入DX
PPSS:;第二门成绩由ASCII转换为二进制
MOV CL,1
XOR AH,AH
DEC BX
MOV AL,BUFS[BX]
SUB AL,48
CMP AL,0
JL KKM
CMP AL,9
JA KKM
MUL CL
ADD DX,AX
MOV AL,CL
PUSH BX
MOV BL,10
MUL BL
POP BX
MOV CL,AL
KKM: XOR AH,AH
DEC BX
MOV AL,BUFS[BX]
SUB AL,48
CMP AL,0
JL KKSM
CMP AL,9
JA KKSM
MUL CL
ADD DX,AX
MOV AL,CL
PUSH BX
MOV BL,10
MUL BL
POP BX
MOV CL,AL
KKSM:
XOR AH,AH
DEC BX
MOV AL,BUFS[BX]
SUB AL,48
CMP AL,0
JL PPSSM
CMP AL,9
JA PPSSM
MUL CL
ADD DX,AX
PPSSM:
MOV CL,1
XOR AH,AH
DEC BX
MOV AL,BUFS[BX]
SUB AL,48
CMP AL,0
JL KKMM
CMP AL,9
JA KKMM
MUL CL
ADD DX,AX
MOV AL,CL
PUSH BX
MOV BL,10
MUL BL
POP BX
MOV CL,AL
KKMM: XOR AH,AH
DEC BX
MOV AL,BUFS[BX]
SUB AL,48
CMP AL,0
JL KKSMM
CMP AL,9
JA KKSMM
MUL CL
ADD DX,AX
MOV AL,CL
PUSH BX
MOV BL,10
MUL BL
POP BX
MOV CL,AL
KKSMM:
XOR AH,AH
DEC BX
MOV AL,BUFS[BX]
SUB AL,48
CMP AL,0
JL KSD
CMP AL,9
JA KSD
MUL CL
ADD DX,AX
KSD:
MOV CL,1
XOR AH,AH
DEC BX
MOV AL,BUFS[BX]
SUB AL,48
CMP AL,0
JL KKMMS
CMP AL,9
JA KKMMS
MUL CL
ADD DX,AX
MOV AL,CL
PUSH BX
MOV BL,10
MUL BL
POP BX
MOV CL,AL
KKMMS: XOR AH,AH
DEC BX
MOV AL,BUFS[BX]
SUB AL,48
CMP AL,0
JL KKSMMS
CMP AL,9
JA KKSMMS
MUL CL
ADD DX,AX
MOV AL,CL
PUSH BX
MOV BL,10
MUL BL
POP BX
MOV CL,AL
KKSMMS:
XOR AH,AH
DEC BX
MOV AL,BUFS[BX]
SUB AL,48
CMP AL,0
JL HJ
CMP AL,9
JA HJ
MUL CL
ADD DX,AX
HJ:;将各科成绩总和的二进制表示转换为ASCII码
MOV AX,DX
MOV CL,100
DIV CL;求取总分百位部分的数字
ADD AL,48;将百位数字转换为ASCII
MOV BUFS[BX+12],AL;将ASCII存入原记录
MOV AL,AH
XOR AH,AH
MOV CL,10
DIV CL;求取总分十位部分的数字
ADD AL,48;将十位数字转换为ASCII
MOV BUFS[BX+13],AL;将ASCII存入原记录
MOV AL,AH
MOV AL,AH
XOR AH,AH
MOV CL,1
DIV CL;求取总分个位部分的数字
ADD AL,48;将个位数字转换为ASCII
MOV BUFS[BX+14],AL;将ASCII存入原记录
MOV AL,AH
JMP KKSS
PPSSMM:
MOV AH,42H
MOV BX,FILEHANDLE
MOV CX,0
MOV DX,0
MOV AL,0
INT 21H
WRITEFILE 1020,BUFS,FILEHANDLE
CLOSEFILE FILEHANDLE
pop ds
POPREG
RET
QIUHE ENDP
CODES ENDS
END QIUHE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -