日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

端口---汇编学习笔记

發(fā)布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 端口---汇编学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

端口

在PC機系統(tǒng)中,和CPU通過總線相連的芯片除各種存儲器外,還有以下3種芯片。

  • 各種接口卡(比如,網卡、顯卡)上的接口芯片,它們控制接口卡進行工作
  • 主板上的接口芯片,CPU通過它們對部分外設進行訪問
  • 其他芯片,用來存儲相關的系統(tǒng)信息,或進行相關的輸入輸出處理
  • 在這些芯片中,都有一組可以由CPU讀寫的寄存器。這些寄存器,它們在物理上可能處于不同的芯片中,但是它們在以下兩點上相同。

  • 都和CPU的總線相連,當然這種連接是通過它們所在的芯片進行的
  • CPU對它們進行讀或寫的時候都通過控制線向它們所在的芯片發(fā)出端口讀寫命令
  • CPU可以直接讀寫以下3個地方的數據

  • CPU內部的寄存器
  • 內存單元
  • 端口

  • 14.1 端口的讀寫

    在訪問端口的時候,CPU通過端口地址來定位端口。因為端口所在的芯片和CPU通過總線相連,所以,端口地址和內存地址一樣,通過地址總線來傳送。在PC系統(tǒng)中,CPU最多可以定位64KB個不同端口。則端口地址的范圍為0~65535。

    對端口的讀寫不能用mov、push、pop等內存讀寫指令。端口的讀寫指令只有兩條: in和out ,分別用于端口讀取數據和往端口寫入數據。

    訪問端口:in al,60h ;從60h號端口讀入一個字節(jié)

    對0~255以內的端口進行讀寫時:

    in al,20h ;從20h端口讀入一個字節(jié) out 20h,al ;往20h端口寫入一個字節(jié)

    對256~65535的端口進行讀寫時,端口號放在dx中

    mov dx,3f8h ;將端口號3f8h送入dx in al,dx ;從3f8h端口讀入一個字節(jié) out dx,al ;向3f8h端口寫入一個字節(jié)

    14.2 CMOS RAM芯片

    CMOS芯片特征如下:

  • 包含一個實時鐘和一個有128個存儲單元的RAM存儲器(早期的計算機為64個字節(jié))
  • 該芯片靠電池供電。所以,關機后其內部的實時鐘仍可正常工作,RAM中的信息不丟失
  • 128個字節(jié)的RAM中,內部實時鐘占用0~0dh單元來保存時間信息,其余大部分單元用來保存系統(tǒng)配置信息,供系統(tǒng)啟動時BIOS程序讀取。BIOS也提供了相關的程序,使我們可以在開機的時候配置CMOS RAM中的系統(tǒng)信息
  • 該芯片內部有兩個端口,端口地址為70h和71h。CPU通過這兩個端口來讀寫CMOS RAM
  • 70h為地址端口,存放要訪問的CMOS RAM單元的地址;71h為數據端口,存放從選定的CMOS RAM單元中讀取的數據,或要寫入到其中的數據。可見,CPU對CMOS RAM的讀寫分兩步進行,比如,讀CMOS RAM的2號單元:
  • 將2送入端口70h
  • 從端口71h讀出2號單元的內容
  • 檢測點 14.1
    (1)編程,讀取CMOS RAM的2號單元的內容。
    答:2號單元的內容為0。
    (2)編程,向CMOS RAM的2號單元寫入0。
    答:1.mov al,0,2.out 2,al


    14.3 shl和shr指令

    shl和shr是邏輯移位指令。

    shil是邏輯左移指令,它的功能為:

  • 將一個寄存器或內存單元中的數據向左移位
  • 將最后移出的一位寫入CF中
  • 最低位用0補充
  • shr是邏輯右移位指令,功能剛剛相反

    以上兩點都太簡單,不做闡述

    檢測點 14.2
    編程,用加法和移位指令計算(ax)=(ax)?10(ax)=(ax)?10。(提示,(ax)?10=(ax)?2+(ax)?8(ax)?10=(ax)?2+(ax)?8)
    步驟如下(左移位一個bit是乘2):

    mov bx,ax shl bx,1 ;乘2 shl ax,3 ;乘8 add ax,bx

    14.4 CMOS RAM中存儲的時間信息

    在CMOS RAM中,存放著當前的時間:年、月、日、時、分、秒。這6個信息的長度都為1個字節(jié),存放單元為:秒:0、分:2、時:4、日:7、月:8、年:9

    這些數據以BCD碼的方式存放。

    十進制數碼對應的BCD碼
    00000
    10001
    91001

    這里有一個例子,自己閱讀,略過咯。


    實驗14 訪問CMOS RAM

    編程,以“年/月/日 時:分:秒”的格式,顯示當前的日期、時間。
    寫的很粗糙,可以復用性的。將987420放入data段中,s子程序是將字符串處理后的結果放入data段中,lo是將字符串顯示出來,改進版本可以用0作為結束。

    assume cs:codedata segmentdb '00/00/00 00:00:00' data endscode segmentstart:mov di,160*12+30*2mov bx,datamov ds,bxmov bx,0mov al,9call smov al,8call smov al,7call smov al,4call smov al,2call smov al,0call smov bx,0mov cx,17lo:mov ax,0b800hmov es,axmov al,ds:[bx]mov byte ptr es:[di],aladd di,2inc bxloop lomov ax,4c00hint 21hs:out 70h,alin al,71hmov ah,almov cl,4shr ah,cland al,00001111badd ah,30hadd al,30hmov byte ptr ds:[bx],ahmov byte ptr ds:[bx+1],aladd bx,3retcode ends end start

    實驗結果:

    總結

    以上是生活随笔為你收集整理的端口---汇编学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。