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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

汇编in和out介绍

發布時間:2024/8/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编in和out介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
; Copyright (C) 2011 Alen D. Archuleta (zeafoo@gmail.com) ;
設備和芯片的I/O端口操作實現,其實沒有復雜的東西在里邊 ;
I/O端口操作主要是看一堆文檔,把整個X86架構的PC機所有I/O端口記住, ;
并記住它們每一個數據寄存器、命令寄存器等操作訪問標準(也可以稱之協議) ;
記住之后,整個過程中就是按標準使用I/O指令: ;
in, out(只能與DX,AX,AL寄存器結合使用) ;
下面的實現是提供給C使用,因為不太喜歡GNU的inline asm,語法太 ;
晦澀,所以直接使用匯編實現。 ;
inb 從I/O端口讀取一個字節(BYTE, HALF-WORD) ;
outb 向I/O端口寫入一個字節(BYTE, HALF-WORD) ;
inw 從I/O端口讀取一個字(WORD,即兩個字節) ;
outw 向I/O端口寫入一個字(WORD,即兩個字節) ;
byte inb(word port); ;
word inw(word port); ;
void outb(word port, byte value); ;
void outw(word port, word value); ;
編譯: ;
nasm -f elf -o io.o io.asm ;
與內核一起鏈接使用
global inb, outb, inw, outw
[section .text]
inb:
xor eax, eax ; 在C語言中,都是以EAX寄存器作為返回值
push dx ; 這個過程要對DX修改,所以先保存一下
; 返回地址占加個字節,所以偏移4開始讀取,第一個參數
; 對于參數傳遞過程不作詳細的記錄,另寫日志詳細介紹
mov dx, [esp + 4]
in al, dx
pop dx ; 恢復DX寄存器
ret

outb:
push dx
mov dx, [esp + 4]
mov al, [esp + 6]
out dx, al
pop dx
ret
inw:
xor eax, eax
push dx

mov dx, [esp + 4]
in ax, dx
pop dx
ret

outw:
push dx
mov dx, [esp + 4]
mov ax, [esp + 6]
out dx, ax

pop dx
ret

總結

以上是生活随笔為你收集整理的汇编in和out介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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