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

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

?? keyboard.s

?? linux的內(nèi)核源碼
?? S
字號(hào):
/*
 *	keyboard.s
 */

.text
.globl _keyboard_interrupt

/*
 * these are for the keyboard read functions
 */
size	= 1024		/* must be a power of two ! And MUST be the same
			   as in tty_io.c !!!! */
head = 4
tail = 8
proc_list = 12
buf = 16

mode:	.byte 0		/* caps, alt, ctrl and shift mode */
leds:	.byte 2		/* num-lock, caps, scroll-lock mode (nom-lock on) */
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).
 */
_keyboard_interrupt:
	pushl %eax
	pushl %ebx
	pushl %ecx
	pushl %edx
	push %ds
	push %es
	movl $0x10,%eax
//下面兩行是ds、es都取0x10,指向用戶代碼段
	mov %ax,%ds
	mov %ax,%es
	xorl %al,%al		/* %eax is scan code */
	inb $0x60,%al			//從主板鍵盤(pán)控制器讀取一個(gè)字節(jié)(掃描碼)
	cmpb $0xe0,%al		//0xe0表示必須讀取第二個(gè)字節(jié)才能確定該鍵
	je set_e0
	cmpb $0xe1,%al
	je set_e1
	call key_table(,%eax,4)	//調(diào)用[eax*4+key_table]
	movb $0,e0
e0_e1:	inb $0x61,%al			//獲取多項(xiàng)功能和揚(yáng)聲器控制數(shù)據(jù)
	jmp 1f
1:	jmp 1f
//下面4行將第7位置1,是禁止端口60H開(kāi)關(guān),開(kāi)放鍵盤(pán)數(shù)據(jù),允許鍵盤(pán)IRQ
1:	orb $0x80,%al
	jmp 1f
1:	jmp 1f
1:	outb %al,$0x61
	jmp 1f
1:	jmp 1f
//下面2行開(kāi)放端口60H,禁止鍵盤(pán)數(shù)據(jù),清除鍵盤(pán)IRQ
1:	andb $0x7F,%al
	outb %al,$0x61
//下面2行是結(jié)束中斷
	movb $0x20,%al
	outb %al,$0x20
	pushl $0
	call _do_tty_interrupt
	addl $4,%esp
	pop %es
	pop %ds
	popl %edx
	popl %ecx
	popl %ebx
	popl %eax
	iret
set_e0:	movb $1,e0
	jmp e0_e1
set_e1:	movb $2,e0
	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.
 */
put_queue:
	pushl %ecx
	pushl %edx
	movl _table_list,%edx		# read-queue for console
	movl head(%edx),%ecx
1:	movb %al,buf(%edx,%ecx)
	incl %ecx
	andl $size-1,%ecx
	cmpl tail(%edx),%ecx		# buffer full - discard everything
	je 3f
	shrdl $8,%ebx,%eax
	je 2f
	shrl $8,%ebx
	jmp 1b
2:	movl %ecx,head(%edx)
	movl proc_list(%edx),%ecx
	testl %ecx,%ecx
	je 3f
	movl $0,(%ecx)
3:	popl %edx
	popl %ecx
	ret
//下面是檢查是否按下了ctrl或alt鍵
ctrl:	movb $0x04,%al
	jmp 1f
alt:	movb $0x10,%al
1:	cmpb $0,e0
	je 2f
	addb %al,%al
2:	orb %al,mode
	ret
unctrl:	movb $0x04,%al
	jmp 1f
unalt:	movb $0x10,%al
1:	cmpb $0,e0
	je 2f
	addb %al,%al
2:	notb %al
	andb %al,mode
	ret

lshift:
	orb $0x01,mode
	ret
unlshift:
	andb $0xfe,mode
	ret
rshift:
	orb $0x02,mode
	ret
unrshift:
	andb $0xfd,mode
	ret

caps:	testb $0x80,mode
	jne 1f
	xorb $4,leds
	xorb $0x40,mode
	orb $0x80,mode
set_leds:
	call kb_wait
	movb $0xed,%al		/* set leds command */	//端口60的ed命令是LED寫(xiě)
	outb %al,$0x60
	call kb_wait
	movb leds,%al							//將哪個(gè)LED打開(kāi)
	outb %al,$0x60
	ret
