ov dx,0 ;ds:dx指向字符串的首地址 data:0
mov ah,9
int 21h
mov ax,4c00h
int 21h
code ends
end start
二、端口
各种芯片(网卡,显卡等)都有一组可以由CPU读写的寄存器。CPU可以通过这些寄存器读取数据,或者操控芯片。CPU把这些寄存器当做端口,对这些寄存器进行统一编址。每个端口宅地址空间中都有一个地址。
1. in和out指令
访问端口用in和out
如果:
in al,60h ; 从60h端口读取数据放到al中
注意:只能用ax或者al来存放从端口中读入的数据或要发送到端口的数据。
对0~255以内的端口进行读写时:
in al,20h
out 20h,al
对256~65535的端口进行读写时,端口号放在dx中:
mov dx,3f8h
in al.dx
ou dx,al
2. shl和shr指令
shl:左移指令,最低位补0,将移出的追后以为写入CF中
如果是移1位就:
shl al,1
如果移动大于1位,必须将移动的位数放在cl中
mov cl,3
shl al,cl
shr是右移,其他与shl一样
3. CMOS RAM芯片
PC中有一个靠电池供电CMOS RAM芯片,它包含一个实时种和一个有128个存储单元的RAM存储器。
它有两个端口:
70h:保存要读取内存单元的地址
71h:读取内存单元
CMOS RAM中存储的时间信息
0:秒;2:分;
4:时;7:日;
8:月;9:年;
例子:在屏幕显示月份。
assume cs:code
code segment
start:
mov al,8
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h ;'0' 的ASCII值
add al,30h
mov bx,0b800h
mov es,bx
mov byte ptr es:[160*12+40*2],ah
mov byte ptr es:[160*12+40*2+2],al
mov ax,4c00h
int 21h
code ends
end start