单片机BIOSDOS系统功能调用.docx

上传人:b****0 文档编号:9261200 上传时间:2023-05-17 格式:DOCX 页数:12 大小:54.31KB
下载 相关 举报
单片机BIOSDOS系统功能调用.docx_第1页
第1页 / 共12页
单片机BIOSDOS系统功能调用.docx_第2页
第2页 / 共12页
单片机BIOSDOS系统功能调用.docx_第3页
第3页 / 共12页
单片机BIOSDOS系统功能调用.docx_第4页
第4页 / 共12页
单片机BIOSDOS系统功能调用.docx_第5页
第5页 / 共12页
单片机BIOSDOS系统功能调用.docx_第6页
第6页 / 共12页
单片机BIOSDOS系统功能调用.docx_第7页
第7页 / 共12页
单片机BIOSDOS系统功能调用.docx_第8页
第8页 / 共12页
单片机BIOSDOS系统功能调用.docx_第9页
第9页 / 共12页
单片机BIOSDOS系统功能调用.docx_第10页
第10页 / 共12页
单片机BIOSDOS系统功能调用.docx_第11页
第11页 / 共12页
单片机BIOSDOS系统功能调用.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机BIOSDOS系统功能调用.docx

《单片机BIOSDOS系统功能调用.docx》由会员分享,可在线阅读,更多相关《单片机BIOSDOS系统功能调用.docx(12页珍藏版)》请在冰点文库上搜索。

单片机BIOSDOS系统功能调用.docx

单片机BIOSDOS系统功能调用

目录

一、课程设计目的

二、任务介绍及小组成员任务分配

三、设计思想及主要流程图

四、主要程序清单

五、运行结果及分析

六、收获、体会及建议

一、课程设计目的

1.   进一步熟悉BIOS、DOS系统功能调用,了解基本的显存读写技术;

2.了解响铃符以及利用PC扬声器发出不同频率声音的方法;

2.   学会用汇编语言编写一个较完整的实用程序,培养自己的动手操作能力;

3.学习汇编语言程序设计的基本思路和方法,编程、调试、撰写报告等;

二、任务介绍及小组成员任务分配

小组成员

任务分配

祝丹丹

写程序

林哈特

写程序

胡耀斌

写程序

三、设计思想及主要流程图

1、时间的获取

调用系统日期和时间,并将调用的日期和时间数转换成ASCII码存在系统内存区的字符串中。

将存在系统内存区的日期和时间用字符串存入显存区(显存的起始地址:

B800:

0000)并在合适的位置显示出来。

由于获取了的系统时间不会自动刷新,所以我们要设计成刷新的方式(如利用定时器中断,中断类型号为1CH)来不断获取系统的时间,这样就形成了会跳动的电子钟了。

2、屏幕特定位置显示字符

对应屏幕上的每个字符位置,显存空间都有相应的存储单元与之对应。

对应显示在屏幕上的每个字符,在存储器中由连续的两个字节表示,一个字节保存ASCII码,另一个字节保存字符的属性。

属性字节对单色显示和彩色显示都是有效的。

我们可以使用BOIS显示中断10H的各项功能来进行显示字符的编程。

3、主要流程图

主程序流程图中断处理程序流程图

四、主要程序清单

datasegment

countdw1

mess1db'------------------',0dh,0ah,'$'

infodb'Currenttimeis:

',0dh,0ah,'$';提示语

datestrdb'00-00-0000',0dh,0ah,'$';日期显示信息:

month-day-year

timestrdb'00:

00:

00',0dh,0ah,'$';时间提示信息:

hour:

minute:

second

mess2db'------------------',0dh,0ah,'$'

mess3db'Pleaseinput"Q",toquit!

',0dh,0ah,'$';提示语

dataends

codesegment

assumecs:

code,ds:

data

mainprocfar

start:

movax,data

movds,ax

movah,6;ah=06(滚动)al=00(全屏空白)

moval,0

movbh,60h;设置背景颜色和前景颜色

movcx,0

movdx,1950h;右下角行号,列号

int10h

movdh,5

movdl,24

movbh,0

movah,2

int10h

movdx,offsetmess3

movah,09h

int21h

movdh,11

movdl,24

movbh,0

movah,2