uncaps:	andb $0x7f,mode
	ret
scroll:
	xorb $1,leds							//將scroll lock的燈打開(kāi)
	jmp set_leds						
num:	xorb $2,leds							//將numlock的燈打開(kāi)
	jmp set_leds

/*
 *  curosr-key/numeric keypad cursor keys are handled here.
 *  checking for numeric keypad etc.
 */
cursor:
	subb $0x47,%al
	jb 1f
	cmpb $12,%al
	ja 1f
	jne cur2		/* check for ctrl-alt-del */
	testb $0x0c,mode
	je cur2
	testb $0x30,mode
	jne reboot
cur2:	cmpb $0x01,e0		/* e0 forces cursor movement */
	je cur
	testb $0x02,leds	/* not num-lock forces cursor */
	je cur
	testb $0x03,mode	/* shift forces cursor */
	jne cur
	xorl %ebx,%ebx
	movb num_table(%eax),%al
	jmp put_queue
1:	ret

cur:	movb cur_table(%eax),%al
	cmpb $'9,%al
	ja ok_cur
	movb $'~,%ah
ok_cur:	shll $16,%eax					//將低16位的數(shù)移入高16位,低16位填0x5b1b(ESC[)
	movw $0x5b1b,%ax
	xorl %ebx,%ebx
	jmp put_queue

num_table:
	.ascii "789 456 1230,"
cur_table:
	.ascii "HA5 DGC YB623"

/*
 * this routine handles function keys
 */
func:
	subb $0x3B,%al
	jb end_func
	cmpb $9,%al
	jbe ok_func
	subb $18,%al
	cmpb $10,%al
	jb end_func
	cmpb $11,%al
	ja end_func
ok_func:
	cmpl $4,%ecx		/* check that there is enough room */
	jl end_func
	movl func_table(,%eax,4),%eax
	xorl %ebx,%ebx
	jmp put_queue
end_func:
	ret

/*
 * function keys send F1:'esc [ [ A' F2:'esc [ [ B' etc.
 */
func_table:							//0x415b5b1b=A[[ESC
	.long 0x415b5b1b,0x425b5b1b,0x435b5b1b,0x445b5b1b
	.long 0x455b5b1b,0x465b5b1b,0x475b5b1b,0x485b5b1b
	.long 0x495b5b1b,0x4a5b5b1b,0x4b5b5b1b,0x4c5b5b1b

key_map:
	.byte 0,27
	.ascii "1234567890+'"
	.byte 127,9
	.ascii "qwertyuiop}"
	.byte 0,10,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

shift_map:
	.byte 0,27
	.ascii "!\"#$%&/()=?`"
	.byte 127,9
	.ascii "QWERTYUIOP]^"
	.byte 10,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_map:
	.byte 0,0
	.ascii "\0@\0$\0\0{[]}\\\0"
	.byte 0,0
	.byte 0,0,0,0,0,0,0,0,0,0,0
	.byte '~,10,0
	.byte 0,0,0,0,0,0,0,0,0,0,0
	.byte 0,0
	.byte 0,0,0,0,0,0,0,0,0,0,0
	.byte 0,0,0,0		/* 36-39 */
	.fill 16,1,0		/* 3A-49 */
	.byte 0,0,0,0,0		/* 4A-4E */
	.byte 0,0,0,0,0,0,0	/* 4F-55 */
	.byte '|
	.fill 10,1,0

/*
 * do_self handles "normal" keys, ie keys that don't change meaning
 * and which have just one character returns.
 */
do_self:
	lea alt_map,%ebx
	testb $0x20,mode		/* alt-gr */
	jne 1f
	lea shift_map,%ebx
	testb $0x03,mode
	jne 1f
	lea key_map,%ebx
1:	movb (%ebx,%eax),%al
	orb %al,%al
	je none
	testb $0x4c,mode		/* ctrl or caps */
	je 2f
	cmpb $'a,%al
	jb 2f
	cmpb $'z,%al
	ja 2f
	subb $32,%al
2:	testb $0x0c,mode		/* ctrl */
	je 3f
	cmpb $64,%al
	jb 3f
	cmpb $64+32,%al
	jae 3f
	subb $64,%al
