14.1 端口的讀寫
在訪問端口的時候,CPU通過端口地址來定位端口。因爲端口所在的芯片和CPU通過總線相連,所以,端口地址和內存地址一樣,通過地址總線來傳送。在PC系統中,CPU最多可以定位64KB個不同的端口。則端口地址的範圍爲0~65535。
端口的讀寫指令只有兩條:in和out,分別用於從端口讀取數據和往端口寫入數據
14.2 CMOS RAM芯片
檢測點 14.1
1.編程,讀取CMOS RAM的2號單元的內容。
assume cs:code
code segment
start:
mov al,2
out 70H,al ;將2送入端口70H
in al,71H ;從端口71H讀出2號單元的內容
mov ax,4c00H
int 21H
code ends
end start
2.編程,讀取CMOS RAM的2號單元的內容。
assume cs:code
code segment
start:
mov al,2
out 70H,al ;要訪問的地址(2號)寫到70端口
mov al,0
in 71,al ;要讀出的數據寫到71端口
mov ax,4c00H
int 21H
code ends
end start
14.3 shl和shr指令
shl和shr是邏輯移位指令,shl是邏輯左移,shr是邏輯右移。
檢測點 14.2
編程,用加法和移位指令計算(ax)=(ax)*10
提示:(ax)*10 = (ax)*2 + (ax)*8
assume cs:code
code segment
start:
mov ax,10 ;ax初值爲10
mov bx,ax ;先把ax的值給bx
shl ax,1
mov cl,3
shl bx,cl
add ax,bx
mov ax,4c00h
int 21h
code ends
end start
運行結果:
14.4 CMOS RAM中存儲的時間信息
編程,在屏幕中間顯示當前的月份。
程序代碼如下:
CODES SEGMENT
ASSUME CS:CODES
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
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
INT 21H
CODES ENDS
END START
運行結果: