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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rs_io.s

?? LINUX 0.11版內(nèi)核代碼。 并有代碼分析說明。
?? S
字號:
;/* passed;* linux/kernel/rs_io.s;*;* (C) 1991 Linus Torvalds;*/.386p
.model flat
;/*;* rs_io.s;*;* This module implements the rs232 io interrupts.;*/;/*;* 該程序模塊實現(xiàn)rs232 輸入輸出中斷處理程序。;*/;// size 是讀寫隊列緩沖區(qū)的字節(jié)長度。bsize = 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 */;/* 以下這些是讀寫緩沖結(jié)構(gòu)中的偏移量 */;// 對應(yīng)定義在include/linux/tty.h 文件中tty_queue 結(jié)構(gòu)中各變量的偏移量。rs_addr = 0 ;// 串行端口號字段偏移(端口號是0x3f8 或0x2f8)。head = 4 ;// 緩沖區(qū)中頭指針字段偏移。tail = 8 ;// 緩沖區(qū)中尾指針字段偏移。proc_list = 12 ;// 等待該緩沖的進程字段偏移。buf = 16 ;// 緩沖區(qū)字段偏移。startup = 256 ;/* chars left in write queue when we restart it */;/* 當(dāng)寫隊列里還剩256 個字符空間(WAKEUP_CHARS)時,我們就可以寫 */;/*;* These are the actual interrupt routines. They look where;* the interrupt is coming from, and take appropriate action.;*/;/*;* 這些是實際的中斷程序。程序首先檢查中斷的來源,然后執(zhí)行相應(yīng);* 的處理。;*/
extrn _table_list:dword, _do_tty_interrupt:proc
public _rs1_interrupt,_rs2_interrupt

