美文网首页
x86汇编实现英文打字练习软件

x86汇编实现英文打字练习软件

作者: 咸鱼有只喵 | 来源:发表于2017-11-25 17:01 被阅读101次

    目的:

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

    内容:

    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

    ```

    相关文章

      网友评论

          本文标题: x86汇编实现英文打字练习软件

          本文链接:https://www.haomeiwen.com/subject/ixmcbxtx.html