汇编学习记录14 端口

2019-05-04  本文已影响0人  官总哦

1.背景介绍:

(1)在计算机中,各种存储器都和CPU的地址线、数据线和控制线相连(合称总线Bus)。CPU会把它们总的当成一个由若干存储单元组成的逻辑存储器来看待,我们把它称为内存地址空间
(2)实际上在PC机中,和CPU通过总线相连的芯片除了各种存储器以外,还有以下三种芯片:

(3)CPU将这些芯片中的寄存器都当做端口,对它们进行统一的编址,从而建立起来一个统一的端口地址空间,每一个端口在地址空间中都有一个地址

总结:CPU可以从以下三个地方读取数据
(1)CPU内部寄存器
(2)内存单元
(3)端口

2.端口读写

端口读写的命令只有两条:
(1)IN指令: in al, 60H(从端口地址60H读取数据送到al寄存器中)
(2)OUT指令:out 20H, al(从寄存器al中读出数据,送到端口20H处)
这类指令执行同内存数据操作指令相似,一般来说CPU执行分为三步:
1.CPU通过地址线,将地址信息发出
2.CPU通过控制线选中相应端口所在芯片,告诉它是读数据还是写数据。
3.CPU通过数据线发送数据或者接收数据
注意!端口的读写指令IN和OUT都必须用寄存器al或者ax来传送数据,不能够出现立即数

3、应用举例:COMS RAM芯片端口编程

实验说明:从COMS RAM中读出当前月份,显示在频幕上
实验参考代码:

assume cs:code,ds:data
data segment
    db 'Month:'
data ends

code segment
start:
    mov ax,0b800H
    mov es,ax
    mov si,160*12+35*2 ; 显存段地址
    mov ax,data
    mov ds,ax
    mov di,0

    mov al,8 ; 注意out和in指令中只能用al寄存器来读入数据或者存储要发送到端口的数据
    out 70H,al
    in al,71H
    mov ah,al ; al中存有从8号单元读出的数值,放入ah中
    mov cl,4 ; 准备进行四位移动
    shr ah,cl ; 高位BCD存在ax高位
    and al,00001111b ; 低位存在ax低位、

    add ah,30H
    add al,30H ; 转换为ASCii表示的数字

    mov cx,6
S:  mov dl,ds:[di]
    mov es:[si],dl
    mov byte ptr es:[si+1],02H
    inc di
    add si,2
    loop S  ; 将month传入显存
        
    mov byte ptr es:[si],ah
    add si,2
    mov byte ptr es:[si],al ; 将月份传入显存

    mov ax,4c00H
    int 21H

code ends
end start

实验结果演示:


1234.GIF

4、补充:shl和shr指令同CF标志的使用

注意!如果移动的位数大于1,则必须写入cl寄存器中

上一篇 下一篇

猜你喜欢

热点阅读