3:	testb $0x10,mode		/* left alt */
	je 4f
	orb $0x80,%al
4:	andl $0xff,%eax
	xorl %ebx,%ebx
	call put_queue
none:	ret

/*
 * minus has a routine of it's own, as a 'E0h' before
 * the scan code for minus means that the numeric keypad
 * slash was pushed.
 */
minus:	cmpb $1,e0
	jne do_self
	movl $'/,%eax
	xorl %ebx,%ebx
	jmp put_queue

/*
 * This table decides which routine to call when a scan-code has been
 * gotten. Most routines just call do_self, or none, depending if
 * they are make or break.
 */
key_table:
	.long none,do_self,do_self,do_self	/* 00-03 s0 esc 1 2 */
	.long do_self,do_self,do_self,do_self	/* 04-07 3 4 5 6 */
	.long do_self,do_self,do_self,do_self	/* 08-0B 7 8 9 0 */
	.long do_self,do_self,do_self,do_self	/* 0C-0F + ' bs tab */
	.long do_self,do_self,do_self,do_self	/* 10-13 q w e r */
	.long do_self,do_self,do_self,do_self	/* 14-17 t y u i */
	.long do_self,do_self,do_self,do_self	/* 18-1B o p } ^ */
	.long do_self,ctrl,do_self,do_self	/* 1C-1F enter ctrl a s */
	.long do_self,do_self,do_self,do_self	/* 20-23 d f g h */
	.long do_self,do_self,do_self,do_self	/* 24-27 j k l | */
	.long do_self,do_self,lshift,do_self	/* 28-2B { para lshift , */
	.long do_self,do_self,do_self,do_self	/* 2C-2F z x c v */
	.long do_self,do_self,do_self,do_self	/* 30-33 b n m , */
	.long do_self,minus,rshift,do_self	/* 34-37 . - rshift * */
	.long alt,do_self,caps,func		/* 38-3B alt sp caps f1 */
	.long func,func,func,func		/* 3C-3F f2 f3 f4 f5 */
	.long func,func,func,func		/* 40-43 f6 f7 f8 f9 */
	.long func,num,scroll,cursor		/* 44-47 f10 num scr home */
	.long cursor,cursor,do_self,cursor	/* 48-4B up pgup - left */
	.long cursor,cursor,do_self,cursor	/* 4C-4F n5 right + end */
	.long cursor,cursor,cursor,cursor	/* 50-53 dn pgdn ins del */
	.long none,none,do_self,func		/* 54-57 sysreq ? < f11 */
	.long func,none,none,none		/* 58-5B f12 ? ? ? */
	.long none,none,none,none		/* 5C-5F ? ? ? ? */
	.long none,none,none,none		/* 60-63 ? ? ? ? */
	.long none,none,none,none		/* 64-67 ? ? ? ? */
	.long none,none,none,none		/* 68-6B ? ? ? ? */
	.long none,none,none,none		/* 6C-6F ? ? ? ? */
	.long none,none,none,none		/* 70-73 ? ? ? ? */
	.long none,none,none,none		/* 74-77 ? ? ? ? */
	.long none,none,none,none		/* 78-7B ? ? ? ? */
	.long none,none,none,none		/* 7C-7F ? ? ? ? */
	.long none,none,none,none		/* 80-83 ? br br br */
	.long none,none,none,none		/* 84-87 br br br br */
	.long none,none,none,none		/* 88-8B br br br br */
	.long none,none,none,none		/* 8C-8F br br br br */
	.long none,none,none,none		/* 90-93 br br br br */
	.long none,none,none,none		/* 94-97 br br br br */
	.long none,none,none,none		/* 98-9B br br br br */
	.long none,unctrl,none,none		/* 9C-9F br unctrl br br */
	.long none,none,none,none		/* A0-A3 br br br br */
	.long none,none,none,none		/* A4-A7 br br br br */
	.long none,none,unlshift,none		/* A8-AB br br unlshift br */
	.long none,none,none,none		/* AC-AF br br br br */
	.long none,none,none,none		/* B0-B3 br br br br */
	.long none,none,unrshift,none		/* B4-B7 br br unrshift br */
	.long unalt,none,uncaps,none		/* B8-BB unalt br uncaps br */
	.long none,none,none,none		/* BC-BF br br br br */
	.long none,none,none,none		/* C0-C3 br br br br */
	.long none,none,none,none		/* C4-C7 br br br br */
	.long none,none,none,none		/* C8-CB br br br br */
	.long none,none,none,none		/* CC-CF br br br br */
	.long none,none,none,none		/* D0-D3 br br br br */
	.long none,none,none,none		/* D4-D7 br br br br */
	.long none,none,none,none		/* D8-DB br ? ? ? */
	.long none,none,none,none		/* DC-DF ? ? ? ? */
	.long none,none,none,none		/* E0-E3 e0 e1 ? ? */
	.long none,none,none,none		/* E4-E7 ? ? ? ? */
	.long none,none,none,none		/* E8-EB ? ? ? ? */
	.long none,none,none,none		/* EC-EF ? ? ? ? */
	.long none,none,none,none		/* F0-F3 ? ? ? ? */
	.long none,none,none,none		/* F4-F7 ? ? ? ? */
	.long none,none,none,none		/* F8-FB ? ? ? ? */
	.long none,none,none,none		/* FC-FF ? ? ? ? */

/*
 * kb_wait waits for the keyboard controller buffer to empty.
 * there is no timeout - if the buffer doesn't empty, we hang.
 */
kb_wait:
	pushl %eax
1:	inb $0x64,%al
	testb $0x02,%al				//主板控制器的輸入緩沖區(qū)是否滿,如果滿,循環(huán)
	jne 1b
	popl %eax
	ret
/*
 * This routine reboots the machine by asking the keyboard
 * controller to pulse the reset-line low.
 */
reboot:
	call kb_wait
	movw $0x1234,0x472	/* don't do memory check */
	movb $0xfc,%al		/* pulse reset and A20 low */	//脈沖輸出
	outb %al,$0x64
die:	jmp die

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91亚洲大成网污www| 不卡一区二区中文字幕| 亚洲一区欧美一区| 亚洲综合色丁香婷婷六月图片| 国产亚洲精品bt天堂精选| 久久久蜜臀国产一区二区| 欧美精品一区二区三区高清aⅴ | 久久成人av少妇免费| 午夜精品福利视频网站| 国产乱色国产精品免费视频| 国产综合色在线| 成人三级在线视频| 在线亚洲高清视频| 日韩女优毛片在线| 国产精品久久久久aaaa| 亚洲欧美综合网| 日韩成人精品在线观看| 国产资源精品在线观看| 欧美亚洲综合在线| 日韩欧美精品在线视频| 成人免费小视频| 狂野欧美性猛交blacked| 成人国产精品免费观看视频| 欧美日韩视频专区在线播放| 日韩精品一区二区三区蜜臀| 中文字幕在线观看不卡视频| 中文字幕中文乱码欧美一区二区| 日韩欧美亚洲另类制服综合在线| 国产欧美综合在线观看第十页| 最新久久zyz资源站| 成人激情校园春色| 欧美日韩国产成人在线免费| 日韩视频一区在线观看| 亚洲国产日韩综合久久精品| 国产不卡高清在线观看视频| 在线欧美日韩精品| 国产精品女上位| 国产成人一区在线| 精品免费99久久| 日韩成人一级大片| 91精品国产高清一区二区三区| 亚洲精品视频在线观看网站| 岛国av在线一区| 亚洲国产精品成人综合色在线婷婷| 日日嗨av一区二区三区四区| 欧美日韩中字一区| 亚洲三级在线免费| av午夜精品一区二区三区| 国产亚洲制服色| 国产麻豆午夜三级精品| 久久亚洲一级片| 成人影视亚洲图片在线| 中文字幕成人在线观看| 成人免费va视频| 中文字幕亚洲一区二区va在线| 国产成+人+日韩+欧美+亚洲| 欧美激情中文字幕| 成人免费观看av| 一区二区三区不卡在线观看 | 欧美大片一区二区三区| 免费在线看成人av| 久久久亚洲欧洲日产国码αv| 国产福利一区在线| 亚洲乱码精品一二三四区日韩在线| 成人免费视频免费观看| 亚洲精选一二三| 不卡一区二区中文字幕| 欧美国产日韩在线观看| 色婷婷av一区二区| 美女www一区二区| 国产精品午夜在线| 欧美天堂一区二区三区| 美女性感视频久久| 国产精品视频一二三| 欧美日韩一区二区三区高清| 久久99精品久久久久久国产越南| 日韩欧美专区在线| 美女视频第一区二区三区免费观看网站| 99在线热播精品免费| 中文av一区二区| 成人精品小蝌蚪| 国产精品人妖ts系列视频| 成人永久免费视频| 一区二区三区精品视频在线| 色综合一个色综合| 国内精品第一页| 欧美zozo另类异族| 91色在线porny| 日韩毛片精品高清免费| 欧美无砖砖区免费| 久久66热re国产| 国产精品少妇自拍| 4438亚洲最大| www.亚洲精品| 经典三级在线一区| 亚洲一卡二卡三卡四卡无卡久久 | 蜜桃视频一区二区三区| 91精品国产高清一区二区三区蜜臀 | 粉嫩绯色av一区二区在线观看| 亚洲激情在线播放| 欧美亚洲图片小说| 国产91精品精华液一区二区三区| 欧美一区二区三区影视| 一个色妞综合视频在线观看| 欧美日韩精品是欧美日韩精品| 久久精品国产一区二区三| 欧美韩日一区二区三区四区| 欧美人与禽zozo性伦| 成人性生交大片免费看中文 | 久久久综合精品| 97国产一区二区| 国产精品99久久久久久似苏梦涵 | 一区二区三区四区av| 欧美专区亚洲专区| 成人在线视频首页| 亚洲精品乱码久久久久久| www日韩大片| 国产99精品视频| 国产在线播精品第三| 精品一区二区三区香蕉蜜桃 | 成人免费电影视频| 国产精品亚洲专一区二区三区| 免费成人在线观看视频| 亚洲成a人片在线不卡一二三区 | 欧美成人精品福利| 日韩视频国产视频| 精品三级在线观看| 精品1区2区在线观看| 精品国产乱码久久久久久老虎 | 色综合色综合色综合色综合色综合 | 26uuu精品一区二区三区四区在线| 奇米一区二区三区av| 中文字幕一区在线观看| 国产精品久久久99| 欧美精品色综合| www.在线成人| 一本大道av伊人久久综合| 在线视频欧美精品| 在线欧美小视频| 成人av电影在线观看| 99久精品国产| 欧美日韩综合色| 精品粉嫩超白一线天av| 欧美群妇大交群中文字幕| 久久影院午夜论| 国产色产综合色产在线视频| 亚洲免费色视频| 久久久亚洲高清| 亚洲午夜精品17c| 奇米色777欧美一区二区| 国产毛片精品视频| av电影天堂一区二区在线| 欧美日韩一区二区三区在线 | 成人一区二区在线观看| 91色在线porny| 日韩欧美中文字幕公布| 国产精品久久久久久福利一牛影视| 亚洲国产日韩综合久久精品| 国产精品99久久久久| 91女人视频在线观看| 成人97人人超碰人人99| 日韩欧美一区二区在线视频| 国产精品久久久久久亚洲毛片| 日韩高清不卡一区二区三区| www.欧美日韩| 一本到不卡免费一区二区| wwwwww.欧美系列| 日韩精品视频网| 色妞www精品视频| 国产精品久久99| 国产一区二区免费在线| 欧美日韩精品免费| 欧美一级欧美三级在线观看| 一区二区三区影院| 国内精品国产成人国产三级粉色| 国产又粗又猛又爽又黄91精品| 麻豆国产精品777777在线| 欧美性受极品xxxx喷水| 久久免费的精品国产v∧| 五月婷婷久久综合| 色一区在线观看| 亚洲精品成人少妇| 99re亚洲国产精品| 亚洲视频香蕉人妖| www.性欧美| 国产亚洲综合av| 粉嫩在线一区二区三区视频| jiyouzz国产精品久久| 欧美激情一区二区三区| 韩国在线一区二区| 亚洲国产高清在线| 91首页免费视频| 国产三级一区二区| 99精品久久只有精品| 国产欧美一区二区精品久导航| 国产精品中文有码| 欧美性高清videossexo| 日韩制服丝袜av| 国产欧美日韩视频在线观看| 成人国产精品视频|