引言

CPU可以直接读取3个地方的数据

1
2
3
1.CPU内部的寄存器
2.内存单元
3.端口

1.端口的读写

端口的读写不能用 mov

1.只能用in out

访问内存

1
2
3
4
mov ax,ds:[8]
1.CPU通过地址线将地址信息8发出
2.CPU通过控制线发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据
存储器将8号单元中的数据通过数据线送入CPU

访问端口

in是读,out是写

in al,60h

1
从60H号端口读入一个字节

执行的时候操作

1
2
3
1.CPU通过地址将地址信息60h发出
2.CPU通过控制线发出端口读命令,选中端口所在的芯片,并通知它,将要从中读取数据
3.端口所在的芯片将60h端口中的数据通过数据线送入CPU

2.注意

1
在in 和 out 指令中,只能使用ax或al 来存从端口中读入的数据或要发送到端口中的数据。访问8位端口的时候,用al,访问16位端口的时候,用ax

3.对0~255以内的端口进行读写

1
2
in al,20h	;从20h端口读入一个字节,放到al中
out 20h,al ;往20h端口写入一个字节

4.对256~65535的端口进行读写的时,端口号放在dx中

1
2
3
4
5
mov dx,3f8h		;将端口号3f8送入dx中
in al,dx ;从3f8h端口读入一个字节
out dx,al ;向3f8h端口写入一个字节

读或者写数据是放在al或者ax中,端口号是放在dx中的

2.CMOS RAM 芯片

PC机中有一个CMOS RAM芯片

1
2
3
1.包含一个实时钟和一个有128个存储单元的RAM寄存器
2.改芯片靠电池供电。
3.128个字节的RAM中,内部实时种占用0~0dh单元来保存时间信息,其他大部分分单元用于保存系统配置信息,供系统启动的时候BIOS程序读取

2.bios也提供了相关的程序,使我们可以在开机的时候,配置CMOS RAM种的系统会给信息

1
2
改芯片内部有2个端口,端口地址是70H和71H
70H为地址端口,存放要访问的CMOS RAM单元的地址;71为数据端口,存放从选定的COS RAM 单元种读取的数据,或要写入到其中的数据

比如:读CMOS RAM 的2号单元

1
2
1.将2送入端口70h
2.从71h读出2号单元的内容

3.shl和shr指令

1.shl和shr是逻辑位移指令,后面的课程中我们要用到位移指令

2.shl是逻辑左移

1
2
3
1.将一个寄存器或者内存单元中的数据向左移位
2.将最后移出的一位写入CF中
3.最低位用0补充

比如

1
2
3
mov al,01001000b
shl al,1 ;将al中的数据左移1位
执行后(al)=10010000b,cf=0

如果移动位数大于1的时候,必须将移动位数放在cl中

比如

1
2
3
4
mov al,01010001b
mov cl,3
sha al,cl
执行后(al)=10001000b cf=0

可以看出,将x逻辑左移一位,相当于执行x=x*2

3.shr就是shl的反向操作

1
移出的最后一个存入cf中

逻辑右移一位,相当于x=x/2

4.CMOS RAM中存储的时间信息

image-20230503145254486