.code
align 4;// 串行端口1 中斷處理程序入口點。_rs1_interrupt:	push _table_list+8 ;// tty 表中對應(yīng)串口1 的讀寫緩沖指針的地址入棧(tty_io.c,99)。	jmp rs_intalign 4;// 串行端口2 中斷處理程序入口點。_rs2_interrupt:	push _table_list+16 ;// tty 表中對應(yīng)串口2 的讀寫緩沖隊列指針的地址入棧。rs_int:	push edx	push ecx	push ebx	push eax	push es	push ds ;/* as this is an interrupt, we cannot */	push 10h ;/* know that bs is ok. Load it */	pop ds ;/* 由于這是一個中斷程序,我們不知道ds 是否正確,*/	push 10h ;/* 所以加載它們(讓ds、es 指向內(nèi)核數(shù)據(jù)段 */	pop es	mov edx,24[esp] ;// 將緩沖隊列指針地址存入edx 寄存器,;// 也即35 或39 行上最先壓入堆棧的地址。	mov edx,[edx] ;// 取讀隊列指針(地址)->edx。	mov edx,rs_addr[edx] ;// 取串口1 的端口號??edx。	add edx,2 ;/* interrupt ident. reg */ /* edx 指向中斷標(biāo)識寄存器 */rep_int: ;// 中斷標(biāo)識寄存器端口是0x3fa(0x2fa),參見上節(jié)列表后信息。	xor eax,eax ;// eax 清零。	in al,dx ;// 取中斷標(biāo)識字節(jié),用以判斷中斷來源(有4 種中斷情況)。	test al,1 ;// 首先判斷有無待處理的中斷(位0=1 無中斷;=0 有中斷)。	jne end1 ;// 若無待處理中斷,則跳轉(zhuǎn)至退出處理處end。	cmp al,6 ;/* this shouldn't happen, but ... */ /* 這不會發(fā)生,但是…*/	ja end1 ;// al 值>6? 是則跳轉(zhuǎn)至end(沒有這種狀態(tài))。	mov ecx,24[esp] ;// 再取緩沖隊列指針地址??ecx。	push edx ;// 將端口號0x3fa(0x2fa)入棧。	sub edx,2 ;// 0x3f8(0x2f8)。	call jmp_table[eax*2] ;/* NOTE! not ;*4, bit0 is 0 already */ /* 不乘4,位0 已是0*/;// 上面語句是指,當(dāng)有待處理中斷時,al 中位0=0,位2-1 是中斷類型,因此相當(dāng)于已經(jīng)將中斷類型;// 乘了2,這里再乘2,得到跳轉(zhuǎn)表對應(yīng)各中斷類型地址,并跳轉(zhuǎn)到那里去作相應(yīng)處理。	pop edx ;// 彈出中斷標(biāo)識寄存器端口號0x3fa(或0x2fa)。	jmp rep_int ;// 跳轉(zhuǎn),繼續(xù)判斷有無待處理中斷并繼續(xù)處理。end1:
	mov al,20h ;// 向中斷控制器發(fā)送結(jié)束中斷指令EOI。	out 20h,al ;/* EOI */	pop ds	pop es	pop eax	pop ebx	pop ecx	pop edx	add esp,4 ;// jump over _table_list entry # 丟棄緩沖隊列指針地址。	iretd;// 各中斷類型處理程序地址跳轉(zhuǎn)表,共有4 種中斷來源:;// modem 狀態(tài)變化中斷,寫字符中斷,讀字符中斷,線路狀態(tài)有問題中斷。jmp_table:	dd modem_status,write_char,read_char,line_statusalign 4modem_status:	add edx,6 ;/* clear intr by reading modem status reg */	in al,dx ;/* 通過讀modem 狀態(tài)寄存器進行復(fù)位(0x3fe) */	retalign 4line_status:	add edx,5 ;/* clear intr by reading line status reg. */	in al,dx ;/* 通過讀線路狀態(tài)寄存器進行復(fù)位(0x3fd) */	retalign 4read_char:	in al,dx ;// 讀取字符->al。	mov edx,ecx ;// 當(dāng)前串口緩沖隊列指針地址??edx。	sub edx,_table_list ;// 緩沖隊列指針表首址 - 當(dāng)前串口隊列指針地址??edx,	shr edx,3 ;// 差值/8。對于串口1 是1,對于串口2 是2。	mov ecx,[ecx] ;// read-queue # 取讀緩沖隊列結(jié)構(gòu)地址??ecx。	mov ebx,head[ecx] ;// 取讀隊列中緩沖頭指針??ebx。	mov buf[ebx+ecx],al ;// 將字符放在緩沖區(qū)中頭指針?biāo)傅奈恢谩?/span>	inc ebx ;// 將頭指針前移一字節(jié)。	and ebx,bsize-1 ;// 用緩沖區(qū)大小對頭指針進行模操作。指針不能超過緩沖區(qū)大小。	cmp ebx,tail[ecx] ;// 緩沖區(qū)頭指針與尾指針比較。	je l1 ;// 若相等,表示緩沖區(qū)滿,跳轉(zhuǎn)到標(biāo)號1 處。	mov head[ecx],ebx ;// 保存修改過的頭指針。l1: push edx ;// 將串口號壓入堆棧(1- 串口1,2 - 串口2),作為參數(shù),	call _do_tty_interrupt ;// 調(diào)用tty 中斷處理C 函數(shù)(。	add esp,4 ;// 丟棄入棧參數(shù),并返回。	retalign 4write_char:	mov ecx,[4+ecx] ;// write-queue # 取寫緩沖隊列結(jié)構(gòu)地址??ecx。	mov ebx,head[ecx] ;// 取寫隊列頭指針??ebx。	sub ebx,tail[ecx] ;// 頭指針 - 尾指針 = 隊列中字符數(shù)。	and ebx,bsize-1 ;// nr chars in queue # 對指針取模運算。	je write_buffer_empty ;// 如果頭指針 = 尾指針,說明寫隊列無字符,跳轉(zhuǎn)處理。	cmp ebx,startup ;// 隊列中字符數(shù)超過256 個?	ja l2 ;// 超過,則跳轉(zhuǎn)處理。	mov ebx,proc_list[ecx] ;// wake up sleeping process # 喚醒等待的進程。;// 取等待該隊列的進程的指針,并判斷是否為空。	test ebx,ebx ;// is there any? # 有等待的進程嗎?	je l2 ;// 是空的,則向前跳轉(zhuǎn)到標(biāo)號1 處。	mov dword ptr [ebx],0 ;// 否則將進程置為可運行狀態(tài)(喚醒進程)。。l2: mov ebx,tail[ecx] ;// 取尾指針。	mov al,buf[ebx+ecx] ;// 從緩沖中尾指針處取一字符??al。	out dx,al ;// 向端口0x3f8(0x2f8)送出到保持寄存器中。	inc ebx ;// 尾指針前移。	and ebx,bsize-1 ;// 尾指針若到緩沖區(qū)末端,則折回。	mov tail[ecx],ebx ;// 保存已修改過的尾指針。	cmp ebx,head[ecx] ;// 尾指針與頭指針比較,	je write_buffer_empty ;// 若相等,表示隊列已空,則跳轉(zhuǎn)。	retalign 4write_buffer_empty:	mov ebx,proc_list[ecx] ;// wake up sleeping process # 喚醒等待的進程。;// 取等待該隊列的進程的指針,并判斷是否為空。	test ebx,ebx ;// is there any? # 有等待的進程嗎?	je l3 ;// 無,則向前跳轉(zhuǎn)到標(biāo)號1 處。	mov dword ptr [ebx],0 ;// 否則將進程置為可運行狀態(tài)(喚醒進程)。l3: inc edx ;// 指向端口0x3f9(0x2f9)。	in al,dx ;// 讀取中斷允許寄存器。	jmp l4 ;// 稍作延遲。l4: jmp l5l5: and al,0dh ;/* disable transmit interrupt */;/* 屏蔽發(fā)送保持寄存器空中斷(位1) */	out dx,al ;// 寫入0x3f9(0x2f9)。	retend

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级电影精品| 韩国女主播一区| 色综合天天综合| 久久精品这里都是精品| 国产激情一区二区三区桃花岛亚洲 | 国产色婷婷亚洲99精品小说| 国产精品一卡二卡在线观看| 国产精品美女久久久久久久久| 成人手机在线视频| 最新国产精品久久精品| 91在线云播放| 亚洲高清免费视频| 精品99一区二区三区| 不卡的电视剧免费网站有什么| 日韩美女久久久| 欧美日韩免费一区二区三区| 久久99精品国产麻豆婷婷洗澡| 久久九九全国免费| 色综合久久天天| 热久久久久久久| 国产精品三级在线观看| 日本精品视频一区二区| 日本怡春院一区二区| 国产亚洲综合在线| 色婷婷综合久久久中文字幕| 蜜臀久久99精品久久久久久9| 国产欧美一区在线| 欧美色男人天堂| 精品一区二区三区免费毛片爱| 中文字幕亚洲区| 欧美一卡2卡三卡4卡5免费| 国产成人精品一区二区三区四区 | 日韩一区二区三区四区| 成人一级片网址| 亚洲无线码一区二区三区| 精品成a人在线观看| 91在线视频播放地址| 免费日韩伦理电影| 亚洲天堂av一区| 欧美本精品男人aⅴ天堂| 91视频www| 国产精品一区二区久激情瑜伽| 亚洲日本电影在线| 精品国产a毛片| 欧美日韩一区二区在线观看| 成人免费三级在线| 麻豆成人免费电影| 一区二区三区在线视频观看58 | 日韩欧美一区中文| 91性感美女视频| 国精产品一区一区三区mba视频 | 欧美视频在线观看一区| 国产伦精品一区二区三区在线观看| 一区二区三区四区精品在线视频| 久久亚洲一区二区三区明星换脸| 欧美亚洲禁片免费| 99久久婷婷国产| 国产精品一级二级三级| 免费高清在线视频一区·| 一区二区不卡在线视频 午夜欧美不卡在 | 综合电影一区二区三区| 久久久久久97三级| 日韩一区二区在线观看视频播放| 日本韩国欧美国产| av一区二区久久| 国产成人av在线影院| 久久www免费人成看片高清| 丝袜亚洲另类欧美综合| 一区二区三区不卡在线观看| 国产精品久久久久久久久久免费看 | 日韩欧美亚洲一区二区| 91精品一区二区三区久久久久久| 日本高清视频一区二区| 99国产精品久久| 成人免费av在线| www.综合网.com| 不卡在线观看av| 成人av第一页| a4yy欧美一区二区三区| 99国产精品久久久| 91影视在线播放| 色婷婷久久久久swag精品| 97se狠狠狠综合亚洲狠狠| www.在线欧美| 一本到高清视频免费精品| 一本久久综合亚洲鲁鲁五月天| 成人av电影在线播放| 91在线丨porny丨国产| 91免费国产在线观看| 色88888久久久久久影院按摩| 色哟哟国产精品| 欧美日韩精品一区二区三区| 欧美高清精品3d| 日韩网站在线看片你懂的| 精品少妇一区二区三区免费观看| 精品剧情在线观看| 国产欧美精品一区二区色综合| 国产精品国产三级国产aⅴ入口 | 一区二区三区鲁丝不卡| 午夜视黄欧洲亚洲| 毛片一区二区三区| 丁香六月综合激情| 色综合久久中文综合久久97| 欧美喷潮久久久xxxxx| 日韩女优视频免费观看| 欧美激情一区二区三区蜜桃视频| 国产精品不卡在线| 亚洲超碰97人人做人人爱| 久久国产三级精品| 成人精品一区二区三区四区| 91麻豆6部合集magnet| 51精品国自产在线| 欧美国产日韩一二三区| 一区二区三区资源| 久久精品国产第一区二区三区| 国产成人在线看| 99精品在线免费| 欧美一二区视频| 亚洲欧美一区二区在线观看| 亚洲bt欧美bt精品777| 国产麻豆精品视频| 欧亚洲嫩模精品一区三区| 日韩欧美国产综合| 中文字幕欧美一| 久久超级碰视频| 欧洲一区在线观看| 国产亚洲成aⅴ人片在线观看 | 国产欧美日韩三级| 丝袜诱惑亚洲看片| 成人av在线一区二区| 91精品国产综合久久国产大片| 国产精品青草综合久久久久99| 五月综合激情婷婷六月色窝| 成人激情开心网| 欧美一卡2卡3卡4卡| 亚洲精选视频在线| 国产美女视频一区| 欧美一区二区免费视频| 一区二区三区中文免费| 国产suv精品一区二区6| 日韩欧美精品在线视频| 亚洲一区二区三区影院| 波多野结衣在线一区| 日韩精品中文字幕一区二区三区| 一区二区三区中文字幕| 成人黄色一级视频| 2020国产精品自拍| 热久久免费视频| 欧美人妇做爰xxxⅹ性高电影| 日韩一区中文字幕| 懂色av一区二区三区蜜臀| 欧美xxxx老人做受| 亚洲成国产人片在线观看| 在线一区二区视频| 综合欧美一区二区三区| 成人自拍视频在线观看| 国产亚洲一二三区| 久久99国产精品久久99果冻传媒| 欧美剧情片在线观看| 亚洲摸摸操操av| 99久久99久久久精品齐齐| 中文在线一区二区| 国产成人免费视频精品含羞草妖精 | 久久久蜜桃精品| 精品综合久久久久久8888| 6080午夜不卡| 日韩一区精品字幕| 91精品国产91热久久久做人人 | 国产欧美久久久精品影院| 国产suv一区二区三区88区| 国产欧美一区二区在线观看| 黑人精品欧美一区二区蜜桃| 日韩欧美自拍偷拍| 蜜桃精品视频在线观看| 欧美大胆一级视频| 蜜臀av性久久久久av蜜臀妖精| 91精品国产91久久综合桃花| 日av在线不卡| 精品国产伦一区二区三区观看体验| 开心九九激情九九欧美日韩精美视频电影| 欧美午夜精品久久久久久孕妇 | 欧美a一区二区| 欧美r级在线观看| 国产高清不卡一区| 中文字幕高清一区| 色婷婷综合五月| 午夜精品久久久久久久蜜桃app| 欧美日韩精品综合在线| 美日韩一级片在线观看| 国产亚洲精久久久久久| 99久久精品国产精品久久| 亚洲国产欧美一区二区三区丁香婷| 欧美男生操女生| 国产一区二区调教| 国产精品久久久久久一区二区三区 | 亚洲一级二级三级| 日韩视频免费观看高清完整版在线观看| 免费高清视频精品| 欧美激情一区在线| 欧美视频三区在线播放|