亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rs_io.s

?? LINUX 0.11版內核代碼。 并有代碼分析說明。
?? S
字號:
/** linux/kernel/rs_io.s** (C) 1991 Linus Torvalds*//** rs_io.s** This module implements the rs232 io interrupts.*//** 該程序模塊實現rs232 輸入輸出中斷處理程序。*/.text.globl _rs1_interrupt,_rs2_interrupt// size 是讀寫隊列緩沖區的字節長度。size = 1024 /* must be power of two ! 必須是2 的次方并且需and must match the value 與tty_io.c 中的值匹配!in tty_io.c!!! *//* these are the offsets into the read/write buffer structures *//* 以下這些是讀寫緩沖結構中的偏移量 */// 對應定義在include/linux/tty.h 文件中tty_queue 結構中各變量的偏移量。rs_addr = 0 // 串行端口號字段偏移(端口號是0x3f8 或0x2f8)。head = 4 // 緩沖區中頭指針字段偏移。tail = 8 // 緩沖區中尾指針字段偏移。proc_list = 12 // 等待該緩沖的進程字段偏移。buf = 16 // 緩沖區字段偏移。startup = 256 /* chars left in write queue when we restart it *//* 當寫隊列里還剩256 個字符空間(WAKEUP_CHARS)時,我們就可以寫 *//** These are the actual interrupt routines. They look where* the interrupt is coming from, and take appropriate action.*//** 這些是實際的中斷程序。程序首先檢查中斷的來源,然后執行相應* 的處理。*/.align 2//// 串行端口1 中斷處理程序入口點。_rs1_interrupt:pushl $_table_list+8 // tty 表中對應串口1 的讀寫緩沖指針的地址入棧(tty_io.c,99)。jmp rs_int.align 2//// 串行端口2 中斷處理程序入口點。_rs2_interrupt:pushl $_table_list+16 // tty 表中對應串口2 的讀寫緩沖隊列指針的地址入棧。rs_int:pushl %edxpushl %ecxpushl %ebxpushl %eaxpush %espush %ds /* as this is an interrupt, we cannot */pushl $0x10 /* know that bs is ok. Load it */pop %ds /* 由于這是一個中斷程序,我們不知道ds 是否正確,*/pushl $0x10 /* 所以加載它們(讓ds、es 指向內核數據段 */pop %esmovl 24(%esp),%edx // 將緩沖隊列指針地址存入edx 寄存器,// 也即35 或39 行上最先壓入堆棧的地址。movl (%edx),%edx // 取讀隊列指針(地址)??edx。movl rs_addr(%edx),%edx // 取串口1 的端口號??edx。addl $2,%edx /* interrupt ident. reg */ /* edx 指向中斷標識寄存器 */rep_int: // 中斷標識寄存器端口是0x3fa(0x2fa),參見上節列表后信息。xorl %eax,%eax // eax 清零。inb %dx,%al // 取中斷標識字節,用以判斷中斷來源(有4 種中斷情況)。testb $1,%al // 首先判斷有無待處理的中斷(位0=1 無中斷;=0 有中斷)。jne end // 若無待處理中斷,則跳轉至退出處理處end。cmpb $6,%al /* this shouldn't happen, but ... */ /* 這不會發生,但是…*/ja end // al 值>6? 是則跳轉至end(沒有這種狀態)。movl 24(%esp),%ecx // 再取緩沖隊列指針地址??ecx。pushl %edx // 將端口號0x3fa(0x2fa)入棧。subl $2,%edx // 0x3f8(0x2f8)。call jmp_table(,%eax,2) /* NOTE! not *4, bit0 is 0 already */ /* 不乘4,位0 已是0*/// 上面語句是指,當有待處理中斷時,al 中位0=0,位2-1 是中斷類型,因此相當于已經將中斷類型// 乘了2,這里再乘2,得到跳轉表對應各中斷類型地址,并跳轉到那里去作相應處理。popl %edx // 彈出中斷標識寄存器端口號0x3fa(或0x2fa)。jmp rep_int // 跳轉,繼續判斷有無待處理中斷并繼續處理。end: movb $0x20,%al // 向中斷控制器發送結束中斷指令EOI。outb %al,$0x20 /* EOI */pop %dspop %espopl %eaxpopl %ebxpopl %ecxpopl %edxaddl $4,%esp # jump over _table_list entry # 丟棄緩沖隊列指針地址。iret// 各中斷類型處理程序地址跳轉表,共有4 種中斷來源:// modem 狀態變化中斷,寫字符中斷,讀字符中斷,線路狀態有問題中斷。jmp_table:.long modem_status,write_char,read_char,line_status.align 2modem_status:addl $6,%edx /* clear intr by reading modem status reg */inb %dx,%al /* 通過讀modem 狀態寄存器進行復位(0x3fe) */ret.align 2line_status:addl $5,%edx /* clear intr by reading line status reg. */inb %dx,%al /* 通過讀線路狀態寄存器進行復位(0x3fd) */ret.align 2read_char:inb %dx,%al /* 讀取字符??al。movl %ecx,%edx /* 當前串口緩沖隊列指針地址??edx。subl $_table_list,%edx // 緩沖隊列指針表首址 - 當前串口隊列指針地址??edx,shrl $3,%edx // 差值/8。對于串口1 是1,對于串口2 是2。movl (%ecx),%ecx # read-queue # 取讀緩沖隊列結構地址??ecx。movl head(%ecx),%ebx // 取讀隊列中緩沖頭指針??ebx。movb %al,buf(%ecx,%ebx) // 將字符放在緩沖區中頭指針所指的位置。incl %ebx // 將頭指針前移一字節。andl $size-1,%ebx // 用緩沖區大小對頭指針進行模操作。指針不能超過緩沖區大小。cmpl tail(%ecx),%ebx // 緩沖區頭指針與尾指針比較。je 1f // 若相等,表示緩沖區滿,跳轉到標號1 處。movl %ebx,head(%ecx) // 保存修改過的頭指針。1: pushl %edx // 將串口號壓入堆棧(1- 串口1,2 - 串口2),作為參數,call _do_tty_interrupt // 調用tty 中斷處理C 函數(。addl $4,%esp // 丟棄入棧參數,并返回。ret.align 2write_char:movl 4(%ecx),%ecx # write-queue # 取寫緩沖隊列結構地址??ecx。movl head(%ecx),%ebx // 取寫隊列頭指針??ebx。subl tail(%ecx),%ebx // 頭指針 - 尾指針 = 隊列中字符數。andl $size-1,%ebx # nr chars in queue # 對指針取模運算。je write_buffer_empty // 如果頭指針 = 尾指針,說明寫隊列無字符,跳轉處理。cmpl $startup,%ebx // 隊列中字符數超過256 個?ja 1f // 超過,則跳轉處理。movl proc_list(%ecx),%ebx # wake up sleeping process # 喚醒等待的進程。// 取等待該隊列的進程的指針,并判斷是否為空。testl %ebx,%ebx # is there any? # 有等待的進程嗎?je 1f // 是空的,則向前跳轉到標號1 處。movl $0,(%ebx) // 否則將進程置為可運行狀態(喚醒進程)。。1: movl tail(%ecx),%ebx // 取尾指針。movb buf(%ecx,%ebx),%al // 從緩沖中尾指針處取一字符??al。outb %al,%dx // 向端口0x3f8(0x2f8)送出到保持寄存器中。incl %ebx // 尾指針前移。andl $size-1,%ebx // 尾指針若到緩沖區末端,則折回。movl %ebx,tail(%ecx) // 保存已修改過的尾指針。cmpl head(%ecx),%ebx // 尾指針與頭指針比較,je write_buffer_empty // 若相等,表示隊列已空,則跳轉。ret.align 2write_buffer_empty:movl proc_list(%ecx),%ebx # wake up sleeping process # 喚醒等待的進程。// 取等待該隊列的進程的指針,并判斷是否為空。testl %ebx,%ebx # is there any? # 有等待的進程嗎?je 1f # 無,則向前跳轉到標號1 處。movl $0,(%ebx) # 否則將進程置為可運行狀態(喚醒進程)。1: incl %edx # 指向端口0x3f9(0x2f9)。inb %dx,%al # 讀取中斷允許寄存器。jmp 1f # 稍作延遲。1: jmp 1f1: andb $0xd,%al /* disable transmit interrupt *//* 屏蔽發送保持寄存器空中斷(位1) */outb %al,%dx // 寫入0x3f9(0x2f9)。ret

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产精品久久久久| 国产成人三级在线观看| 欧美mv和日韩mv国产网站| 91激情在线视频| 97精品电影院| 色哟哟一区二区在线观看| 色妹子一区二区| 欧美色图天堂网| 欧美日韩一区高清| 欧美一区二区啪啪| 久久亚洲精品小早川怜子| 久久久久高清精品| 成人免费视频在线观看| 日韩美女视频一区| 亚洲成人午夜影院| 韩国成人福利片在线播放| 欧美电视剧在线观看完整版| 欧美军同video69gay| 91精品国产高清一区二区三区 | 久久久亚洲高清| 国产日韩亚洲欧美综合| 亚洲免费伊人电影| 日韩在线一区二区三区| 国产精品综合二区| 91久久奴性调教| 精品久久久久久无| 中文在线资源观看网站视频免费不卡 | 国产精品美女久久久久久久| 亚洲欧美一区二区三区国产精品| 日本成人在线电影网| 国产jizzjizz一区二区| 欧美日韩一级二级三级| 精品国产91洋老外米糕| 亚洲欧美日韩国产一区二区三区| 午夜精品在线看| 国产99精品国产| 欧美另类久久久品| 国产精品拍天天在线| 日韩一区欧美二区| voyeur盗摄精品| 欧美大片在线观看一区二区| 亚洲人吸女人奶水| 国产成人免费9x9x人网站视频| 欧美午夜理伦三级在线观看| 久久久www成人免费无遮挡大片| 亚洲一区二区三区中文字幕| 国产精品综合在线视频| 91精品国产综合久久久久久久| 一区免费观看视频| 国产综合久久久久久久久久久久 | 精品成a人在线观看| 一区二区三区91| 成人av先锋影音| 精品国产乱子伦一区| 午夜精品久久久久影视| 91亚洲精品一区二区乱码| 久久精品亚洲麻豆av一区二区| 免费看日韩精品| 欧美写真视频网站| 亚洲一区二区三区三| 99精品欧美一区二区三区综合在线| xnxx国产精品| 久久精品久久综合| 日韩一区二区三区av| 亚洲福利国产精品| 欧美视频一区二| 亚洲最大成人网4388xx| 日本精品一区二区三区高清 | 欧美视频你懂的| 亚洲综合小说图片| 欧美视频在线播放| 日本道免费精品一区二区三区| 日韩你懂的电影在线观看| 一区二区欧美国产| 波多野结衣视频一区| 中文字幕欧美区| 不卡av在线网| 亚洲乱码国产乱码精品精可以看| 99久久久精品免费观看国产蜜| 国产日韩成人精品| 成人激情动漫在线观看| 亚洲欧美一区二区久久| 欧亚洲嫩模精品一区三区| 亚洲综合一区二区精品导航| 欧美日韩免费高清一区色橹橹| 亚洲成av人片在线观看| 国产真实乱子伦精品视频| 国产精品久久久一本精品 | 久久一区二区三区国产精品| 久久99久久99精品免视看婷婷| 精品成人a区在线观看| 国产成人久久精品77777最新版本| 国产欧美一区在线| 91国在线观看| 裸体健美xxxx欧美裸体表演| 久久久亚洲国产美女国产盗摄| aaa亚洲精品一二三区| 夜夜嗨av一区二区三区网页| 欧美高清激情brazzers| 另类小说综合欧美亚洲| 国产午夜久久久久| 欧美在线观看视频在线| 亚洲午夜一二三区视频| 欧美大白屁股肥臀xxxxxx| 天堂蜜桃91精品| 国产成人鲁色资源国产91色综| 中文字幕亚洲欧美在线不卡| 欧美日韩在线精品一区二区三区激情 | 亚洲国产精品av| 欧美日韩一二三区| 国产成人一区在线| 亚洲制服丝袜av| 国产亚洲欧美中文| 欧美日韩国产综合一区二区三区| 黑人精品欧美一区二区蜜桃 | 免费久久99精品国产| 中文字幕av免费专区久久| 欧美日韩视频不卡| 成人免费高清在线| 麻豆精品一区二区三区| 国产精品久久久久久户外露出| 欧美一区二区三区在| 国产白丝精品91爽爽久久| 7777精品伊人久久久大香线蕉完整版 | 日本网站在线观看一区二区三区| 久久久久久9999| 91视频在线观看免费| 国产一区二区三区免费在线观看| 偷拍日韩校园综合在线| 亚洲三级在线免费| 久久久国际精品| 欧美tk丨vk视频| 欧美高清视频一二三区 | 欧美顶级少妇做爰| 色综合天天做天天爱| 大胆亚洲人体视频| 国内成人自拍视频| 日本vs亚洲vs韩国一区三区二区| 国产精品国产三级国产三级人妇| 精品国产免费人成在线观看| 91麻豆精品国产无毒不卡在线观看| 国产中文字幕精品| 午夜欧美视频在线观看| 亚洲色图欧美在线| 亚洲视频 欧洲视频| 国产精品毛片久久久久久| 国产亚洲精品中文字幕| 久久亚洲影视婷婷| 久久美女艺术照精彩视频福利播放| 欧美精品一二三区| 91精品国产综合久久福利| 欧美日韩国产不卡| 3atv在线一区二区三区| 69久久99精品久久久久婷婷 | 日韩欧美在线观看一区二区三区| 欧美视频一区二区三区在线观看| 91久久久免费一区二区| 欧美亚洲免费在线一区| 欧美理论在线播放| 欧美精品第1页| 精品国产伦一区二区三区免费| 久久综合久久久久88| 国产欧美日韩另类一区| 悠悠色在线精品| 成人91在线观看| 波多野结衣欧美| 99久久精品一区| 91福利国产成人精品照片| 成人网页在线观看| 色婷婷亚洲精品| 欧美精选在线播放| 久久亚区不卡日本| 国产精品情趣视频| 亚洲一级二级三级在线免费观看| 五月天久久比比资源色| 美女一区二区视频| 成人免费的视频| 欧美日韩精品一区二区三区| 精品久久久久久久久久久久久久久久久 | 91久久人澡人人添人人爽欧美| 欧美亚男人的天堂| 日韩欧美国产成人一区二区| 欧美激情一区二区三区不卡 | 国产人久久人人人人爽| 亚洲九九爱视频| 男男视频亚洲欧美| 成人一区二区三区视频在线观看| 91视频com| 欧美电影免费观看高清完整版在线 | 欧美亚洲一区二区在线观看| 欧美年轻男男videosbes| 国产校园另类小说区| 欧美精品一区二区在线观看| 国产精品女上位| 首页国产欧美日韩丝袜| 成人免费视频国产在线观看| 日韩三级高清在线| 一区二区三区在线视频观看| 91蝌蚪porny| 精品国产电影一区二区|