x86汇编实现德文打字演练软件,系统机能调用W

日期:2019-09-13编辑作者:系统操作

一、实验目的

目的:

编写英语打字演习软件,综合复习字符输入和出示,置光标、开窗口、颜色设置等荧屏功能;精晓分支程序中字符相比较及总括的前后相继设计,循环及排序程序设计格局;插足中断调用的计时功能。通过上述综合性陶冶,进一步加剧对汇编语言的驾驭和拉长度序设计技艺。

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

本文由今晚最快开奖现场直播发布于系统操作,转载请注明出处:x86汇编实现德文打字演练软件,系统机能调用W

关键词:

fedora 16 使用LiveCD修复grub2引导

笔者认可本人这厮太贪婪了,自从笔者的Computer装了fedora16改成双系统未来,竟然又对opensuse感兴趣了,结果扬眉吐气...

详细>>

GTK 3主旨:Adwaita Elements 0.1

GTK 3主题:Adwaita Elements   0.1 GTK3.x主题:GnomishBeige,在Ubuntu12.04中得以选择。 Adwaita Elements is a theme whose inspiration com...

详细>>

lzo文件的交互map管理,文件压缩工具集

Zutils 是一组用来管理压缩文件的工具集,协助的压缩档包涵:gzip, bzip2,lzip, and xz. 当前版本提供的命令有:zcat, zcmp...

详细>>

Absinthe越狱常见问题的解决,Linux下的iOS5设备越狱

本文的IOS5设备一般指的是iPhone4S/iPad2,在其他设备上亦可用,但未测试。 一:越狱 今天著名的黑客pod2g团队发布了...

详细>>