汇编in和out介绍
生活随笔
收集整理的這篇文章主要介紹了
汇编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
設備和芯片的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介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rs485接收中断函数使能_RS485通
- 下一篇: 安徽大学线性代数第二章习题册(详细解答)