int10h

movdx,offsetmess2

movah,09h

int21h

movdh,7

movdl,24

movbh,0

movah,2

int10h

movdx,offsetmess1

movah,09h

int21h

;--------------------

movdh,8;设置到7行30列

movdl,25

movbh,0

movah,2

int10h

movdx,offsetinfo

movah,09h

int21h

;保存原中断向量

moval,1ch

movah,35h

int21h

pushes;获取1ch中断向量到es:

bx

pushbx

pushds;保存

;设置新的中断向量

movdx,offsetintpro

movax,segintpro

movds,ax

moval,1ch

movah,25h

int21h;设置中断向量ds:

dx

popds

inal,21h;读中断屏蔽寄存器

andal,11111110b;开定时器中断

out21h,al;写中断屏蔽寄存器

sti;开中断

;等待中断

s:

movah,0;调用键盘I/O中断功能号0,获取键值到AL

int16h

cmpah,10H

jzquit;是Q键,退出程序

jmps

;恢复1ch原中断向量

quit:

popdx

popds

moval,1ch

movah,25h

int21h

movax,4c00h

int21h

mainendp

;-------------------------------------------------------------------

;中断处理程序intpro

;-------------------------------------------------------------------

intproprocnear

;保护现场

pushds

pushax

pushcx

pushdx

pushbp

pushes

movax,data

movds,ax

sti

deccount

jnzexit

calldispdate;调用函数显示日期和时间

calldisptime

MOVcount,18

;声音

movdl,07

movah,2

int21h

exit:

cli

popbp

popes

popdx

popcx

popax

popds

iret

intproendp

;---------------------------------------------------------------------

;显示日期子程序dispdate

;---------------------------------------------------------------------

dispdateprocnear

pushax

pushcx

pushdx

pushsi

;获取系统日期:

入口:

ah<-2ah,出口:

cx<-year,dh<-month,dl<-day

movah,2ah

int21h

movax,cx;年份转4位ascii码

movbx,10

leasi,datestr+9;指向字符串年份最后一位

movcx,4;年份4位,循环4次

pushdx;保存月日

y:

xordx,dx;dx清零,保存余数即个位

divbx;商存ax,余数存dx

adddl,30h;转ascii码,存datestr字符串末尾

mov[si],dl

decsi

loopy

popdx;还原dx,处理日

moval,dl

xorah,ah

divbl;求日的个位,存ah,十位存al

addax,3030h;分别转ascii码

subsi,2

mov[si],ax;存日

moval,dh;处理月

xorah,ah

divbl;求月的个位,存ah,十位存al

addax,3030h;分别转ascii码

subsi,3

mov[si],ax;存日

;显示日期字符串

MOVAH,2

MOVBH,0

MOVDH,9

MOVDL,25

INT10H

movdx,offsetdatestr

movah,09h

int21h

popsi

popdx

popcx

popax

ret

dispdateendp

;--------------------------------------------------------------------

;显示时间子程序disptime

;---------------------------------------------------------------------

disptimeprocnear

pushax

pushcx

pushdx

pushsi

;获取系统时间:

入口:

ah<-2ch,出口:

ch<-hour,cl<-minute,dh<-second

movah,2ch

int21h

movbl,10

leasi,timestr

moval,ch;处理小时

xorah,ah

divbl

addax,3030h

mov[si],ax

addsi,3

moval,cl;处理分

xorah,ah

divbl

addax,3030h

mov[si],ax

addsi,3

moval,dh;处理秒

xorah,ah

divbl

addax,3030h

mov[si],ax

 

;显示时间字符串

MOVAH,2

MOVBH,0

MOVDH,10

MOVDL,25

INT10H

movdx,offsettimestr

movah,09h

int21h

popsi

popdx

popcx

popax

ret

disptimeendp

codeends

ENDSTART

五、运行结果及分析

分析:

因为设置了光标位置,所以时间显示在屏幕中间。

六、收获、体会及建议

 进一步熟悉了汇编中BIOS、DOS系统功能调用,了解基本的显存读写技术,了解了响铃符以及利用PC扬声器发出不同频率声音的方法。

虽然还没完全掌握,但是大概意思还是能晓得。

我希望下次有机会,做的更好点。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2