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

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

?? keyboard.s

?? LINUX 0.11版內核代碼。 并有代碼分析說明。
?? S
?? 第 1 頁 / 共 2 頁
字號:
/** linux/kernel/keyboard.S** (C) 1991 Linus Torvalds*//** Thanks to Alfred Leung for US keyboard patches* Wolfgang Thiel for German keyboard patches* Marc Corsini for the French keyboard*//** 感謝Alfred Leung 添加了US 鍵盤補丁程序;* Wolfgang Thiel 添加了德語鍵盤補丁程序;* Marc Corsini 添加了法文鍵盤補丁程序。*/#include <linux/config.h> // 內核配置頭文件。定義鍵盤語言和硬盤類型(HD_TYPE)可選項。.text.globl _keyboard_interrupt/** these are for the keyboard read functions*//** 以下這些是用于鍵盤讀操作。*/// size 是鍵盤緩沖區的長度(字節數)。size = 1024 /* must be a power of two ! And MUST be the sameas in tty_io.c !!!! *//* 數值必須是2 的次方!并且與tty_io.c 中的值匹配!!!! */// 以下這些是緩沖隊列結構中的偏移量 */head = 4 // 緩沖區中頭指針字段偏移。tail = 8 // 緩沖區中尾指針字段偏移。proc_list = 12 // 等待該緩沖隊列的進程字段偏移。buf = 16 // 緩沖區字段偏移。// mode 是鍵盤特殊鍵的按下狀態標志。// 表示大小寫轉換鍵(caps)、交換鍵(alt)、控制鍵(ctrl)和換檔鍵(shift)的狀態。// 位7 caps 鍵按下;// 位6 caps 鍵的狀態(應該與leds 中的對應標志位一樣);// 位5 右alt 鍵按下;// 位4 左alt 鍵按下;// 位3 右ctrl 鍵按下;// 位2 左ctrl 鍵按下;// 位1 右shift 鍵按下;// 位0 左shift 鍵按下。mode: .byte 0 /* caps, alt, ctrl and shift mode */// 數字鎖定鍵(num-lock)、大小寫轉換鍵(caps-lock)和滾動鎖定鍵(scroll-lock)的LED 發光管狀態。// 位7-3 全0 不用;// 位2 caps-lock;// 位1 num-lock(初始置1,也即設置數字鎖定鍵(num-lock)發光管為亮);// 位0 scroll-lock。leds: .byte 2 /* num-lock, caps, scroll-lock mode (nom-lock on) */// 當掃描碼是0xe0 或0xe1 時,置該標志。表示其后還跟隨著1 個或2 個字符掃描碼,參見列表后說明。// 位1 =1 收到0xe1 標志;// 位0 =1 收到0xe0 標志。e0: .byte 0/** con_int is the real interrupt routine that reads the* keyboard scan-code and converts it into the appropriate* ascii character(s).*//** con_int 是實際的中斷處理子程序,用于讀鍵盤掃描碼并將其轉換* 成相應的ascii 字符。*///// 鍵盤中斷處理程序入口點。_keyboard_interrupt:pushl %eaxpushl %ebxpushl %ecxpushl %edxpush %dspush %esmovl $0x10,%eax // 將ds、es 段寄存器置為內核數據段。mov %ax,%dsmov %ax,%esxorl %al,%al /* %eax is scan code */ /* eax 中是掃描碼 */inb $0x60,%al // 讀取掃描碼??al。cmpb $0xe0,%al // 該掃描碼是0xe0 嗎?如果是則跳轉到設置e0 標志代碼處。je set_e0cmpb $0xe1,%al // 掃描碼是0xe1 嗎?如果是則跳轉到設置e1 標志代碼處。je set_e1call key_table(,%eax,4) // 調用鍵處理程序ker_table + eax * 4(參見下面502 行)。movb $0,e0 // 復位e0 標志。// 下面這段代碼(55-65 行)是針對使用8255A 的PC 標準鍵盤電路進行硬件復位處理。端口0x61 是// 8255A 輸出口B 的地址,該輸出端口的第7 位(PB7)用于禁止和允許對鍵盤數據的處理。// 這段程序用于對收到的掃描碼做出應答。方法是首先禁止鍵盤,然后立刻重新允許鍵盤工作。e0_e1: inb $0x61,%al // 取PPI 端口B 狀態,其位7 用于允許/禁止(0/1)鍵盤。jmp 1f // 延遲一會。1: jmp 1f1: orb $0x80,%al // al 位7 置位(禁止鍵盤工作)。jmp 1f // 再延遲一會。1: jmp 1f1: outb %al,$0x61 // 使PPI PB7 位置位。jmp 1f // 延遲一會。1: jmp 1f1: andb $0x7F,%al // al 位7 復位。outb %al,$0x61 // 使PPI PB7 位復位(允許鍵盤工作)。movb $0x20,%al // 向8259 中斷芯片發送EOI(中斷結束)信號。outb %al,$0x20pushl $0 // 控制臺tty 號=0,作為參數入棧。call _do_tty_interrupt // 將收到的數據復制成規范模式數據并存放在規范字符緩沖隊列中。addl $4,%esp // 丟棄入棧的參數,彈出保留的寄存器,并中斷返回。pop %espop %dspopl %edxpopl %ecxpopl %ebxpopl %eaxiretset_e0: movb $1,e0 // 收到掃描前導碼0xe0 時,設置e0 標志(位0)。jmp e0_e1set_e1: movb $2,e0 // 收到掃描前導碼0xe1 時,設置e1 標志(位1)。jmp e0_e1/** This routine fills the buffer with max 8 bytes, taken from* %ebx:%eax. (%edx is high). The bytes are written in the* order %al,%ah,%eal,%eah,%bl,%bh ... until %eax is zero.*//** 下面該子程序把ebx:eax 中的最多8 個字符添入緩沖隊列中。(edx 是* 所寫入字符的順序是al,ah,eal,eah,bl,bh...直到eax 等于0。*/put_queue:pushl %ecx // 保存ecx,edx 內容。pushl %edx // 取控制臺tty 結構中讀緩沖隊列指針。movl _table_list,%edx # read-queue for consolemovl head(%edx),%ecx // 取緩沖隊列中頭指針??ecx。1: movb %al,buf(%edx,%ecx) // 將al 中的字符放入緩沖隊列頭指針位置處。incl %ecx // 頭指針前移1 字節。andl $size-1,%ecx // 以緩沖區大小調整頭指針(若超出則返回緩沖區開始)。cmpl tail(%edx),%ecx # buffer full - discard everything// 頭指針==尾指針嗎(緩沖隊列滿)?je 3f // 如果已滿,則后面未放入的字符全拋棄。shrdl $8,%ebx,%eax // 將ebx 中8 位比特位右移8 位到eax 中,但ebx 不變。je 2f // 還有字符嗎?若沒有(等于0)則跳轉。shrl $8,%ebx // 將ebx 中比特位右移8 位,并跳轉到標號1 繼續操作。jmp 1b2: movl %ecx,head(%edx) // 若已將所有字符都放入了隊列,則保存頭指針。movl proc_list(%edx),%ecx // 該隊列的等待進程指針?testl %ecx,%ecx // 檢測任務結構指針是否為空(有等待該隊列的進程嗎?)。je 3f // 無,則跳轉;movl $0,(%ecx) // 有,則置該進程為可運行就緒狀態(喚醒該進程)。3: popl %edx // 彈出保留的寄存器并返回。popl %ecxret// 下面這段代碼根據ctrl 或alt 的掃描碼,分別設置模式標志中相應位。如果該掃描碼之前收到過// 0xe0 掃描碼(e0 標志置位),則說明按下的是鍵盤右邊的ctrl 或alt 鍵,則對應設置ctrl 或alt// 在模式標志mode 中的比特位。ctrl: movb $0x04,%al // 0x4 是模式標志mode 中左ctrl 鍵對應的比特位(位2)。jmp 1falt: movb $0x10,%al // 0x10 是模式標志mode 中左alt 鍵對應的比特位(位4)。1: cmpb $0,e0 // e0 標志置位了嗎(按下的是右邊的ctrl 或alt 鍵嗎)?je 2f // 不是則轉。addb %al,%al // 是,則改成置相應右鍵的標志位(位3 或位5)。2: orb %al,mode // 設置模式標志mode 中對應的比特位。ret// 這段代碼處理ctrl 或alt 鍵松開的掃描碼,對應復位模式標志mode 中的比特位。在處理時要根據// e0 標志是否置位來判斷是否是鍵盤右邊的ctrl 或alt 鍵。unctrl: movb $0x04,%al // 模式標志mode 中左ctrl 鍵對應的比特位(位2)。jmp 1funalt: movb $0x10,%al // 0x10 是模式標志mode 中左alt 鍵對應的比特位(位4)。1: cmpb $0,e0 // e0 標志置位了嗎(釋放的是右邊的ctrl 或alt 鍵嗎)?je 2f // 不是,則轉。addb %al,%al // 是,則該成復位相應右鍵的標志位(位3 或位5)。2: notb %al // 復位模式標志mode 中對應的比特位。andb %al,moderetlshift:orb $0x01,mode // 是左shift 鍵按下,設置mode 中對應的標志位(位0)。retunlshift:andb $0xfe,mode // 是左shift 鍵松開,復位mode 中對應的標志位(位0)。retrshift:orb $0x02,mode // 是右shift 鍵按下,設置mode 中對應的標志位(位1)。retunrshift:andb $0xfd,mode // 是右shift 鍵松開,復位mode 中對應的標志位(位1)。retcaps: testb $0x80,mode // 測試模式標志mode 中位7 是否已經置位(按下狀態)。jne 1f // 如果已處于按下狀態,則返回(ret)。xorb $4,leds // 翻轉leds 標志中caps-lock 比特位(位2)。xorb $0x40,mode // 翻轉mode 標志中caps 鍵按下的比特位(位6)。orb $0x80,mode // 設置mode 標志中caps 鍵已按下標志位(位7)。// 這段代碼根據leds 標志,開啟或關閉LED 指示器。set_leds:call kb_wait // 等待鍵盤控制器輸入緩沖空。movb $0xed,%al /* set leds command */ /* 設置LED 的命令 */outb %al,$0x60 // 發送鍵盤命令0xed 到0x60 端口。call kb_wait // 等待鍵盤控制器輸入緩沖空。movb leds,%al // 取leds 標志,作為參數。outb %al,$0x60 // 發送該參數。retuncaps: andb $0x7f,mode // caps 鍵松開,則復位模式標志mode 中的對應位(位7)。retscroll:xorb $1,leds // scroll 鍵按下,則翻轉leds 標志中的對應位(位0)。jmp set_leds // 根據leds 標志重新開啟或關閉LED 指示器。num: xorb $2,leds // num 鍵按下,則翻轉leds 標志中的對應位(位1)。jmp set_leds // 根據leds 標志重新開啟或關閉LED 指示器。/** curosr-key/numeric keypad cursor keys are handled here.* checking for numeric keypad etc.*//** 這里處理方向鍵/數字小鍵盤方向鍵,檢測數字小鍵盤等。*/cursor:subb $0x47,%al // 掃描碼是小數字鍵盤上的鍵(其掃描碼>=0x47)發出的?jb 1f // 如果小于則不處理,返回。cmpb $12,%al // 如果掃描碼 > 0x53(0x53 - 0x47= 12),則ja 1f // 掃描碼值超過83(0x53),不處理,返回。jne cur2 /* check for ctrl-alt-del */ /* 檢查是否ctrl-alt-del */// 如果等于12,則說明del 鍵已被按下,則繼續判斷ctrl// 和alt 是否也同時按下。testb $0x0c,mode // 有ctrl 鍵按下嗎?je cur2 // 無,則跳轉。testb $0x30,mode // 有alt 鍵按下嗎?jne reboot // 有,則跳轉到重啟動處理。cur2: cmpb $0x01,e0 /* e0 forces cursor movement */ /* e0 置位表示光標移動 */// e0 標志置位了嗎?je cur // 置位了,則跳轉光標移動處理處cur。testb $0x02,leds /* not num-lock forces cursor */ /* num-lock 鍵則不許 */// 測試leds 中標志num-lock 鍵標志是否置位。je cur // 如果沒有置位(num 的LED 不亮),則也進行光標移動處理。testb $0x03,mode /* shift forces cursor */ /* shift 鍵也使光標移動 */// 測試模式標志mode 中shift 按下標志。jne cur // 如果有shift 鍵按下,則也進行光標移動處理。xorl %ebx,%ebx // 否則查詢掃數字表(199 行),取對應鍵的數字ASCII 碼。movb num_table(%eax),%al // 以eax 作為索引值,取對應數字字符??al。jmp put_queue // 將該字符放入緩沖隊列中。1: ret// 這段代碼處理光標的移動。cur: movb cur_table(%eax),%al // 取光標字符表中相應鍵的代表字符??al。cmpb $'9,%al // 若該字符<='9',說明是上一頁、下一頁、插入或刪除鍵,ja ok_cur // 則功能字符序列中要添入字符'~'。movb $'~,%ahok_cur: shll $16,%eax // 將ax 中內容移到eax 高字中。movw $0x5b1b,%ax // 在ax 中放入'esc ['字符,與eax 高字中字符組成移動序列。xorl %ebx,%ebxjmp put_queue // 將該字符放入緩沖隊列中。#if defined(KBD_FR)num_table:.ascii "789 456 1230." // 數字小鍵盤上鍵對應的數字ASCII 碼表。#elsenum_table:.ascii "789 456 1230,"#endifcur_table:.ascii "HA5 DGC YB623" // 數字小鍵盤上方向鍵或插入刪除鍵對應的移動表示字符表。/** this routine handles function keys*/// 下面子程序處理功能鍵。func:pushl %eaxpushl %ecxpushl %edxcall _show_stat // 調用顯示各任務狀態函數(kernl/sched.c, 37)。popl %edxpopl %ecxpopl %eaxsubb $0x3B,%al // 功能鍵'F1'的掃描碼是0x3B,因此此時al 中是功能鍵索引號。jb end_func // 如果掃描碼小于0x3b,則不處理,返回。cmpb $9,%al // 功能鍵是F1-F10?jbe ok_func // 是,則跳轉。subb $18,%al // 是功能鍵F11,F12 嗎?cmpb $10,%al // 是功能鍵F11?jb end_func // 不是,則不處理,返回。cmpb $11,%al // 是功能鍵F12?ja end_func // 不是,則不處理,返回。ok_func:cmpl $4,%ecx /* check that there is enough room */ * 檢查是否有足夠空間*/jl end_func // 需要放入4 個字符序列,如果放不下,則返回。movl func_table(,%eax,4),%eax // 取功能鍵對應字符序列。xorl %ebx,%ebxjmp put_queue // 放入緩沖隊列中。end_func:ret/** function keys send F1:'esc [ [ A' F2:'esc [ [ B' etc.*//** 功能鍵發送的掃描碼,F1 鍵為:'esc [ [ A', F2 鍵為:'esc [ [ B'等。*/func_table:.long 0x415b5b1b,0x425b5b1b,0x435b5b1b,0x445b5b1b.long 0x455b5b1b,0x465b5b1b,0x475b5b1b,0x485b5b1b.long 0x495b5b1b,0x4a5b5b1b,0x4b5b5b1b,0x4c5b5b1b// 掃描碼-ASCII 字符映射表。// 根據在config.h 中定義的鍵盤類型(FINNISH,US,GERMEN,FRANCH),將相應鍵的掃描碼映射// 到ASCII 字符。#if defined(KBD_FINNISH)// 以下是芬蘭語鍵盤的掃描碼映射表。key_map:.byte 0,27 // 掃描碼0x00,0x01 對應的ASCII 碼;.ascii "1234567890+'" // 掃描碼0x02,...0x0c,0x0d 對應的ASCII 碼,以下類似。.byte 127,9.ascii "qwertyuiop}".byte 0,13,0.ascii "asdfghjkl|{".byte 0,0.ascii "'zxcvbnm,.-".byte 0,'*,0,32 /* 36-39 */ /* 掃描碼0x36-0x39 對應的ASCII 碼 */.fill 16,1,0 /* 3A-49 */ /* 掃描碼0x3A-0x49 對應的ASCII 碼 */.byte '-,0,0,0,'+ /* 4A-4E */ /* 掃描碼0x4A-0x4E 對應的ASCII 碼 */.byte 0,0,0,0,0,0,0 /* 4F-55 */ /* 掃描碼0x4F-0x55 對應的ASCII 碼 */.byte '<.fill 10,1,0// shift 鍵同時按下時的映射表。shift_map:.byte 0,27.ascii "!\"#$%&/()=?`".byte 127,9.ascii "QWERTYUIOP]^".byte 13,0.ascii "ASDFGHJKL\\[".byte 0,0.ascii "*ZXCVBNM;:_".byte 0,'*,0,32 /* 36-39 */.fill 16,1,0 /* 3A-49 */.byte '-,0,0,0,'+ /* 4A-4E */.byte 0,0,0,0,0,0,0 /* 4F-55 */.byte '>.fill 10,1,0// alt 鍵同時按下時的映射表。

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美不卡在线观看视频| 日韩午夜激情免费电影| 国模一区二区三区白浆| 亚洲成av人片在线| 三级久久三级久久| 亚洲午夜精品久久久久久久久| 国产精品妹子av| 亚洲视频在线一区观看| 亚洲视频图片小说| 亚洲自拍欧美精品| 日本在线不卡一区| 国内精品嫩模私拍在线| 国产高清精品在线| www.99精品| 欧美日本在线视频| 欧美mv日韩mv国产| 欧美国产一区二区在线观看| 日本一区二区三区高清不卡| 亚洲三级在线看| 偷窥国产亚洲免费视频 | 成人午夜激情片| 94-欧美-setu| 欧美精品九九99久久| 日韩美一区二区三区| 中文在线免费一区三区高中清不卡| 国产精品美女一区二区| 亚洲一区二区黄色| 国产精品自产自拍| 在线观看一区二区视频| 精品日韩一区二区| 亚洲日本丝袜连裤袜办公室| 午夜不卡在线视频| 成人白浆超碰人人人人| 欧美日韩国产精选| 国产精品福利一区| 日韩黄色小视频| 成人av中文字幕| 欧美一级xxx| 一区二区三区中文免费| 狠狠狠色丁香婷婷综合激情| 日本道免费精品一区二区三区| 91精品国产一区二区人妖| 国产精品妹子av| 蜜桃av噜噜一区二区三区小说| 成人黄色软件下载| 欧美tickling挠脚心丨vk| 一区二区成人在线| 国产精品一区二区三区网站| 欧美剧情电影在线观看完整版免费励志电影 | 国产精品私人自拍| 蜜臀久久久久久久| 91在线观看地址| 日韩精品影音先锋| 亚洲自拍都市欧美小说| 成人免费黄色大片| 久久一夜天堂av一区二区三区| 一区二区三区四区不卡在线| 成人丝袜高跟foot| 久久久久国产精品麻豆ai换脸 | 粗大黑人巨茎大战欧美成人| 91精品久久久久久久99蜜桃| 亚洲一区视频在线| 色综合天天综合给合国产| 久久亚洲精精品中文字幕早川悠里| 亚洲福利电影网| 91片在线免费观看| 1024成人网| 99精品在线观看视频| 国产精品网曝门| 国产精品一区二区久激情瑜伽 | 日韩美女视频19| 成人av高清在线| 日本一区二区三区四区| 高清日韩电视剧大全免费| 久久美女艺术照精彩视频福利播放| 麻豆成人免费电影| 日韩欧美一区二区免费| 韩国成人精品a∨在线观看| 欧美一区二区不卡视频| 精品亚洲欧美一区| 久久久久9999亚洲精品| 国产精品系列在线播放| 国产欧美一区二区三区在线看蜜臀| 精品综合久久久久久8888| 精品国产3级a| 国产成人精品亚洲日本在线桃色| 国产日韩欧美不卡| 成人免费看片app下载| 日韩伦理免费电影| 欧美日韩一区二区电影| 奇米精品一区二区三区在线观看| 亚洲精品一区二区三区香蕉| 国产乱人伦精品一区二区在线观看| 欧美精品一区二区三区在线| 国产精品一区二区黑丝| 中文字幕五月欧美| 欧美日韩免费一区二区三区视频| 偷窥少妇高潮呻吟av久久免费| 欧美成人欧美edvon| 日本韩国一区二区三区| 亚洲一区二三区| 欧美成人性战久久| 风间由美一区二区三区在线观看 | 男女男精品视频网| 国产拍欧美日韩视频二区| 91看片淫黄大片一级在线观看| 亚洲图片欧美一区| 久久综合九色综合97_久久久| 99精品国产热久久91蜜凸| 日韩**一区毛片| 亚洲欧美日韩在线不卡| 日韩一区二区三区在线观看| a亚洲天堂av| 紧缚奴在线一区二区三区| 亚洲精品国产第一综合99久久| 欧美电影精品一区二区| 99久久精品免费看国产免费软件| 免费成人深夜小野草| 亚洲男同1069视频| 国产婷婷精品av在线| 日韩一区二区三区四区五区六区 | 亚洲小说欧美激情另类| 久久久精品国产99久久精品芒果| 欧美日韩在线三区| 成人国产免费视频| 精品一区二区精品| 日韩中文字幕不卡| 亚洲美女一区二区三区| 久久蜜臀精品av| 日韩免费看网站| 欧美日韩国产美| 欧美在线观看你懂的| 福利一区二区在线| 国产精品一区二区视频| 另类专区欧美蜜桃臀第一页| 五月婷婷激情综合网| 亚洲天堂2016| 亚洲欧洲精品成人久久奇米网| 精品福利二区三区| 精品国产3级a| 欧美精品一区二区三区蜜桃 | 91丨九色丨尤物| 成人黄动漫网站免费app| 国产美女精品在线| 久久成人久久鬼色| 日本免费新一区视频| 日韩综合在线视频| 亚洲国产婷婷综合在线精品| 亚洲免费在线观看视频| 亚洲狼人国产精品| 樱桃国产成人精品视频| 亚洲激情在线激情| 亚洲国产一区二区三区| 午夜视频在线观看一区二区| 丝袜诱惑制服诱惑色一区在线观看| 亚洲精品日日夜夜| 亚洲精品免费电影| 亚洲永久精品国产| 丝瓜av网站精品一区二区| 婷婷开心激情综合| 美女脱光内衣内裤视频久久影院| 免费观看一级欧美片| 国内成人免费视频| 成人午夜av在线| 在线观看日韩av先锋影音电影院| 欧美专区日韩专区| 欧美高清视频一二三区| 日韩三级视频中文字幕| 欧美精品一区二区三区一线天视频| 久久亚洲私人国产精品va媚药| 久久久精品天堂| 亚洲女同一区二区| 视频在线观看91| 国产高清精品网站| 色噜噜狠狠成人网p站| 777奇米四色成人影色区| 久久一区二区视频| 亚洲人成在线观看一区二区| 亚洲午夜久久久久中文字幕久| 日本视频在线一区| 成人h动漫精品一区二区| 在线观看91视频| 久久精品男人的天堂| 亚洲色图视频免费播放| 欧美a一区二区| 不卡一区二区在线| 7777精品伊人久久久大香线蕉超级流畅 | 欧美视频一区二区三区| 欧美刺激脚交jootjob| 中文一区一区三区高中清不卡| 亚洲国产精品欧美一二99| 久久电影国产免费久久电影 | 美脚の诱脚舐め脚责91 | 91激情五月电影| 日韩视频在线永久播放| 亚洲色图欧洲色图婷婷| 久久精品国产亚洲aⅴ| 91久久一区二区| 久久久久久久电影| 免费成人小视频|