📄 hf5.asm
字号:
stack segment stack
dw 100 dup(?)
stack ends
date segment
english db 'please input the words'
b1 db 1000h dup('$')
b2 db 1000h dup('a')
b3 db 'I know this word',0ah,0dh,'$'
b4 db 'I dont know this word',0ah,0dh,'$'
b5 db 'please insert 1 2 3or4',0ah,0dh,'$'
x db 0
y db 0
z dw 205eh
b6 db 1000h dup('$')
r db 0
b7 db 'x','/','y',0ah,0dh,'$'
b8 db 'The rate of the right words is',0ah,0dh,'$'
b9 db 'The following words are you do not know, please remember them agian',0ah,0dh,'$'
date ends
code segment
assume cs:code,ds:date,ss:stack
start: mov ax,date
mov ds,ax
mov ah,09h;显示字符串
lea si, english
mov dx,si
int 21h
mov ah,02h;回车换行
mov dl,0dh
int 21h
mov ah,02h
mov dl,0ah
int 21h
lea di,b2;存入数据
mov dx,di
mov ah,0ah
int 21h
lea di,b2;记录单词总个数
v0:mov dl,[di]
cmp dl,20h
jz v1
cmp dl,0dh
jz v2
v3: inc di
jmp v0
v1:inc y
jmp v3
v2:inc y
mov ah,02h;回车换行
mov dl,0dh
int 21h
mov ah,02h
mov dl,0ah
int 21h
call zi1
call zi4;输出不认识的单词
mov ah,4ch
int 21h
zi1 proc
push ax
push bx
push cx
push dx
push si
push di
lea di, b2
inc di
inc di
a3:mov ah,02h;输出第n个单词
mov dl,[di]
int 21h
cmp dl,20h
jz l1
cmp dl,0dh
jz l2
inc di
jmp a3
l2: mov ah,02h;回车换行
mov dl,0dh
int 21h
mov ah,02h
mov dl,0ah
int 21h
mov dl,20h;最后一个单词处理
mov [di],dl
inc di
mov dl,[di]
mov dl,0dh
mov [di],dl
dec di
mov ah,01h;按键输入
int 21h
cmp al,'1'
jnz l3
mov ah,09h;显示认识
lea si, b3
mov dx,si
int 21h
inc x;认识单词记数
jmp a7
l3: cmp al,'2'
jnz a5
call zi2;将不认识的单词存到B6所指单元
mov ah,09h;显示不认识
lea si, b4
mov dx,si
int 21h
jmp a7
l1:mov ah,02h;回车换行
mov dl,0dh
int 21h
mov ah,02h
mov dl,0ah
int 21h
put:mov ah,01h;按键输入
int 21h
cmp al,'1'
jnz a4
mov ah,09h;显示认识
lea si, b3
mov dx,si
int 21h
inc x;认识单词记数
jmp oher
a4: cmp al,'2'
jnz a5
call zi2;将不认识的单词存到B6所指单元
mov ah,09h;显示不认识
lea si, b4
mov dx,si
int 21h
;inc y;单词记数
jmp oher
a5: cmp al,'3'
jnz a6
call zi2;将不认识的单词存到B6所指单元
oher:inc di
cmp dl,0dh;判断是否是最后一个单词
jz a7
jmp a3;指向下一个单词
a6:cmp al,'4'
jnz a8
call zi3
mov ah,02h;回车换行
mov dl,0dh
int 21h
mov ah,02h
mov dl,0ah
int 21h
noback:dec di
mov dl,[di]
cmp dl,20h
jz back
jmp noback
back:inc di
jmp a3
a8:mov ah,09h;显示请输入1,2,3或4
lea si, b5
mov dx,si
int 21h
jmp put
a7: mov ah,02h;回车换行
mov dl,0dh
int 21h
mov ah,02h
mov dl,0ah
int 21h
lea si,x;将X,Y的值放入B7所指定的位置
mov bl,[si]
cmp bl,09h
ja p1
add bl,30h
jmp p2
p1:add bl,37h
p2:lea di,b7
mov [di],bl
inc di
inc di
lea si,y
mov bl,[si]
cmp bl,09h
ja p11
add bl,30h
jmp p22
p11:add bl,37h
p22:mov [di],bl
lea dx,b8;显示比率
mov ah,09h
int 21h
lea dx,b7
mov ah,09h
int 21h
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
zi1 endp
zi2 proc
push ax
push bx
push cx
push dx
push si
push di
dec di
m1:mov al,[di];退回到此单词首字母
cmp al,20h
jz m2
cmp al,40h
jna m2
dec di
jmp m1
m2:inc di
lea si,b6;将不认识的单词放到B6所指单元
mov si,z;保留SI的地址
m4:mov al,[di]
mov [si],al
cmp al,20h
jz m3
cmp al,0dh
jz m3
inc si
inc di
jmp m4
m3:inc si
mov z,si;保留SI的地址
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
zi2 endp
zi3 proc
push ax
push bx
push cx
push dx
push si
push di
inc r
go: dec di;指向上一个单词
upp:mov cl,[di]
cmp cl,20h
jz upp1
cmp cl,40h;判断是否是第一个单词
jna upp2
dec di
jmp upp
upp1:dec di
mov cl,[di]
cmp cl,20h
jz upp2
cmp cl,40h;判断是否是第一个单词
jna upp2
jmp upp1
upp2 :inc di
c3:mov ah,02h;输出第n个单词
mov dl,[di]
int 21h
cmp dl,20h
jz f1
inc di
jmp c3
f1:mov ah,02h;回车换行
mov dl,0dh
int 21h
mov ah,02h
mov dl,0ah
int 21h
pu:mov ah,01h;按键输入
int 21h
cmp al,'1'
jnz c4
mov ah,09h;显示认识
lea si, b3
mov dx,si
int 21h
jmp ohe
c4: cmp al,'2'
jnz c5
mov ah,09h;显示不认识
lea si, b4
mov dx,si
int 21h
jmp ohe
c5: cmp al,'3'
jnz c6
ohe:dec r
inc di
cmp r,0;判断是否是最后一个单词
jz c7
jmp c3;指向下一个单词
c6:cmp al,'4'
jnz c8
inc r;退到第几个单词
jmp go
c8:mov ah,09h;显示请输入1,2,3或4
lea si, b5
mov dx,si
int 21h
jmp pu
c7:pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
zi3 endp
zi4 proc
push ax
push bx
push cx
push dx
push si
push di
lea dx,b9;输出不认识的单词
mov ah,09h
int 21h
lea dx,b6
mov ah,09h
int 21h
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
zi4 endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -