IBM-PC汇编语言(⑨BIOS和DOS中断调用程序设计)

上传人:仙*** 文档编号:118640501 上传时间:2022-07-12 格式:PPTX 页数:91 大小:465.19KB
收藏 版权申诉 举报 下载
IBM-PC汇编语言(⑨BIOS和DOS中断调用程序设计)_第1页
第1页 / 共91页
IBM-PC汇编语言(⑨BIOS和DOS中断调用程序设计)_第2页
第2页 / 共91页
IBM-PC汇编语言(⑨BIOS和DOS中断调用程序设计)_第3页
第3页 / 共91页
资源描述:

《IBM-PC汇编语言(⑨BIOS和DOS中断调用程序设计)》由会员分享,可在线阅读,更多相关《IBM-PC汇编语言(⑨BIOS和DOS中断调用程序设计)(91页珍藏版)》请在装配图网上搜索。

1、开开 始始 (扩充(扩充BIOS中断向量)中断向量)18019F 6067 为用户软中断保留为用户软中断保留1A01FF 687F 不用(其中不用(其中70777077为为I/OI/O设备中断向量)设备中断向量)200217 8085 BASIC使用使用2183C3 86F0 BASIC运行时,用于解释运行时,用于解释3C43FF F1FF 未用未用:code segment assume cs:code mov ah,0 int 16h mov ah,4ch int 21h code endsendcode segment assume cs:code mov ah,2 int 16h mo

2、v ah,4ch int 21h code endsend无无 9.2 显示器显示器I/O 从上面三种不同图形显示模式的介绍,不难从上面三种不同图形显示模式的介绍,不难看出:各种显示模式在显示缓冲区存储方式上的明看出:各种显示模式在显示缓冲区存储方式上的明显差异,操作象素方法的难易程度相差也很大,所显差异,操作象素方法的难易程度相差也很大,所以,再次建议:以,再次建议:程序员不要用直接操作显示缓冲区程序员不要用直接操作显示缓冲区的办法来达到改变显示象素的目的,最好是通过的办法来达到改变显示象素的目的,最好是通过BIOSBIOS内的中断功能来实现相应的功能内的中断功能来实现相应的功能,这样,所编

3、这样,所编写的程序能很方便地适应不同的图形显示模式。写的程序能很方便地适应不同的图形显示模式。显示器的屏幕通常划分为行和列的二维系统,显示适配器显示器的屏幕通常划分为行和列的二维系统,显示适配器就在行列组成的网格位置上显示字符。对应屏幕上的每个字符就在行列组成的网格位置上显示字符。对应屏幕上的每个字符位置,主存空间都有相应的存储单元与之对应,因此可说是显位置,主存空间都有相应的存储单元与之对应,因此可说是显示屏幕式示屏幕式“存储器的映像存储器的映像”。对应显示屏幕上的每个字符,在。对应显示屏幕上的每个字符,在存储器中由连续的两个字节表示,存储器中由连续的两个字节表示,一个字节表示一个字节表示A

4、SCIIASCII码,另一码,另一个字节保存字符的属性。个字节保存字符的属性。单色显示的属性值单色显示的属性值 彩色字符显示属性字节彩色字符显示属性字节110 棕RGB颜色000 黑蓝绿011青红101品红111白IRGB颜色IRGB颜色0000黑1000灰0001蓝1001浅蓝0010绿1010浅绿0011青1011浅青0100红1100浅红0101品红1101浅品红0110棕1110黄0111白1111强度白3.显示存储器显示存储器 AL显示方式显示方式04025黑白文本方式黑白文本方式14025彩色文本方式彩色文本方式28025黑白文本方式黑白文本方式38025彩色文本方式彩色文本方式4

5、320200彩色图形方式彩色图形方式5320200黑白图形方式黑白图形方式6640200黑白图形方式黑白图形方式78025黑白文本方式(单色显示卡)黑白文本方式(单色显示卡)9.3 串行通信口串行通信口I/O串行通信可以分为两种类型:串行通信可以分为两种类型:同步通信、异步通信。同步通信、异步通信。一个字符一个字符地传输,每个字符一位一位地传一个字符一个字符地传输,每个字符一位一位地传输,传输一个字符时,以输,传输一个字符时,以起始位起始位开始,然后传输字开始,然后传输字符本身的各位,接着传输符本身的各位,接着传输校验位校验位,最后以,最后以停止位停止位结结束该字符的传输。一次传输的起始位、字

6、符各位、束该字符的传输。一次传输的起始位、字符各位、校验位、停止位构成一组完整的信息,称为校验位、停止位构成一组完整的信息,称为帧帧(Frame)。)。帧与帧之间可有任意个帧与帧之间可有任意个空闲位空闲位。起始位之后时数据的最低位。起始位之后时数据的最低位。在异步通信中,在异步通信中,每个每个字符字符都都要用起始位作为字符的开始要用起始位作为字符的开始和结束的标志,占用了传输的时间,所以在数据块传送时,和结束的标志,占用了传输的时间,所以在数据块传送时,为了提高效率,就要去掉这些标志,采用同步通信。为了提高效率,就要去掉这些标志,采用同步通信。同步通同步通信方式不给每个字符都加起始位和停止位,

7、而把字符顺序的信方式不给每个字符都加起始位和停止位,而把字符顺序的连接起来,组成一个数据块连接起来,组成一个数据块(首尾相连的数据串),把这样(首尾相连的数据串),把这样一个数据块称为一个信息桢。在数据的开始加上一个同步字一个数据块称为一个信息桢。在数据的开始加上一个同步字符,而在信息的末尾加有一定的差错检验字符,其格式如下:符,而在信息的末尾加有一定的差错检验字符,其格式如下:同步字符同步字符 字符字符1 字符字符2 字符字符n 校验字符校验字符数据块数据块实现串行通信有专用的接口芯片,实现串行通信有专用的接口芯片,常用的有常用的有USART(通通用同步用同步/异步接收异步接收/发送器发送器

8、)如如Intel8251和和UART(通用异步接收通用异步接收/发送器发送器)如如Ins 8250。无论是无论是UART,还是,还是USART,均能实现数据发送时所,均能实现数据发送时所需要的需要的并串转换并串转换以及数据被以及数据被CPU接收时所需要的接收时所需要的串串并转换。并转换。串行通信接口串行通信接口串行通信基础串行通信基础起始位起始位最低位最低位最高位最高位奇偶位奇偶位停止位停止位数据位数据位异步通信的信息格式:异步通信的信息格式:并行通信中,传输速率以每秒钟传输多少字节来表并行通信中,传输速率以每秒钟传输多少字节来表示。而串行通信中,传输速率是用波特率来表示。所谓示。而串行通信中

9、,传输速率是用波特率来表示。所谓波特率是指单位时间内传送二进制数据的位数波特率是指单位时间内传送二进制数据的位数(简写为简写为bps)。在计算机里,每秒传输多少位和波特率的含义是。在计算机里,每秒传输多少位和波特率的含义是完全一致的。但是要注意,在最初的定义上(波特率是完全一致的。但是要注意,在最初的定义上(波特率是每秒传输离散信号的数目),每秒传输多少位和波特率每秒传输离散信号的数目),每秒传输多少位和波特率是不相同的。是不相同的。收、发双方的波特率必须一致。传输一位所需要的时间收、发双方的波特率必须一致。传输一位所需要的时间T叫叫“位周期位周期”。例:计算串行传输5页,每页80 x25个字

10、符总共需要多少位?假设每个字符8位,1位起始位和1位终止位。计算传输上述五页所需要的时间。数据传输率分别为2400bps 和9600bpsRS232串行通信接口串行通信接口为了兼容各厂家生产的数据通信设备,1960年电子工业协会(Electronics Industries association,EIA)制定了RS-232接口标准,以后又陆续发布了修订版本RS-232A,RS-232B和RS-232C。目前广泛应用于个人计算机上的RS-232串行接口,他安装于PC机内的通信适配器版上。PC机上的机上的COM1、COM2接口,就是接口,就是RS-232C接口,使用接口,使用9针和针和25针连接

