1 / 48

第8章 总线技术

第8章 总线技术. 回顾: 层次式存储系统结构. 众所周知,微型计算机中均采用 总线结构 。 纵观微机的发展史,曾经出现、使用过多种总线,使用时间较长、影响较大的是: ISA 总线 和 PCI (Peripheral Component Interconnect) 总线; 而现在的 IA-32 计算机已经很少用 ISA 总线了。. PCI 总线. 概述; PCI 总线的配置地址空间; PCI 总线的 BIOS 。. 概述.

efia
Download Presentation

第8章 总线技术

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第8章 总线技术

  2. 回顾:层次式存储系统结构

  3. 众所周知,微型计算机中均采用总线结构。 • 纵观微机的发展史,曾经出现、使用过多种总线,使用时间较长、影响较大的是: • ISA 总线 和 • PCI(Peripheral Component Interconnect)总线; • 而现在的IA-32计算机已经很少用ISA总线了。

  4. PCI总线 • 概述; • PCI总线的配置地址空间; • PCI总线的BIOS 。

  5. 概述 • 在IA-32 计算机中,PCI总线控制器的功能是在ICHx中实现的, 这就是说PCI总线控制器存在于ICHx中。 • PCI总线上的工作频率有两种: • 33MHz和66MHz。 • 使用32位的PCI总线时,可分别得到132MB/s和264MB/s的传送带宽。如果使用64位的PCI总线时,可分别得到264MB/s和528MB/s的传送带宽。

  6. PCI总线在主板上表现为PCI总线连接器(插座)。 PCI总线在主板上表现为PCI总线连接器(插座)。 • 32位的PCI总线, 总线连接器为124芯。 • 64位的PCI总线, 总线连接器为188芯。 • Intel系列芯片组的台式机主板上,实现了32位的PCI总线,其信号如讲义上表8.4。

  7. 为了支持即插即用功能,PCI总线引入了配置地址空间为了支持即插即用功能,PCI总线引入了配置地址空间 • (configuration address space)。

  8. PCI总线的配置地址空间 • 配置地址空间是驻留在PCI设备(即PCI接口板)中的容量为256字节的具有特定数据结构的存储空间,它用来存放与该PCI设备相关的信息,主要用于识别设备。

  9. 包括头标区和设备区两部分。 • 头标区的长度是64个字节,其余的192个字节是设备区。 • 所有的PCI设备都必须实现头标区,设备区则因设备而异。 • 头标区的数据结构如图8.1所示。

  10. 制造商识别码,用以标明设备的制造者。 • 设备识别码,用以标明特定的设备,具体代码由制造商分配。 • 命令字是一个16位的数(b15-b0)。状态字也是一个16位的数(b31-b16)。 • 版本识别码,用以标明设备特定的版本代码。该字段是设备识别码的扩展,由制造商定义。 • 类别代码是一个24位的数(b31-b8),用以标明PCI设备的类别。如表8.5。

  11. 类别代码 功 能 基类型 子类型 可编程接口 00H 00H 00H 早期的非VGA设备(非即插即用) 00H 01H 01H 早期的VGA设备(非即插即用) 01H 00H 00H SCSI控制器 01H 01H xxH IDE控制器 01H 02H 00H 软盘控制器 01H 03H 00H IPI控制器 01H 04H 00H RAID控制器 01H 80H 00H 其他硬盘/软盘控制器 02H 00H 00H 以太网控制器 02H 01H 00H 令牌网控制器 02H 02H 00H FDDI 02H 80H 00H 其他网络控制器 03H 00H 00H VGA控制器 03H 01H 00H XGA控制器 03H 80H 00H 其他显示控制器 04H 00H 00H 视频设备 04H 01H 00H 音频设备 04H 80H 00H 其他多媒体设备 05H 00H 00H RAM控制器 05H 01H 00H FLASH存储器控制器 05H 80H 00H 其他存储器控制器 06H 00H 00H 主桥/PCI桥 06H 01H 00H PCI/ISA桥 06H 02H 00H PCI/EISA桥 06H 03H 00H PCI/MCA桥 06H 04H 00H PCI/PCI桥 06H 05H 00H PCI/PCMCIA桥 06H 80H 00H 其他桥

  12. 与PCI总线相关的BIOS • (先简要学习BIOS调用的知识。) • 在IA-32 计算机中,设置有PCI总线专用的BIOS调用。 • 它是功能号为AH=0B1H的INT 1AH • BIOS调用。

  13. 例8.1 • 利用INT 1AH指令,AH=0B1H,AL=01H检查PCI总线BIOS是否存在。 • .model small • .386 • .stack 10h • .data • PciF byte 00h • .code • Start: mov ax,@data • mov ds,ax

  14. mov ah,0b1h • mov al,01h • int 1ah • jc SetPciF • mov PciF,55h • jmp finished • SetPciF: mov PciF,0ffh • finished: nop • .exit • end Start

  15. 在IA-32计算机加电启动之后,首先执行系统BIOS中的加电自检(Power ON Self Test,POST)程序,以便找到加入系统中的设备。 • POST程序查找加入系统中的设备的方法,就是读取配置地址空间头标区中的数据,进行分析,并且把结果存入系统数据库,供操作系统启动之后使用。

  16. 通过调用PCI BIOS所提供的功能服务,通过类别代码,可以查找加入系统中的设备(如例8.2和例8.3 ) ; • 反之,由设备号、功能号、总线号也可以查出设备的类别代码(如例8.2和例8.3 )。

  17. 例8.2 • 按照类别代码(ecx=030000H)查找加入系统中的设备;然后再反之,根据设备的设备号、功能号、总线号,读出该配置地址空间中的类别代码。

  18. 利用AH=0B1H,AL=03H的INT 1AH BIOS调用实现。 • 功能:Find PCI device according to Class Code. • ;Entry:(ecx)=030000H, the Class Code of VGA compatible controller; • ; (si)=Index(0...N). • ;Exit:(bh)=Bus Number(0...255), • ; (bl)=Device Number in upper 5 bits, • ; (bl)=Function Number in bottom 3 bits.

  19. 利用AH=0B1H,AL=0AH的INT 1AH BIOS调用实现。 • 功能:Read PCI Configuration Dword(类别代码 • ;Entry:(bh)=Bus Number(0...255), • ; (bl)=Device Number in upper 5 bits, • ; (bl)=Function Number in bottom 3 bits. • ;Exit:(ecx)=Dword read.

  20. .model small • .386 • .stack 10h • .code • Start: mov ah,0b1h • mov al,03h • mov ecx,030000h • mov si,0h • int 1ah • mov ah,0b1h • mov al,0ah • mov di,08h • int 1ah • .exit • end Start

  21. 例8.3 • 按照类别代码(ecx=020000H)查找加入系统中的设备;然后再反之,根据设备的设备号、功能号、总线号,读出该配置地址空间中的类别代码。

  22. 利用AH=0B1H,AL=03H的INT 1AH BIOS调用实现。 • 功能:Find PCI device according to Class Code. • ;Entry:(ecx)=020000H, the Class Code of VGA compatible controller; • ; (si)=Index(0...N). • ;Exit:(bh)=Bus Number(0...255), • ; (bl)=Device Number in upper 5 bits, • ; (bl)=Function Number in bottom 3 bits.

  23. 利用AH=0B1H,AL=0AH的INT 1AH BIOS调用实现。 • 功能:Read PCI Configuration Dword(类别代码 • ;Entry:(bh)=Bus Number(0...255), • ; (bl)=Device Number in upper 5 bits, • ; (bl)=Function Number in bottom 3 bits. • ;Exit:(ecx)=Dword read.

  24. .model small • .386 • .stack 10h • .code • Start: mov ah,0b1h • mov al,03h • mov ecx,020000h • mov si,0h • int 1ah • mov ah,0b1h • mov al,0ah • mov di,08h • int 1ah • .exit • end Start

  25. DOS功能调用和BIOS功能调用 • 系统提供的服务: • 操作系统为了方便用户使用,把常用的子过程,特别是管理硬件的过程,做成系统服务程序,供用户调用,这样可大大方便用户的应用程序设计。 • MS-DOS中提供的系统服务由两部分组成: • 一是BIOS系统服务,二是DOS系统服务.

  26. DOS功能调用: • 欲调用DOS提供的系统服务过程,必须使用 • INT 21H指令,将它称为DOS功能调用。 • INT 21H包含几十个DOS系统服务的子过程, • 每个过程都对应一个功能号,通过功能号区分各 • 个不同的过程。

  27. 实现DOS功能调用的编程步骤: • 1、将所调用的过程的功能号送到寄存器AH中; • 2、按要求把入口参数传送到所要求的寄存器中; • 3、通过INT 21H指令即可调用相应的过程; • 4、出口参数也可在规定的寄存器中得到。 • (各DOS功能调用的具体参数见MASM6.11的HELP)

  28. BIOS功能调用: • 欲调用BIOS提供的系统服务子过程,须使用INT 1XH 指令,即INT 10H至 INT 1FH共16条指令,称之为BIOS功能调用。

  29. 实现BIOS功能调用的编程步骤: • 1、将所调用的过程的功能号送到寄存器AH中; • 2、按要求把入口参数传送到所要求的寄存器中; • 3、通过INT 1XH 指令即可调用相应的过程; • 4、出口参数也可在规定的寄存器中得到。 • 各BIOS功能调用的具体参数见MASM6.11的HELP。

  30. DOS和BIOS系统服务的功能: • 包括:接收键盘和鼠标输入、打印机输出、 • 显示等系统管理、内存管理、文件操作、串行通 • 信等。  • BIOS(Basic Input Output System)内部 • 主要是初始化程序和硬件驱动程序,驻留在Flash • 中。

  31. 练习: • 从键盘读字符并且在CRT屏幕上显示。 • 当从键盘上输入“#”结束,输入其他字符时回显。

  32. .model tiny • .code • .startup • main: mov ah,6 ; 读键值 • mov dl,0ffh • int 21h • je main ;如果没有键按下 • cmp al,'#' ;测试是否是“#” • je main1 ;若是“#” • mov ah,6 ;显示键盘输入的字符 • mov dl,al • int 21h • jmp main ;继续读入键值 • main1: .exit ;返回DOS • end

  33. 伪指令 • ⑴CPU选择伪指令 • 选择所要求的CPU,从而可以使用相应的存储模型和指令系统,缺省时,汇编程序只接受8086指令。 • ⑵.MODEL伪指令:初始化内存模型 • ⑶END伪指令:告诉汇编程序,源程序到此结束。

  34. ⑷段定义伪指令 • “.STACK XXH”伪指令定义堆栈段: • (XXH指明栈区大小) • 程序装入内存时系统自动初始化 • SS:ESP/SP,即为SS分配一值,并据XXH为ESP/SP分配值。

  35. “.DATA”伪指令定义数据段: • 可以使用数据定义伪指令定义不同类型的变量。 • 注意:用.DATA伪指令定义过的数据既可以放在DS段 • ,又可放在ES段,系统无法判明,所以未能自动初始化; • 须在代码段开始用 MOV AX,@data • MOV DS,AX • 或 MOV AX,@data • MOV ES,AX • 向系统表明。

  36. “.CODE”伪指令定义代码段: • 除了.STARTUP、.EXIT、ORG外,在.CODE之后一般不出现伪指令。 • 系统在出始化CS时,会自动为CS分配一个段基址,并装入,且一般会将EIP/IP初始化为0H。 • 除非在“.CODE”之后使用了“ORG <表达式>”,此时,系统会按ORG之后表达式的值去初始化EIP/IP。

  37. ⑸ .STARTUP伪指令: • “.STARTUP”伪指令紧跟在“.CODE”之后 • 以代替指令 • MOV AX,@data • MOV DS,AX, • 同时也可以取消第一条可执行指令前的标号(如START)以及“END”伪指令行上的标号 。

  38. ⑹ .EXIT 伪指令 • 出现在代码段的末尾,“END”伪指令之 • 前,其功能是退出应用程序。汇编之后,变 • 换为以下两条指令: • MOV AH,4CH • INT 21H

  39. ⑺ ORG伪指令: • 格式: “ORG XXH” • 出现在数据段时,改变数据段中当前偏移地址的值; • 出现在代码段时,改变代码段中EIP/IP的当前值。

  40. ⑻ $ 操作符: • $代表着段内偏移地址的当前值。 • 它可出现在数据段或代码段。

  41. ⑼数据定义伪指令: • 在数据段中存储数据,可以使用 • DB、 DW、 DD、 DF、 DQ 和 DT, • 也可以使用 • BYTE、WORD、DWORD、FWORD、QWORD、TBYTE • 分别代替上述5种伪指令。 • 如下例:定义各种数据格式的伪指令的应用。

  42. DATA1 DB 1,2,3 ;定义字节 • DB 45H ;十六进制数 • DB ‘A’ ;ASCII码 • DB 11110000B ;二进制数 • DATA2 DW 12,13 ;定义字 • DW DATA2 ;存储DATA2的偏移量 • DW 2345H ;十六进制数 • DATA3 DD 300H ;十六进制数 • ORG $+4 ;跳过4个地址 • LISTA DB ? ;保留一个字节 • LISTB DB 10 DUP(?) ;保留十个字节 • LISTC DW 100H DUP(9) ;字数组 • LIST9 DD 22 DUP(?) ;双字数组 • SIXES DB 100 DUP(6) ;字节数组

  43. ⑽PTR操作符: • 临时定义变量、标号或存储单元操作数的类型属性。 • (PTR的作用范围仅限于它的指令行)

  44. 例 用PTR定义由[SI]寻址的内存单元 • MOV BYTE PTR [SI],23

  45. ⑾EQU伪指令: • 定义符号常量,即为某个常量取一个符号名。

  46. 例 EQU伪指令的应用实例。 • 把NINE定义为9,TEN定义为10 • NINE EQU 9 • TEN EQU 10 • ADD AL,NINE • MOV AL,TEN

More Related