第十四章 端口
1、CPU可以直接读写3个地方的数据:CPU内部的寄存器、内存单元、端口。
2、端口的读写指令只有两条:in和out,读取和写入。
(1)访问端口
3、网页访问的是80端口,ftp访问的是21号端口。
4、CMOS RAM芯片:①包含一个实时钟和一个有128个存储单元的RAM存储器。②该芯片靠电池供电。因此关机后其内部的实时钟仍可正常工作,RAM中的信息部丢失;③128个字节的RAM中,内部实时钟占用0——0dh单元来保存时间信息,其余大部分单元用于保存系统配置信息,供系统启动时BIOS程序读取。④该芯片内部有两个端口,地址为70h和71h,70h为地址端口,存放要访问的CMOS RAM单元的地址,71h为数据端口,存放要读取或者写入的数据。
5、shl和shr逻辑位移指令,将最后移出的一位放到CF中,空余的补0,如果移出位数大于1的时候,必须将移动位数放到cl中。
6、CMOS RAM中存储的时间信息:采用BCD码
7、BCD码:BCD码值+30h=十进制对应的ASCII码。
实验14自己写的比较笨的代码。。。。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 ;在屏幕中显示当前月份
2 ;注意:BCD码+30h对应的是ASCII码
3 assume cs:code
4
5 data segment
6 db "year/yu/ri ho:fe:mo" ;长度19
7 data ends
8
9 code segment
10
11 start:
12 mov bx,0b800h
13 mov es,bx
14 mov si,0
15
16 mov al,9 ;向地址端口70h写入要访问的单元的地址
17 call shuchu ;年
18 mov al,'/' ;插入'/'
19 mov byte ptr es:[160*12+40*2+si],al
20 add si,2
21 mov al,8
22 call shuchu
23 mov al,'/' ;插入'/'
24 mov byte ptr es:[160*12+40*2+si],al
25 add si,2
26 mov al,7
27 call shuchu
28
29 mov al,' ' ;插入空格
30 mov byte ptr es:[160*12+40*2+si],al
31 add si,2
32
33 mov al,4
34 call shuchu
35 mov al,':' ;插入':'
36 mov byte ptr es:[160*12+40*2+si],al
37 add si,2
38 mov al,2
39 call shuchu
40 mov al,':' ;插入':'
41 mov byte ptr es:[160*12+40*2+si],al
42 add si,2
43 mov al,0
44 call shuchu
45
46 mov ax,4c00h
47 int 21h
48
49 shuchu: out 70h,al
50 in al,71h ;从数据端口71h中取得指定单元中的数据
51
52 mov ah,al ;al中为从CMOSRAM的8号单元读出的数据
53 mov cl,4
54 shr ah,cl ;ah中为月份的十位数码值
55 and al,00001111b;al为月份的个位数码值
56
57 add ah,30h ;BCD转ASCII
58 add al,30h
59
60 mov byte ptr es:[160*12+40*2+si],ah ;显示月份的十位数码
61 mov byte ptr es:[160*12+40*2+2+si],al
62 add si,4
63
64 ret
65 code ends
66 end start