11、器针连接器RS-232C采用负逻辑,且信号电采用负逻辑,且信号电平与平与TTL不兼容,不兼容,规定逻辑规定逻辑“1”在在-3V-15V之间,之间,逻辑逻辑“0”在在+3V+15V之间。之间。RS-232C不是不是TTL电平的接口标电平的接口标准,当计算机与外设进行通信时,准,当计算机与外设进行通信时,必须有相应的电平转换电路。通必须有相应的电平转换电路。通常采用的是常采用的是MC1488和和MC1489电电平转换器。平转换器。串行接口芯片串行接口芯片8250、8251均使用均使用TTL电平,应使用电平电平,应使用电平转换电路与转换电路与RS-232C连接器连接。连接器连接。MC1488:TTL

12、电平电平RS232电平电平(用于发送方)(用于发送方)MC1489:TTL电平电平RS232电平电平(用于接收方)(用于接收方)IBM PC通信端口通信端口 在微机系统中,可以有两个或多个端口连接到不同的外部设备上进行通信,如IBM PC和80X86兼容机可以连接4个通信端口,他们的编号为COM14(BIOS编号为COM03),但程序每次只能对其中一个端口进行存取。当微机加电自检时,由加电自检程序来测试通用异步收发器的4个COM端口是否存在,如果微机系统中设置了COM端口,则设置的每个COM端口的I/O地址就写到BIOS数据区的0040:00000040:0007,每个端口地址占用两个字节。如

13、果没有连接串行端口,BIOS数据区 的这几个单元的内容就成为0。可以用DEBUG查看URAT的端口地址。保存在BIOS数据区的COM端口地址称为基地址,因为每个 COM端口都包括一组位的寄存器,程序员可以通过这些寄存器进行编程,以控制数据按设定的格式发送或接收数据。BIOS数据区的COM端口地址是第一个寄存器的地址。串行口功能调用、DOS串行通信口功能使用DOS命令可以设置串行通信参数,如波特率,字长,校验位和终止位。格式:MODE COMm:b,p,d,s例如:MODE COM1:24,O,8,1说明:波特率用最高两位来表示,P是校验位(N无,O奇,E偶。端口号的分配:BIOS位,DOS为D

14、OS串行通信口功能调用串行通信口功能调用例:例:INPUT_CHAR DB?:MOV AH,3INT 21HMOV INPUT _CHAR,ALBUFFER DB HELLOBUF_LEN EQU$-BUFFER :MOV BX,SEG BUFFERMOV DS,BXMOV BX,OFFSET BUFFERMOV CX,BUF_LENNEXT:MOV DL,BXMOV AH,4INT 21HLOOP NEXT串行通信口串行通信口 BIOS功能调用功能调用(int 14h)例:两台例:两台PC机通过机通过COM2端口进行串行数据通信,端口进行串行数据通信,编写一个汇编语言程序,要求从一台编写一个

15、汇编语言程序,要求从一台PC 机上键盘机上键盘上输入的字符传送到另一台上输入的字符传送到另一台PC机,若按下机,若按下ESC键,键,则退出程序。在程序中,则退出程序。在程序中,COM2端口初始化为端口初始化为 4800BPS,8位数据,无校验,位数据,无校验,1位终止位;位终止位;.data.datamessage db serial communication via com2,4800,no p,1stop,8 bit data,0ah,0dh,message db serial communication via com2,4800,no p,1stop,8 bit data,0ah,0

16、dh,$db any key press is sent to other PC,0ah,0dh db any key press is sent to other PC,0ah,0dh db press esc to exit,$db press esc to exit,$.code.code main procmain proc mov ax,data mov ax,data mov ds,ax mov ds,ax mov ah,09 mov ah,09 mov bx,offset message mov bx,offset message int 21h int 21h mov ah,0

17、mov ah,0 mov dx,1 mov dx,1 mov al,03ch mov al,03ch int 14h int 14hagain:mov al,01again:mov al,01 int 16h int 16h jz next jz next mov ah,0 mov ah,0 int 16h int 16h cmp al,1bhcmp al,1bh je exit je exit mov ah,1mov ah,1 mov dx,1 mov dx,1 int 14h int 14h next:next:mov ah,3mov ah,3 mov dx,1 mov dx,1 int

18、14h int 14h and ah,1 and ah,1 cmp ah,1 cmp ah,1 jne again jne again mov ah,2mov ah,2 mov dx,1 mov dx,1 int 14h int 14h mov dl,al mov dl,al mov ah,2mov ah,2 int 21h int 21h jmp again jmp againexit:mov ah,4chexit:mov ah,4ch int 21h int 21hmain endpmain endpendend 6.移动文件指针(42H)功能:移动由文件代号标志的文件读写指针的位置入口参

19、数:在bx预置文件代号,在cx:dx双字中预置移 动位移量,在 al 中预置移动方式移动方式:00h 移动后文件指针值=0+移动位移量01h 移动后文件指针值=当前文件指针值+移动位移量02h 移动后文件指针值=文件尾值+移动位移量出口参数:CF=0 表示移动成功,此时CX:DX双字中返回移动后文件指针值;CF=1 表示移动失败,此时AX中返回值为1表示移动方式无效,为6表示无效的文件代号。data segmentdata segment fname db c:masmfile1.dat,0 fname db c:masmfile1.dat,0 dat db 80h dup(0)dat db

20、80h dup(0)dat1 db 80h dup(0)dat1 db 80h dup(0)data endsdata endscode segmentcode segment assume cs:code,ds:data,es:data assume cs:code,ds:data,es:datastart:mov ax,datastart:mov ax,data mov ds,ax mov ds,ax mov es,ax mov es,ax mov dx,offset fname mov dx,offset fname mov cx,0 mov cx,0 mov ah,3ch mov ah

21、,3ch int 21h int 21h mov si,ax mov si,axnew:mov bx,0new:mov bx,0 mov cx,20h mov cx,20h era:mov ah,01h era:mov ah,01h int 21h int 21h mov datbx,al mov datbx,al inc bx inc bx loop era loop era mov datbx,0ah mov datbx,0ah mov dx,offset dat mov dx,offset dat mov cx,20h mov cx,20h mov bx,si mov bx,si mov

22、 ah,40h mov ah,40h int 21h int 21h mov bx,si mov bx,si mov ah,3eh mov ah,3eh int 21h int 21h mov ah,4ch mov ah,4ch int 21h int 21h code ends code endsend startend start例:从键盘输入例:从键盘输入20个字符存放到利用扩充文件管理方式建立个字符存放到利用扩充文件管理方式建立的文件中。的文件中。data segmentdata segment fname db c:masmfile1.dat,0 fname db c:masmfil

23、e1.dat,0 fname1 db c:masmfile2.dat,0 fname1 db c:masmfile2.dat,0 dta db 80h dup(0)dta db 80h dup(0)dta1 db 80h dup(0)dta1 db 80h dup(0)data endsdata endscode segmentcode segment assume cs:code,ds:data assume cs:code,ds:datastart:mov ax,datastart:mov ax,data mov ds,ax mov ds,ax mov es,ax mov es,ax mo

24、v dx,offset fnamemov dx,offset fname mov al,0 mov al,0 mov ah,3dh mov ah,3dh int 21h int 21h mov si,ax mov si,ax mov bx,si mov bx,si mov dx,offset dta1mov dx,offset dta1 mov cx,10h mov cx,10h mov ah,3fh mov ah,3fh int 21h int 21h mov di,ax mov di,ax mov ah,3ehmov ah,3eh int 21h int 21h mov dx,offset

25、 fname1mov dx,offset fname1 mov cx,0 mov cx,0 mov ah,3ch mov ah,3ch int 21h int 21h mov si,ax mov si,ax mov dx,offset dta1mov dx,offset dta1 mov cx,di mov cx,di mov bx,si mov bx,si mov ah,40h mov ah,40h int 21h int 21h mov bx,si mov bx,si mov ah,3eh mov ah,3eh int 21h int 21h mov ah,4ch mov ah,4ch i

26、nt 21h int 21hcode endscode endsend startend start例:从文件例:从文件file1中读取中读取10个字符到个字符到file2文件中文件中data segmentdata segment fname db c:masmfile1.dat,0 fname db c:masmfile1.dat,0 data1 db 8,?,8 dup(?)data1 db 8,?,8 dup(?)dat1 db 3000h dup(0)dat1 db 3000h dup(0)src dw 0ah src dw 0ah mess1 db reading from n1=

27、?,10,13,$mess1 db reading from n1=?,10,13,$mess2 db long n2=?,10,13,$mess2 db long n2=?,10,13,$mess3 db 10,13,$mess3 db 10,13,$data endsdata endsstack segment stack stack segment stack dw 100 dup(0)dw 100 dup(0)top label word top label wordstack endsstack endscode segmentcode segmentmain proc farmai

28、n proc far assume cs:code,ds:data,ss:stack assume cs:code,ds:data,ss:stackstart:push dsstart:push ds sub ax,ax sub ax,ax push ax push ax mov ax,data mov ax,data mov ds,ax mov ds,ax mov es,ax mov es,ax mov ax,stack mov ax,stack mov ss,ax mov ss,ax mov dx,offset mess1 mov dx,offset mess1 mov ah,09h mo

29、v ah,09h int 21h int 21hcall inputcall input dec di dec di mov si,di mov si,di mov dx,offset mess3 mov dx,offset mess3 mov ah,9 mov ah,9 int 21h int 21h mov dx,offset mess2 mov dx,offset mess2 mov ah,9 mov ah,9 int 21h int 21hcall inputcall input mov dx,offset mess3 mov dx,offset mess3 mov ah,09h mo

30、v ah,09h int 21h int 21h mov dx,offset fname mov dx,offset fname mov al,0 mov al,0 mov ah,3dh mov ah,3dh int 21h int 21h mov bx,ax mov bx,ax mov cx,0 mov cx,0 mov dx,si mov dx,si mov al,0 mov al,0 mov ah,42h mov ah,42h int 21h int 21h 例:从文件FILE1.DAT中读文件从N1起,长度为N2的字符串,并在屏幕中显示。N1 N2 为十进制数。mov dx,offse

31、t dat1 mov dx,offset dat1 mov cx,di mov cx,di mov ah,3fh mov ah,3fh int 21h int 21h mov di,ax mov di,ax mov ah,3eh mov ah,3eh int 21h int 21h mov dx,offset mess3 mov dx,offset mess3 mov ah,09h mov ah,09h int 21h int 21h mov dx,offset dat1 mov dx,offset dat1 mov al,$mov al,$mov bx,di mov bx,di mov da

32、t1bx,al mov dat1bx,al mov dx,offset dat1 mov dx,offset dat1 mov ah,9 mov ah,9 int 21h int 21h mov ah,4ch mov ah,4ch int 21h int 21hmain endp main endp input proc nearinput proc near mov dx,offset data1 mov dx,offset data1 mov ah,0ah mov ah,0ah int 21h int 21h mov bx,1 mov bx,1 mov al,data1bx mov al,

33、data1bx mov ah,0 mov ah,0 mov cx,ax mov cx,ax mov bx,2 mov bx,2 mov di,0 mov di,0loop1:mov al,data1bxloop1:mov al,data1bx sub al,30h sub al,30h mov ah,0 mov ah,0 push ax push ax mov dx,offset mess3 mov dx,offset mess3 mov ah,9 mov ah,9 int 21h int 21h mov ax,di mov ax,di mul src mul src mov di,ax mov di,ax pop ax pop ax add ax,di add ax,di mov di,ax mov di,ax inc bx inc bx loop loop1 loop loop1 ret retinput endpinput endpcode endscode endsend startend start演讲完毕,谢谢观看!

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!