第14章 端口

第14章 端口

       各种存储器都和CPU的地址线、数据线、控制线相连。CPU在操控它们的时候,把它们都当作内存对待,把他们看作是一个由若干从年初单元组成的逻辑存储器。

       在PC机系统中,和CPU通过总线相连的芯片除了各种存储器外,还有:

1)        各种借口卡上的接口芯片,他们控制接口卡进行工作;

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

3)        其他芯片

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

1)        都和CPU总线相连,当然这种连接是通过它们所在的芯片进行的

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

14.1 端口的读写

第14章 端口

14.2 CMOS RAM芯片

第14章 端口

第14章 端口

 

14.3 shl和shr指令

第14章 端口

第14章 端口

第14章 端口

14.4 CMOS RAM中存储的时间信息

在CMOS RAM中,存放着当前的时间:年、月、日、时、分、秒。这6个信息的长度都为1个字节,存放单元为:

秒:0 分:2 时:4 日:7 月:8 年:9

 

这些数据以BCD码的方式存放。

BCD码是以4位二进制数表示十进制数码的编码方法,如下所示。

十进制数码:      0            1            2            3            4            5            6            7            8            9

对应的BCD码:0000         0001       0010       0011              0100       0101       0110              0111

1000              1001

以下汇编代码,显示了CMOS RAM中存储的时间信息

assume cs:code,ds:data

data segment

db 'The Current Time is:',0

data ends

 

code segment

 

start:

   ;此程序显示当前系统时间 格式为:当前时间为:00年00月00日00时00分00秒

   mov ax,data

   mov ds,ax

   mov di,0

   mov si,0

top: 

   mov al,ds:[si]

   cmp al,0

   jz topend

   mov bx,0b800h

        mov es,bx       

        mov es:[di],al

        inc si

   inc di

   inc di

   loop top 

 

topend:

   mov dl,9

   mov cx,3

 

s: 

   push cx

   mov al,dl

        out 70h,al

        in al,71h            ;此时al中装的是当前时间的‘年月日’。

        mov ah,al

        mov cl,4

        shr ah,cl

        and al,00001111b

        add ah,30h

        add al,30h

       

        mov bx,0b800h

        mov es,bx

       

        mov es:[di],ah

        mov es:[di+2],al

        mov byte ptr es:[di+4],'/'

   add di,6

   add dl,-1

   pop cx

   loop s

   mov byte ptr es:[di-2],' '

  

   mov cx,3

   mov dl,4 

s1:      

   push cx

        mov al,dl

        out 70h,al

        in al,71h            ;此时al中装的是当前时间的‘时分秒’。

        mov ah,al

        mov cl,4

        shr ah,cl

        and al,00001111b

        add ah,30h

        add al,30h

       

        mov bx,0b800h

        mov es,bx

       

        mov es:[di],ah

        mov es:[di+2],al        

        mov byte ptr es:[di+4],':'

   add di,6

   add dl,-2

   pop cx

   loop s1

   mov byte ptr es:[di-2],' '

 

   mov si,0

   mov di,0

   jmp top

        mov ax,4c00h

        int 21h

 

code ends

 

end start

你可能感兴趣的:(端口)