linux内核态串口读写程序,linux 0.11 内核学习 -- rs_io.s,串口汇编代码

/*

*  该文件实现rs232 串行通信中断处理

*/

/*

*  linux/kernel/rs_io.s

*

*  (C) 1991  Linus Torvalds

*/

/*

*rs_io.s

*

* This module implements the rs232 io interrupts.

*/

.text

.globl _rs1_interrupt,_rs2_interrupt

/* 读写队列缓冲区的长度 */

size= 1024/* must be power of two !

and must match the value

in tty_io.c!!! */

/* these are the offsets into the read/write buffer structures */

/* 读写缓冲结构中的偏移量tty_queue */

rs_addr = 0

head = 4

tail = 8

proc_list = 12

buf = 16

/* 当写队列里还剩256 个字符空间(WAKEUP_CHARS)时,我们就可以写 */

startup= 256/* chars left in write queue when we restart it */

/*

* These are the actual interrupt routines. They look where

* the interrupt is coming from, and take appropriate action.

*/

.align 2

/* 串行端口1 中断处理程序入口点 */

_rs1_interrupt:

// tty 表中对应串口1 的读写缓冲指针的地址入栈

pushl $_table_list+8// table_list定义在文件tty_io.c文件中

jmp rs_int

/* 串行端口2 中断处理程序入口点 */

.align 2

_rs2_interrupt:

pushl $_table_list+16// 同上

rs_int:

pushl %edx

pushl %ecx

pushl %ebx

pushl %eax

push %es

push %ds/* as this is an interrupt, we cannot */

/* 让ds、es 指向内核数据段 */

pushl $0x10/* know that bs is ok. Load it */

pop %ds

pushl $0x10

pop %es

movl 24(%esp),%edx// 将缓冲队列指针地址存入edx 寄存器

movl (%edx),%edx// 取读队列指针(地址)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值