📄 c.asm
字号:
xor cx,cx
cmp swapped,0
jnz m00
ret
m00: mov di, savdi
set_p1 6
input english
set_p1 7
input computer
set_p1 8
input chinese
add di,25
mov cl,english+1
lea si,eng
cmp cl,3
jz m10
inc di
cmp cl,2
jz m10
inc di
cmp cl,1
jz m10
inc di
m10: rep movsb
add di,4
mov cl,computer+1
lea si,com
cmp cl,3
jz m20
inc di
cmp cl,2
jz m20
inc di
cmp cl,1
jz m20
inc di
m20: rep movsb
add di,4
mov cl,chinese+1
lea si,chi
cmp cl,3
jz m30
inc di
cmp cl,2
jz m30
inc di
cmp cl,1
jz m30
inc di
m30: rep movsb
ret
modify endp
;--------------------------------------------------------------------------
;功 能:删除指定记录
;入口参数:
;出口参数:
;说 明:
delete proc near
call query
mov di, savdi
add di,42
mov si,di
mov di,savdi
mov al,42
mul Recordcount
mov cx,ax
rep movsb
ret
delete endp
;--------------------------------------------------------------------------
;功 能:查找匹配记录项
;入口参数:
;出口参数:
;说 明:
query proc near
clear1
clear2
cld
mov bl,RecordCount1
mov RecordCount,bl
set_p1 4
input names
set_p1 5
input number
lea si,nam
lea di,nasav
xor cx,cx
mov cl,act1
rep movsb
mov cl,15
sub cl,act1
mov al,20h
rep stosb
lea di,nasav
add di,19
lea si,num
mov cl,act2
cmp cx,2
jz qu00
inc di
qu00: rep movsb
lea di,stutab
mov bx,si
mov swapped,0
qu10:
lea si,nasav
mov savdi,di
xor cx,cx
mov cl,21
repe cmpsb
jz qu30
mov di,savdi
dec RecordCount
add di,42
cmp RecordCount,0
jz qu11
jmp qu10
qu11:
set_p2
show err1
ret
qu30:
mov di,savdi
set_p2
show mess11
mov cx,42
mov si,di
lea di,sav
rep movsb
show sav
mov swapped,1
ret
query endp
;--------------------------------------------------------------------------
;功 能:统计三个分数段(0-59,60-79,80-100)的人数
;入口参数:
;出口参数:
;说 明:
cot proc near
push ax
push bx
push cx
push dx
mov bl,RecordCount1
mov RecordCount,bl
mov bl,0
mov be60,bl
mov be80,bl
mov be100,bl
xor cx,cx
lea di,stutab
sub di,42
set_p2
show mess14
show mess15
xor ax,ax
mov ah,1
int 21h
add di,25
cmp al,'1'
jz c10
add di,7
cmp al,'2'
jz c10
add di,7
cmp al,'3'
jz c10
show err3
pop dx
pop cx
pop bx
pop ax
ret
c10: show cf
add di,42
mov bl,[di]
cmp bl,'1'
jnz c11
inc be100
dec RecordCount
cmp RecordCount,0
jnz c10
pop dx
pop cx
pop bx
pop ax
ret
c11: inc di
mov bl,[di]
dec di
cmp bl,'6'
jnb c12
inc be60
dec RecordCount
cmp RecordCount,0
jnz c10
pop dx
pop cx
pop bx
pop ax
ret
c12: cmp bl,'8'
jnb c13
inc be80
dec RecordCount
cmp RecordCount,0
jnz c10
pop dx
pop cx
pop bx
pop ax
ret
c13: inc be100
dec RecordCount
cmp RecordCount,0
jnz c10
pop dx
pop cx
pop bx
pop ax
ret
cot endp
;--------------------------------------------------------------------------
;功 能:输出三个分数段的人数
;入口参数:
;出口参数:
;说 明:先调用分数段人数的统计函数cot,再调用此函数
cprint proc near
push ax
push bx
push cx
push dx
show mess01
xor bx,bx
mov bl,be60
call convert
show cf
show mess02
xor bx,bx
mov bl,be80
call convert
show cf
show mess03
xor bx,bx
mov bl,be100
call convert
show cf
pop dx
pop cx
pop bx
pop ax
ret
cprint endp
;--------------------------------------------------------------------------
;功 能:数字进制转化
;入口参数:(bl)(=be60,be80,be100)
;出口参数:
;说 明:通过调用bindec实现
CONVERT PROC
CALL BINDEC
RET
CONVERT ENDP
;--------------------------------------------------------------------------
;功 能:将分数段人数的统计结果(二进制)转化为十进制
;入口参数:(bl)(=be60,be80,be100)
;出口参数:
;说 明:
BINDEC PROC
MOV CX,100
CALL DEC_DIV
MOV CX,10
CALL DEC_DIV
MOV CX,1
CALL DEC_DIV
RET
BINDEC ENDP
;--------------------------------------------------------------------------
;功 能:将分数段人数的统计结果(二进制)转化为十进制并输出
;入口参数:(cx)(=100,10,1),(bl)(=be60,be80,be100)
;出口参数:
;说 明:
DEC_DIV PROC
MOV AX,BX
MOV DX,0
DIV CX
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H
RET
DEC_DIV ENDP
;--------------------------------------------------------------------------
;功 能:输出所有记录信息
;入口参数:
;出口参数:
;说 明:
list proc near
call print
ret
list endp
;--------------------------------------------------------------------------
;功 能:读取文件中保存的记录信息并据其给stutab赋上相应的值
;入口参数:fname(='F:\st.txt')
;出口参数:stutab(=fname中保存的记录信息)
;说 明:
read proc near
push ax
push bx
push cx
push dx
clear1
clear2
set_p2
show mess11
mov dx,offset fname
mov al,2
mov ah,3dh
int 21h
mov bx,ax
lea di,stutab
again:
mov dx,offset buffer1
mov cx,42
mov ah,3fh
int 21h
cmp ax,0
je p
mov cx,42
lea si,buffer1
rep movsb
inc RecordCount1
inc RecordCount
jmp again
p:
mov ah,3eh
int 21h
set_p3
pop dx
pop cx
pop bx
pop ax
ret
read endp
;--------------------------------------------------------------------------
;功 能:把所有项目信息stutab保存到文件fname('f:\st.txt')中
;入口参数:stutab
;出口参数:fname(保存stutab中的记录信息)
;说 明:
write proc near
push ax
push bx
push cx
push dx
push si
mov ah,3ch
mov cx,00
lea dx,fname
int 21h
mov handle,ax
mov bx,handle
mov ah,3eh
int 21h
sub ax,ax
mov retemp,al
lea si,stutab
mov dx,offset fname
mov al,2
mov ah,3dh
int 21h
wloop:
lea di,buffer1
mov cx,42
rep movsb
lea dx,buffer1
mov cx,42
mov ah,40h
int 21h
dec RecordCount
mov al,RecordCount
jz wrout
jmp wloop
wrout:
mov bx,handle
mov ah,3eh
int 21h
pop si
pop dx
pop cx
pop bx
pop ax
ret
write endp
;--------------------------------------------------------------------------
;功 能:输出所有项目信息
;入口参数:stutab
;出口参数:
;说 明:
print proc near
clear1
clear2
set_p2
show mess11
lea si,stutab
mov dh,RecordCount1
mov RecordCount,dh
p10:
lea di,sav
mov cx,42
rep movsb
show sav
add bx,42
dec RecordCount
jnz p10
ret
print endp
;--------------------------------------------------------------------------
code ends
end main
;--------------------------------------------------------------------------
;各个子函数的注释详见各个队友的报告
;预祝都是春节快乐!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -