900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 英文打字训练程序c语言 x86汇编实现英文打字练习软件

英文打字训练程序c语言 x86汇编实现英文打字练习软件

时间:2018-06-19 22:35:58

相关推荐

英文打字训练程序c语言 x86汇编实现英文打字练习软件

目的:

编写英文打字练习软件,综合复习字符输入和显示,置光标、开窗口、颜色设置等屏幕功能;掌握分支程序中字符比较及统计的程序设计,循环及排序程序设计方法;加入中断调用的计时功能。通过上述综合性训练,进一步加深对汇编语言的理解和提高程序设计技能。

内容:

1.屏幕出现打字练习菜单(格式自定,字体、字号、颜色)

2.菜单项目为4项:照打,覆盖打,名次,退出

程序框图:

程序框图

代码实现

```

data segment

menu db 0ah,0dh,' Input number to chose your function'

db 0ah,0dh,' 1.Follow Typing'

db 0ah,0dh,' 2.Cover Typing'

; db 0ah,0dh,' 3.Ranking'

db 0ah,0dh,' 3.Exit'

db 0ah,0dh,'Please input your select:$'

mess1 db 0ah,0dh,'This is the Follow Typing page.'

db 0ah,0dh,' Please input accordance with those word!$'

mess2 db 0ah,0dh,'This is the Cover Typing page.'

db 0ah,0dh,' Please input accordance with those word!'

db 0ah,0dh,'(Yellow is right, Red is wrong!)$'

mess3 db 0ah,0dh,'This is third select$'

mess4 db 0ah,0dh,'Thank you for your use!$'

mess5 db 0ah,0dh,'Your right number is:$'

endline db 0ah,0dh,'$'

mess db 255,?,255 dup(?)

text db 'New strides have been taken in strengthening national defense and army building.$'

right db '0$'

sum db '/80$'

num db 0

data ends

code segment

assume cs:code,ds:data

start:

mov ax,data

mov ds,ax

let0:

mov ax,0

mov dx,offset menu;显示菜单

mov ah,9

int 21h

mov ah,1;输入选择

int 21h

cmp al,'1';输入为1,跳转到照打界面

jz prog1

cmp al,'2';输入为2,跳转到覆盖打界面

jz prog2

cmp al,'3';输入为3,跳转到名次界面

jz prog3

jmp prog4;输入不为1或2或3,退出程序

prog1:

jmp real_prog1

prog2:

jmp real_prog2

prog3:

jmp real_prog3

prog4:

jmp real_prog4

real_prog1:;照打界面

mov ax,0003h;清屏

int 10h

mov dx,offset mess1;显示提示信息

mov ah,9

int 21h

mov dx,offset endline;换行

int 21h

mov dx,offset endline;换行

int 21h

mov dx,offset text;显示文章

mov ah,9

int 21h

mov dx,offset endline;换行

int 21h

mov dx,offset mess;输入串

mov ah,10

int 21h

;输入完毕,开始进行循环比较

mov ax,0

mov di,0;存储正确个数

mov cl,mess+1;输入的字母个数,即循环的次数

mov bx,2;第一个字符的单元位置

let1:

mov dl,text[bx-2]

cmp mess[bx],dl;判断是否输入正确

jz let2;输入正确 跳到let2

jmp out1;跳到公共出口 out1

let2:;正确数+1

add ax,1

add di,1

out1:

dec cl;循环次数-1

inc bx

cmp cl,0

jnz let1

jz out2

out2:;检查结束,输出结果

mov dx,offset mess5

mov ah,9

int 21h

;输出正确个数

mov ax,di

mov bl,10

div bl

add ah,'0'

mov right,ah

add al,'0'

mov dl,al

mov ah,2

int 21h

mov dl,right

mov ah,2

int 21h

mov right,0;重置right为0

mov di,0

mov dx,offset sum

mov ah,9

int 21h

jmp let0;返回选择菜单

real_prog2:;覆盖打界面

mov dx,offset mess2

mov ah,9

int 21h

mov ax,0003h;清屏

int 10h

;置显示光标

mov ah,2

mov dh,4

mov dl,0

mov bh,0

int 10h

;显示串

mov dx,offset mess2

mov ah,9

int 21h

mov dx,offset endline;换行

int 21h

mov dx,offset endline;换行

int 21h

mov dx,offset text

mov ah,9

int 21h

;置输入光标

mov ah,2

mov dh,9

mov dl,0

int 10h

mov si,80;循环次数

mov bx,0;第一个字符的单元位置

mov di,0;正确个数

mov num,0;显示列的位置

prog2_let1:

;输入字符

mov ah,1

int 21h

mov dl,text[bx]

cmp al,0DH;判断是否输入回车

jz prog2_out2

cmp al,dl;判断是否输入正确

jz prog2_let2;输入正确 跳到let2

cmp al,dl

jnz prog2_let3;输入错误,跳到let3

jmp prog2_out1;跳到公共出口out1

prog2_let2:

add di,1;正确数+1

;输入正确,改变为黄色

mov ah,06h

mov al,0

mov bh,0eh

mov ch,8

mov cl,num

mov dh,9

mov dl,num

int 10h

;置显示光标

mov ah,2

mov dh,9

mov dl,num

mov bh,0

int 10h

mov dl,text[bx]

mov ah,2

int 21h

jmp prog2_out1;跳到公共出口out1

prog2_let3:

;输入错误,响铃

mov ah,2

mov dl,7

int 21h

;输入错误,改变为红色

mov ah,06h

mov al,0

mov bh,04h

mov ch,8

mov cl,num

mov dh,9

mov dl,num

int 10h

;置显示光标

mov ah,2

mov dh,9

mov dl,num

mov bh,0

int 10h

mov dl,text[bx]

mov ah,2

int 21h

jmp prog2_out1;跳到公共出口out1

prog2_out1:

dec si;循环次数-1

inc bx

inc num

cmp si,0

jnz jump_prog2_let1;si≠0,继续循环

jz prog2_out2

jump_prog2_let1:

jmp prog2_let1

prog2_out2:;循环结束,输出结果

mov dx,offset mess5

mov ah,9

int 21h

;输出正确个数

mov ax,di

mov bl,10

div bl

add ah,'0'

mov right,ah

;add al,74

add al,'0'

mov dl,al

mov ah,2

int 21h

mov dl,right

mov ah,2

int 21h

mov right,0;重置正确个数为0

mov di,0

mov dx,offset sum

mov ah,9

int 21h

jmp let0

real_prog3:;名次界面

mov dx,offset mess3

mov ah,9

int 21h

jmp let0;返回选择菜单

real_prog4:;退出

mov dx,offset mess4

mov ah,9

int 21h

mov ah,4ch

int 21h

code ends

end start

```

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。