您的位置:澳门402永利com > 操作系统 > x86汇编完结意大利共和国语打字演练软件,系统

x86汇编完结意大利共和国语打字演练软件,系统

发布时间:2019-09-23 20:45编辑:操作系统浏览(138)

    一、实验目的

    目的:

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

    1、熟悉操作系统的系统功能调用。

    内容:

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

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

    2、掌握用C语言实现系统功能调用的方法和步骤。

    程序框图:

    图片 1

    程序框图

    3、掌握利用10H号功能调用(BIOS的显示I/O功能调用)来实现对屏幕的操作与控制。

    代码实现

    ```

    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

    ```

    二、实验内容

    1、在屏幕的指定区域内显示字符串。(必做题)

    2、在屏幕的制定区域内画框,在框内显示字符串。(提高题)

    3、在屏幕上指定区域内画框并以动画形式显示字符串。(选做题)

    清屏子程序:

    void cls(void)

    { union REGS r;

      r.h.ah=6; /*子功能号*/

      r.h.al=0;   

    r.h.ch=0; /*左上角坐标*/

      r.h.cl=0;

      r.h.dh=24; /*右下角坐标*/

      r.h.dl=79;

      r.h.bh=7; /*7表示黑色*/

      int86(0x10,&r,&r); /*系统功能调用*/

     }

    定位子程序:

    void locate(int x, int y)

    { union REGS r;

      r.h.ah=2; /*子功能号*/

      r.h.dh=x; /*定位点坐标*/

    r.h.dl=y;

    r.h.bh=0;

    int86(0x10,&r,&r);

    }

    在指定位置写参数:

    void writech(int x , int y, char ch ,int attr)

    { union REGS r;

      locate(x ,y);

      r.h.ah=9;

      r.h.bh=0;

      r.h.al=ch;

    r.h.bl=attr

    r.x.cx=1;

    int86(0x10,&r,&r);

    }

    屏幕画框可以用制表符来画。其主要方法是不断调用writech函数,在指定区域周围显示制表符,从而勾勒出一个窗口的轮廓。

    制表符   ASCII码

    ┛ 217

    ┏ 218

    ┓ 191

    ┗ 192

    ┃ 179

    ━ 196

    本文由澳门402永利com发布于操作系统,转载请注明出处:x86汇编完结意大利共和国语打字演练软件,系统

    关键词: