资源描述
开开 始始 (扩充(扩充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 mov ah,4ch int 21h code endsend无无 9.2 显示器显示器I/O 从上面三种不同图形显示模式的介绍,不难从上面三种不同图形显示模式的介绍,不难看出:各种显示模式在显示缓冲区存储方式上的明看出:各种显示模式在显示缓冲区存储方式上的明显差异,操作象素方法的难易程度相差也很大,所显差异,操作象素方法的难易程度相差也很大,所以,再次建议:以,再次建议:程序员不要用直接操作显示缓冲区程序员不要用直接操作显示缓冲区的办法来达到改变显示象素的目的,最好是通过的办法来达到改变显示象素的目的,最好是通过BIOSBIOS内的中断功能来实现相应的功能内的中断功能来实现相应的功能,这样,所编这样,所编写的程序能很方便地适应不同的图形显示模式。写的程序能很方便地适应不同的图形显示模式。显示器的屏幕通常划分为行和列的二维系统,显示适配器显示器的屏幕通常划分为行和列的二维系统,显示适配器就在行列组成的网格位置上显示字符。对应屏幕上的每个字符就在行列组成的网格位置上显示字符。对应屏幕上的每个字符位置,主存空间都有相应的存储单元与之对应,因此可说是显位置,主存空间都有相应的存储单元与之对应,因此可说是显示屏幕式示屏幕式“存储器的映像存储器的映像”。对应显示屏幕上的每个字符,在。对应显示屏幕上的每个字符,在存储器中由连续的两个字节表示,存储器中由连续的两个字节表示,一个字节表示一个字节表示ASCIIASCII码,另一码,另一个字节保存字符的属性。个字节保存字符的属性。单色显示的属性值单色显示的属性值 彩色字符显示属性字节彩色字符显示属性字节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彩色文本方式彩色文本方式4320200彩色图形方式彩色图形方式5320200黑白图形方式黑白图形方式6640200黑白图形方式黑白图形方式78025黑白文本方式(单色显示卡)黑白文本方式(单色显示卡)9.3 串行通信口串行通信口I/O串行通信可以分为两种类型:串行通信可以分为两种类型:同步通信、异步通信。同步通信、异步通信。一个字符一个字符地传输,每个字符一位一位地传一个字符一个字符地传输,每个字符一位一位地传输,传输一个字符时,以输,传输一个字符时,以起始位起始位开始,然后传输字开始,然后传输字符本身的各位,接着传输符本身的各位,接着传输校验位校验位,最后以,最后以停止位停止位结结束该字符的传输。一次传输的起始位、字符各位、束该字符的传输。一次传输的起始位、字符各位、校验位、停止位构成一组完整的信息,称为校验位、停止位构成一组完整的信息,称为帧帧(Frame)。)。帧与帧之间可有任意个帧与帧之间可有任意个空闲位空闲位。起始位之后时数据的最低位。起始位之后时数据的最低位。在异步通信中,在异步通信中,每个每个字符字符都都要用起始位作为字符的开始要用起始位作为字符的开始和结束的标志,占用了传输的时间,所以在数据块传送时,和结束的标志,占用了传输的时间,所以在数据块传送时,为了提高效率,就要去掉这些标志,采用同步通信。为了提高效率,就要去掉这些标志,采用同步通信。同步通同步通信方式不给每个字符都加起始位和停止位,而把字符顺序的信方式不给每个字符都加起始位和停止位,而把字符顺序的连接起来,组成一个数据块连接起来,组成一个数据块(首尾相连的数据串),把这样(首尾相连的数据串),把这样一个数据块称为一个信息桢。在数据的开始加上一个同步字一个数据块称为一个信息桢。在数据的开始加上一个同步字符,而在信息的末尾加有一定的差错检验字符,其格式如下:符,而在信息的末尾加有一定的差错检验字符,其格式如下:同步字符同步字符 字符字符1 字符字符2 字符字符n 校验字符校验字符数据块数据块实现串行通信有专用的接口芯片,实现串行通信有专用的接口芯片,常用的有常用的有USART(通通用同步用同步/异步接收异步接收/发送器发送器)如如Intel8251和和UART(通用异步接收通用异步接收/发送器发送器)如如Ins 8250。无论是无论是UART,还是,还是USART,均能实现数据发送时所,均能实现数据发送时所需要的需要的并串转换并串转换以及数据被以及数据被CPU接收时所需要的接收时所需要的串串并转换。并转换。串行通信接口串行通信接口串行通信基础串行通信基础起始位起始位最低位最低位最高位最高位奇偶位奇偶位停止位停止位数据位数据位异步通信的信息格式:异步通信的信息格式:并行通信中,传输速率以每秒钟传输多少字节来表并行通信中,传输速率以每秒钟传输多少字节来表示。而串行通信中,传输速率是用波特率来表示。所谓示。而串行通信中,传输速率是用波特率来表示。所谓波特率是指单位时间内传送二进制数据的位数波特率是指单位时间内传送二进制数据的位数(简写为简写为bps)。在计算机里,每秒传输多少位和波特率的含义是。在计算机里,每秒传输多少位和波特率的含义是完全一致的。但是要注意,在最初的定义上(波特率是完全一致的。但是要注意,在最初的定义上(波特率是每秒传输离散信号的数目),每秒传输多少位和波特率每秒传输离散信号的数目),每秒传输多少位和波特率是不相同的。是不相同的。收、发双方的波特率必须一致。传输一位所需要的时间收、发双方的波特率必须一致。传输一位所需要的时间T叫叫“位周期位周期”。例:计算串行传输5页,每页80 x25个字符总共需要多少位?假设每个字符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针连接器针连接器RS-232C采用负逻辑,且信号电采用负逻辑,且信号电平与平与TTL不兼容,不兼容,规定逻辑规定逻辑“1”在在-3V-15V之间,之间,逻辑逻辑“0”在在+3V+15V之间。之间。RS-232C不是不是TTL电平的接口标电平的接口标准,当计算机与外设进行通信时,准,当计算机与外设进行通信时,必须有相应的电平转换电路。通必须有相应的电平转换电路。通常采用的是常采用的是MC1488和和MC1489电电平转换器。平转换器。串行接口芯片串行接口芯片8250、8251均使用均使用TTL电平,应使用电平电平,应使用电平转换电路与转换电路与RS-232C连接器连接。连接器连接。MC1488:TTL电平电平RS232电平电平(用于发送方)(用于发送方)MC1489:TTL电平电平RS232电平电平(用于接收方)(用于接收方)IBM PC通信端口通信端口 在微机系统中,可以有两个或多个端口连接到不同的外部设备上进行通信,如IBM PC和80X86兼容机可以连接4个通信端口,他们的编号为COM14(BIOS编号为COM03),但程序每次只能对其中一个端口进行存取。当微机加电自检时,由加电自检程序来测试通用异步收发器的4个COM端口是否存在,如果微机系统中设置了COM端口,则设置的每个COM端口的I/O地址就写到BIOS数据区的0040:00000040:0007,每个端口地址占用两个字节。如果没有连接串行端口,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为DOS串行通信口功能调用串行通信口功能调用例:例: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端口进行串行数据通信,端口进行串行数据通信,编写一个汇编语言程序,要求从一台编写一个汇编语言程序,要求从一台PC 机上键盘机上键盘上输入的字符传送到另一台上输入的字符传送到另一台PC机,若按下机,若按下ESC键,键,则退出程序。在程序中,则退出程序。在程序中,COM2端口初始化为端口初始化为 4800BPS,8位数据,无校验,位数据,无校验,1位终止位;位终止位;.datamessage db serial communication via com2,4800,no p,1stop,8 bit data,0ah,0dh,$db any key press is sent to other PC,0ah,0dh db press esc to exit,$.code main proc mov ax,data mov ds,ax mov ah,09 mov bx,offset message int 21h mov ah,0 mov dx,1 mov al,03ch int 14hagain:mov al,01 int 16h jz next mov ah,0 int 16h cmp al,1bh je exit mov ah,1 mov dx,1 int 14h next:mov ah,3 mov dx,1 int 14h and ah,1 cmp ah,1 jne again mov ah,2 mov dx,1 int 14h mov dl,al mov ah,2 int 21h jmp againexit:mov ah,4ch int 21hmain endpend 6.移动文件指针(42H)功能:移动由文件代号标志的文件读写指针的位置入口参数:在bx预置文件代号,在cx:dx双字中预置移 动位移量,在 al 中预置移动方式移动方式:00h 移动后文件指针值=0+移动位移量01h 移动后文件指针值=当前文件指针值+移动位移量02h 移动后文件指针值=文件尾值+移动位移量出口参数:CF=0 表示移动成功,此时CX:DX双字中返回移动后文件指针值;CF=1 表示移动失败,此时AX中返回值为1表示移动方式无效,为6表示无效的文件代号。data segment fname db c:masmfile1.dat,0 dat db 80h dup(0)dat1 db 80h dup(0)data endscode segment assume cs:code,ds:data,es:datastart:mov ax,data mov ds,ax mov es,ax mov dx,offset fname mov cx,0 mov ah,3ch int 21h mov si,axnew:mov bx,0 mov cx,20h era:mov ah,01h int 21h mov datbx,al inc bx loop era mov datbx,0ah mov dx,offset dat mov cx,20h mov bx,si mov ah,40h int 21h mov bx,si mov ah,3eh int 21h mov ah,4ch int 21h code endsend start例:从键盘输入例:从键盘输入20个字符存放到利用扩充文件管理方式建立个字符存放到利用扩充文件管理方式建立的文件中。的文件中。data segment fname db c:masmfile1.dat,0 fname1 db c:masmfile2.dat,0 dta db 80h dup(0)dta1 db 80h dup(0)data endscode segment assume cs:code,ds:datastart:mov ax,data mov ds,ax mov es,ax mov dx,offset fname mov al,0 mov ah,3dh int 21h mov si,ax mov bx,si mov dx,offset dta1 mov cx,10h mov ah,3fh int 21h mov di,ax mov ah,3eh int 21h mov dx,offset fname1 mov cx,0 mov ah,3ch int 21h mov si,ax mov dx,offset dta1 mov cx,di mov bx,si mov ah,40h int 21h mov bx,si mov ah,3eh int 21h mov ah,4ch int 21hcode endsend start例:从文件例:从文件file1中读取中读取10个字符到个字符到file2文件中文件中data segment fname db c:masmfile1.dat,0 data1 db 8,?,8 dup(?)dat1 db 3000h dup(0)src dw 0ah mess1 db reading from n1=?,10,13,$mess2 db long n2=?,10,13,$mess3 db 10,13,$data endsstack segment stack dw 100 dup(0)top label wordstack endscode segmentmain proc far assume cs:code,ds:data,ss:stackstart:push ds sub ax,ax push ax mov ax,data mov ds,ax mov es,ax mov ax,stack mov ss,ax mov dx,offset mess1 mov ah,09h int 21hcall input dec di mov si,di mov dx,offset mess3 mov ah,9 int 21h mov dx,offset mess2 mov ah,9 int 21hcall input mov dx,offset mess3 mov ah,09h int 21h mov dx,offset fname mov al,0 mov ah,3dh int 21h mov bx,ax mov cx,0 mov dx,si mov al,0 mov ah,42h int 21h 例:从文件FILE1.DAT中读文件从N1起,长度为N2的字符串,并在屏幕中显示。N1 N2 为十进制数。mov dx,offset dat1 mov cx,di mov ah,3fh int 21h mov di,ax mov ah,3eh int 21h mov dx,offset mess3 mov ah,09h int 21h mov dx,offset dat1 mov al,$mov bx,di mov dat1bx,al mov dx,offset dat1 mov ah,9 int 21h mov ah,4ch int 21hmain endp input proc near mov dx,offset data1 mov ah,0ah int 21h mov bx,1 mov al,data1bx mov ah,0 mov cx,ax mov bx,2 mov di,0loop1:mov al,data1bx sub al,30h mov ah,0 push ax mov dx,offset mess3 mov ah,9 int 21h mov ax,di mul src mov di,ax pop ax add ax,di mov di,ax inc bx loop loop1 retinput endpcode endsend start演讲完毕,谢谢观看!
展开阅读全文