【笔记】8086汇编-端口

前言:本篇仅仅是笔记,整理于2017/9/4,结构可能会略有混乱,见谅。

-CPU通过总线相连的芯片除了各种存储器外,还有以下3中芯片:

–1)各种接口卡(如:网卡、显卡)上的接口芯片,他们控制接口卡工作

–2)主板上的接口芯片,CPU通过他们对部分外设进行访问

–3)其他芯片,用来存储相关的系统信息,或进行相关的输入输出处理。

-这些芯片中,都有一组可以由CPU读写的寄存器。这些向寄存器,它们在物理上可能在不同的芯片中,但它们在以下两点上相同:

–1)都和CPU的总线相连【即通过其所在的芯片来连接】

–2)CPU对它们进行读或写的时候都通过控制西安向它们所在的芯片发出端口读写命令。

-也就是说,CPU将这些寄存器都当做端口,对它们统一编址,从而建立了一个统一的地址空间

-以上,CPU可以从3个地方读写数据:

–1)CPU内部寄存器

–2)内存单元

–3)端口。

-【14.1  端口的读写】

–不可以使用mov、pop、push等指令,只可以使用in和out指令

–在PC系统中,CPU最多可定位64KB不同端口,则端口地址的范围为:0~65535.

–访问过程与我们对普通寄存器读写时类似,这里用读来举例,如果我们输入in al,60h,就意味着:通过地址总线发送60h来定位,通过控制总线告知将读,通过数据总线将数据传入。【这与我们之前mov ax,ds:[8]这样的指令的过程十分类似——地址总线定位→控制总线安排→数据总线传输】

–in与out指令只能够使用ax或al,访问8位端口使用al,访问16位端口使用ax。

–对0~255以内的端口进行读写,可以直接输入地址:

—in al,20h

—out 20h,al

–对256~65536端口进行读写,需要用dx存储端口号:

—mov dx,3f8h

—in al,dx

—out dx,al

-【14.2  CMOS RAM芯片】

–PC机中,一般有一个CMOS RAM芯片,一般简称CMOS。

–特征:

—1)包含一个实时钟,和一个有128个存储单元的RAM存储器(早期的计算机为64个字节)

—2)该芯片靠电池供电,关机后内部的实时钟仍然可以正常工作,RAM中信息不丢失。

—3)128的RAM中,内部实时钟用0~0dh单元保存时间信息,其余大部分单元用于保存系统配置信息,供系统启动时BIOS程序读取。BIOS也有提供程序使我们可以在开机时配置CMOS RAM中的系统信息。

—4)该芯片内部有两个端口,端口地址为70h和71h,CPU通过这两个端口来读写CMOS RAM。

—5)70h为地址端口,存放要访问的CMOS RAM单元的地址;71h为数据端口,存放从选定的CMOS RAM单元中读取的数据,或要写入的数据。CPU对CMOS RAM的读写份两步进行:(这里用2号单元举例)

—-①将2送入端口70h

—-②从端口71h读出2号单元的内容

–【注意:out是指向端口传数据,in是指从端口读数据】

-【shl(shift left)和shr(shift right)指令】

–这两个是逻辑移位指令。

–shl是逻辑左移指令,功能:

—将一个寄存器或内存单元中的数据左移位→将最后移出的一位写入CF中→最低位用0补充。

–语法:shl 寄存器/内存单元,移位个数

–shr指令:

—右移(右移过程相当于除以2【但实际结果可能不是,因为有移出的一位,这位可能会导致结果-1】)→尾部移出的一位放到CF中→最高位补充0

–注意:如果移动次数超过1的话,要使用cl来存储。

–【检测点14.2】

—编程,用加法和移位指令计算(ax)=(ax)*10。

-【14.4  CMOS RAM中存储的时间信息】

–在CMOS RAM中存放着当前的时间:年(9)、月(8)、日(7)、时(4)、分(2)、秒(0)【括号内是存放单元】,长度都是一个字节。

–这些数据以BCD码的方式存放,BCD码是4位二进制数与1位十进制数的对应关系,【注意:四位二进制数能够表示的数的范围比1位十进制数能够表示的范围要大】,从数字0到9对应的二进制数,分别是其自身的等值二进制数。

–在存放数据时,高4位表示BCD码的十位,低四位表示BCD码的个位。

–编写程序:在屏幕上显示月份

—将高4位于低4位分离的巧妙办法:用al读取,并复制给ah,之后ah右移4位,这样就可以完成放置工作

-【实验14  访问CMOS RAM】

–警告:不要向不了解的单元写入内容,否则可能引起一系列系统错误。