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

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

?? setup.s

?? linux-2.4.29操作系統的源碼
?? S
?? 第 1 頁 / 共 2 頁
字號:
# Get hd0 data...	xorw	%ax, %ax	movw	%ax, %ds	ldsw	(4 * 0x41), %si	movw	%cs, %ax			# aka SETUPSEG	subw	$DELTA_INITSEG, %ax		# aka INITSEG	pushw	%ax	movw	%ax, %es	movw	$0x0080, %di	movw	$0x10, %cx	pushw	%cx	cld	rep 	movsb# Get hd1 data...	xorw	%ax, %ax	movw	%ax, %ds	ldsw	(4 * 0x46), %si	popw	%cx	popw	%es	movw	$0x0090, %di	rep	movsb# Check that there IS a hd1 :-)	movw	$0x01500, %ax	movb	$0x81, %dl	int	$0x13	jc	no_disk1		cmpb	$3, %ah	je	is_disk1no_disk1:	movw	%cs, %ax			# aka SETUPSEG	subw	$DELTA_INITSEG, %ax 		# aka INITSEG	movw	%ax, %es	movw	$0x0090, %di	movw	$0x10, %cx	xorw	%ax, %ax	cld	rep	stosbis_disk1:# Check for PS/2 pointing device	movw	%cs, %ax			# aka SETUPSEG	subw	$DELTA_INITSEG, %ax		# aka INITSEG	movw	%ax, %ds	movw	$0, (0x1ff)			# default is no pointing device	int	$0x11				# int 0x11: equipment list	testb	$0x04, %al			# check if mouse installed	jz	no_psmouse	movw	$0xAA, (0x1ff)			# device presentno_psmouse:# Now we want to move to protected mode ...	cmpw	$0, %cs:realmode_swtch	jz	rmodeswtch_normal	lcall	*%cs:realmode_swtch	jmp	rmodeswtch_endrmodeswtch_normal:        pushw	%cs	call	default_switchrmodeswtch_end:# we get the code32 start address and modify the below 'jmpi'# (loader may have changed it)	movl	%cs:code32_start, %eax	movl	%eax, %cs:code32# Now we move the system to its rightful place ... but we check if we have a# big-kernel. In that case we *must* not move it ...	testb	$LOADED_HIGH, %cs:loadflags	jz	do_move0			# .. then we have a normal low						# loaded zImage						# .. or else we have a high						# loaded bzImage	jmp	end_move			# ... and we skip movingdo_move0:	movw	$0x100, %ax			# start of destination segment	movw	%cs, %bp			# aka SETUPSEG	subw	$DELTA_INITSEG, %bp		# aka INITSEG	movw	%cs:start_sys_seg, %bx		# start of source segment	clddo_move:	movw	%ax, %es			# destination segment	incb	%ah				# instead of add ax,#0x100	movw	%bx, %ds			# source segment	addw	$0x100, %bx	subw	%di, %di	subw	%si, %si	movw 	$0x800, %cx	rep	movsw	cmpw	%bp, %bx			# assume start_sys_seg > 0x200,						# so we will perhaps read one						# page more than needed, but						# never overwrite INITSEG						# because destination is a						# minimum one page below source	jb	do_moveend_move:# then we load the segment descriptors	movw	%cs, %ax			# aka SETUPSEG	movw	%ax, %ds		# Check whether we need to be downward compatible with version <=201	cmpl	$0, cmd_line_ptr	jne	end_move_self		# loader uses version >=202 features	cmpb	$0x20, type_of_loader	je	end_move_self		# bootsect loader, we know of it# Boot loader doesnt support boot protocol version 2.02.# If we have our code not at 0x90000, we need to move it there now.# We also then need to move the params behind it (commandline)# Because we would overwrite the code on the current IP, we move# it in two steps, jumping high after the first one.	movw	%cs, %ax	cmpw	$SETUPSEG, %ax	je	end_move_self	cli					# make sure we really have						# interrupts disabled !						# because after this the stack						# should not be used	subw	$DELTA_INITSEG, %ax		# aka INITSEG	movw	%ss, %dx	cmpw	%ax, %dx	jb	move_self_1	addw	$INITSEG, %dx	subw	%ax, %dx			# this will go into %ss after						# the movemove_self_1:	movw	%ax, %ds	movw	$INITSEG, %ax			# real INITSEG	movw	%ax, %es	movw	%cs:setup_move_size, %cx	std					# we have to move up, so we use						# direction down because the						# areas may overlap	movw	%cx, %di	decw	%di	movw	%di, %si	subw	$move_self_here+0x200, %cx	rep	movsb	ljmp	$SETUPSEG, $move_self_heremove_self_here:	movw	$move_self_here+0x200, %cx	rep	movsb	movw	$SETUPSEG, %ax	movw	%ax, %ds	movw	%dx, %ssend_move_self:					# now we are at the right place	lidt	idt_48				# load idt with 0,0	xorl	%eax, %eax			# Compute gdt_base	movw	%ds, %ax			# (Convert %ds:gdt to a linear ptr)	shll	$4, %eax	addl	$gdt, %eax	movl	%eax, (gdt_48+2)	lgdt	gdt_48				# load gdt with whatever is						# appropriate# that was painless, now we enable a20	call	empty_8042	movb	$0xD1, %al			# command write	outb	%al, $0x64	call	empty_8042	movb	$0xDF, %al			# A20 on	outb	%al, $0x60	call	empty_8042##	You must preserve the other bits here. Otherwise embarrasing things#	like laptops powering off on boot happen. Corrected version by Kira#	Brown from Linux 2.2#	inb	$0x92, %al			# 	orb	$02, %al			# "fast A20" version	outb	%al, $0x92			# some chips have only this# wait until a20 really *is* enabled; it can take a fair amount of# time on certain systems; Toshiba Tecras are known to have this# problem.  The memory location used here (0x200) is the int 0x80# vector, which should be safe to use.	xorw	%ax, %ax			# segment 0x0000	movw	%ax, %fs	decw	%ax				# segment 0xffff (HMA)	movw	%ax, %gsa20_wait:	incw	%ax				# unused memory location <0xfff0	movw	%ax, %fs:(0x200)		# we use the "int 0x80" vector	cmpw	%gs:(0x210), %ax		# and its corresponding HMA addr	je	a20_wait			# loop until no longer aliased# make sure any possible coprocessor is properly reset..	xorw	%ax, %ax	outb	%al, $0xf0	call	delay	outb	%al, $0xf1	call	delay# well, that went ok, I hope. Now we mask all interrupts - the rest# is done in init_IRQ().	movb	$0xFF, %al			# mask all interrupts for now	outb	%al, $0xA1	call	delay		movb	$0xFB, %al			# mask all irq's but irq2 which	outb	%al, $0x21			# is cascaded# Well, that certainly wasn't fun :-(. Hopefully it works, and we don't# need no steenking BIOS anyway (except for the initial loading :-).# The BIOS-routine wants lots of unnecessary data, and it's less# "interesting" anyway. This is how REAL programmers do it.## Well, now's the time to actually move into protected mode. To make# things as simple as possible, we do no register set-up or anything,# we let the gnu-compiled 32-bit programs do that. We just jump to# absolute address 0x1000 (or the loader supplied one),# in 32-bit protected mode.## Note that the short jump isn't strictly needed, although there are# reasons why it might be a good idea. It won't hurt in any case.	movw	$1, %ax				# protected mode (PE) bit	lmsw	%ax				# This is it!	jmp	flush_instrflush_instr:	xorw	%bx, %bx			# Flag to indicate a boot	xorl	%esi, %esi			# Pointer to real-mode code	movw	%cs, %si	subw	$DELTA_INITSEG, %si	shll	$4, %esi			# Convert to 32-bit pointer# NOTE: For high loaded big kernels we need a#	jmpi    0x100000,__KERNEL_CS##	but we yet haven't reloaded the CS register, so the default size #	of the target offset still is 16 bit.#       However, using an operand prefix (0x66), the CPU will properly#	take our 48 bit far pointer. (INTeL 80386 Programmer's Reference#	Manual, Mixing 16-bit and 32-bit code, page 16-6)	.byte 0x66, 0xea			# prefix + jmpi-opcodecode32:	.long	0x1000				# will be set to 0x100000						# for big kernels	.word	__KERNEL_CS# Here's a bunch of information about your current kernel..kernel_version:	.ascii	UTS_RELEASE		.ascii	" ("		.ascii	LINUX_COMPILE_BY		.ascii	"@"		.ascii	LINUX_COMPILE_HOST		.ascii	") "		.ascii	UTS_VERSION		.byte	0# This is the default real mode switch routine.# to be called just before protected mode transitiondefault_switch:	cli					# no interrupts allowed !	movb	$0x80, %al			# disable NMI for bootup						# sequence	outb	%al, $0x70	lret# This routine only gets called, if we get loaded by the simple# bootsect loader _and_ have a bzImage to load.# Because there is no place left in the 512 bytes of the boot sector,# we must emigrate to code space here.bootsect_helper:	cmpw	$0, %cs:bootsect_es	jnz	bootsect_second	movb	$0x20, %cs:type_of_loader	movw	%es, %ax	shrw	$4, %ax	movb	%ah, %cs:bootsect_src_base+2	movw	%es, %ax	movw	%ax, %cs:bootsect_es	subw	$SYSSEG, %ax	lret					# nothing else to do for nowbootsect_second:	pushw	%cx	pushw	%si	pushw	%bx	testw	%bx, %bx			# 64K full?	jne	bootsect_ex	movw	$0x8000, %cx			# full 64K, INT15 moves words	pushw	%cs	popw	%es	movw	$bootsect_gdt, %si	movw	$0x8700, %ax	int	$0x15	jc	bootsect_panic			# this, if INT15 fails	movw	%cs:bootsect_es, %es		# we reset %es to always point	incb	%cs:bootsect_dst_base+2		# to 0x10000bootsect_ex:	movb	%cs:bootsect_dst_base+2, %ah	shlb	$4, %ah				# we now have the number of						# moved frames in %ax	xorb	%al, %al	popw	%bx	popw	%si	popw	%cx	lretbootsect_gdt:	.word	0, 0, 0, 0	.word	0, 0, 0, 0bootsect_src:	.word	0xffffbootsect_src_base:	.byte	0x00, 0x00, 0x01		# base = 0x010000	.byte	0x93				# typbyte	.word	0				# limit16,base24 =0bootsect_dst:	.word	0xffffbootsect_dst_base:	.byte	0x00, 0x00, 0x10		# base = 0x100000	.byte	0x93				# typbyte	.word	0				# limit16,base24 =0	.word	0, 0, 0, 0			# BIOS CS	.word	0, 0, 0, 0			# BIOS DSbootsect_es:	.word	0bootsect_panic:	pushw	%cs	popw	%ds	cld	leaw	bootsect_panic_mess, %si	call	prtstr	bootsect_panic_loop:	jmp	bootsect_panic_loopbootsect_panic_mess:	.string	"INT15 refuses to access high mem, giving up."# This routine checks that the keyboard command queue is empty# (after emptying the output buffers)## Some machines have delusions that the keyboard buffer is always full# with no keyboard attached...## If there is no keyboard controller, we will usually get 0xff# to all the reads.  With each IO taking a microsecond and# a timeout of 100,000 iterations, this can take about half a# second ("delay" == outb to port 0x80). That should be ok,# and should also be plenty of time for a real keyboard controller# to empty.#empty_8042:	pushl	%ecx	movl	$100000, %ecxempty_8042_loop:	decl	%ecx	jz	empty_8042_end_loop	call	delay	inb	$0x64, %al			# 8042 status port	testb	$1, %al				# output buffer?	jz	no_output	call	delay	inb	$0x60, %al			# read it	jmp	empty_8042_loopno_output:	testb	$2, %al				# is input buffer full?	jnz	empty_8042_loop			# yes - loopempty_8042_end_loop:	popl	%ecx	ret# Read the cmos clock. Return the seconds in algettime:	pushw	%cx	movb	$0x02, %ah	int	$0x1a	movb	%dh, %al			# %dh contains the seconds	andb	$0x0f, %al	movb	%dh, %ah	movb	$0x04, %cl	shrb	%cl, %ah	aad	popw	%cx	ret# Delay is needed after doing I/Odelay:	outb	%al,$0x80	ret# Descriptor tablesgdt:	.word	0, 0, 0, 0			# dummy	.word	0, 0, 0, 0			# unused	.word	0xFFFF				# 4Gb - (0x100000*0x1000 = 4Gb)	.word	0				# base address = 0	.word	0x9A00				# code read/exec	.word	0x00CF				# granularity = 4096, 386						#  (+5th nibble of limit)	.word	0xFFFF				# 4Gb - (0x100000*0x1000 = 4Gb)	.word	0				# base address = 0	.word	0x9200				# data read/write	.word	0x00CF				# granularity = 4096, 386						#  (+5th nibble of limit)# this is 64bit descriptor for code	.word	0xFFFF	.word	0	.word	0x9A00				# code read/exec	.word	0x00AF				# as above, but it is long mode and with D=0						# it does not seem to do the trick.idt_48:	.word	0				# idt limit = 0	.word	0, 0				# idt base = 0Lgdt_48:	.word	0x8000				# gdt limit=2048,						#  256 GDT entries	.word	0, 0				# gdt base (filled in later)# Include video setup & detection code#include "video.S"# Setup signature -- must be lastsetup_sig1:	.word	SIG1setup_sig2:	.word	SIG2# After this point, there is some free space which is used by the video mode# handling code to store the temporary mode table (not used by the kernel).modelist:.textendtext:.dataenddata:.bssendbss:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久青草国产手机看片福利盒子 | 精品毛片乱码1区2区3区| 艳妇臀荡乳欲伦亚洲一区| 91免费视频观看| 亚洲欧美日韩国产手机在线 | 91在线视频18| 一区二区三区在线观看欧美| 91久久久免费一区二区| 亚洲国产精品久久久久婷婷884| 欧美日韩亚洲另类| 久久电影国产免费久久电影| 久久人人爽爽爽人久久久| av在线不卡观看免费观看| 亚洲精品中文字幕在线观看| 欧美日韩一级片在线观看| 蜜桃传媒麻豆第一区在线观看| 日韩欧美一区电影| 成人福利视频在线| 亚洲愉拍自拍另类高清精品| 91精品国产高清一区二区三区 | 国产一区二区三区在线观看免费 | 午夜精品福利视频网站| 日韩午夜激情av| 丁香天五香天堂综合| 亚洲综合偷拍欧美一区色| 日韩一区二区中文字幕| 成人免费视频国产在线观看| 亚洲国产wwwccc36天堂| 久久先锋资源网| 在线观看成人小视频| 韩国毛片一区二区三区| 一区二区三区中文字幕电影| 精品国产网站在线观看| 色婷婷国产精品久久包臀| 青青草97国产精品免费观看| 国产精品家庭影院| 日韩一区二区三区视频| 93久久精品日日躁夜夜躁欧美| 日本免费新一区视频| 亚洲欧美自拍偷拍| 精品久久久久久久一区二区蜜臀| 91天堂素人约啪| 国产在线视频精品一区| 亚洲国产毛片aaaaa无费看| 欧美国产日产图区| 欧美精品一区二区三区视频| 欧美午夜精品一区| www.日韩大片| 国内成+人亚洲+欧美+综合在线| 亚洲自拍与偷拍| 国产精品乱人伦| 久久久国产精品午夜一区ai换脸| 欧美久久久久久久久| 91亚洲精品一区二区乱码| 狠狠久久亚洲欧美| 日本伊人精品一区二区三区观看方式| 国产精品色眯眯| 久久青草国产手机看片福利盒子| 成人在线综合网站| 久久精品这里都是精品| 成人午夜视频在线| 乱一区二区av| 亚洲成人黄色小说| 亚洲精品高清在线| 中文字幕一区二区三区视频| 久久九九久精品国产免费直播| 日韩精品中文字幕在线一区| 欧美日韩在线三区| 欧美视频一区二区三区四区 | 亚洲人成电影网站色mp4| 久久久久久**毛片大全| 精品sm捆绑视频| 久久久不卡影院| 国产午夜亚洲精品午夜鲁丝片| 欧美大片国产精品| 精品国精品国产尤物美女| 91麻豆精品国产91久久久资源速度 | 91亚洲国产成人精品一区二三| 国产丶欧美丶日本不卡视频| 激情综合色综合久久综合| 美女被吸乳得到大胸91| 美女视频一区在线观看| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲国产精品久久艾草纯爱 | 日韩国产精品大片| 强制捆绑调教一区二区| 日本不卡一区二区| 免费高清视频精品| 国产乱码精品一区二区三区av | 久久精品免费观看| 国产综合色在线| 丁香啪啪综合成人亚洲小说 | 国产真实乱子伦精品视频| 国产在线国偷精品免费看| 国产精品18久久久久久久久 | 欧美综合久久久| 欧美日本不卡视频| 欧美一区二区三区四区高清| 精品国产伦一区二区三区免费| 久久精品综合网| 亚洲人成精品久久久久| 首页国产欧美日韩丝袜| 国产一区二区三区黄视频| 成人深夜福利app| 欧美三级视频在线| 欧美一区日韩一区| 国产日产欧美一区二区三区| 亚洲精品中文在线影院| 美腿丝袜一区二区三区| 国产美女在线精品| 色94色欧美sute亚洲13| 制服丝袜中文字幕亚洲| 日本一区二区视频在线观看| 亚洲另类一区二区| 另类欧美日韩国产在线| jizzjizzjizz欧美| 欧美一区二区三区喷汁尤物| 一区二区免费在线| 蜜桃视频免费观看一区| 色综合天天做天天爱| 欧美精品色综合| 国产精品美女久久久久久久| 婷婷综合五月天| av一区二区三区| 日韩视频一区二区在线观看| 成人欧美一区二区三区白人| 日韩高清国产一区在线| av在线不卡电影| 亚洲精品在线观看视频| 亚洲国产精品一区二区尤物区| 国产高清成人在线| 9191精品国产综合久久久久久| 中文在线资源观看网站视频免费不卡| 亚洲高清久久久| 99久久精品国产网站| 精品少妇一区二区三区视频免付费| 成人欧美一区二区三区| 国产精品99久久久久久久vr| 欧美久久久久久久久| 亚洲男人的天堂在线aⅴ视频| 日韩精品一级二级| 91精品福利在线| 国产精品丝袜一区| 国产麻豆91精品| 日韩一区二区在线看| 亚洲国产日韩综合久久精品| 97精品国产露脸对白| 国产人成一区二区三区影院| 免费成人小视频| 日韩一区二区在线观看视频播放| 亚洲韩国精品一区| 一本色道久久综合亚洲91| 国产女人aaa级久久久级 | 欧美激情在线免费观看| 国产一区二区精品久久91| 欧美一区二区三区电影| 亚洲国产日韩av| 欧美日韩精品二区第二页| 亚洲综合激情网| 在线观看一区日韩| 一区二区三区在线观看视频| 色综合天天综合网天天看片| 亚洲视频狠狠干| 91影视在线播放| 亚洲影视资源网| 欧美午夜片在线观看| 亚洲在线一区二区三区| 一本大道久久a久久精品综合| 国产精品国产精品国产专区不片| 国产成人av一区二区三区在线 | 青青草成人在线观看| 日韩亚洲欧美一区| 久久激情五月婷婷| 精品成人a区在线观看| 国产最新精品免费| 337p粉嫩大胆噜噜噜噜噜91av| 国产自产高清不卡| 久久久久久久久久久久久久久99| 国产一区二区看久久| 中文欧美字幕免费| 91免费精品国自产拍在线不卡| 成人免费在线播放视频| 欧美综合一区二区三区| 日韩专区欧美专区| 26uuu另类欧美亚洲曰本| 国产黑丝在线一区二区三区| 国产精品麻豆久久久| 99vv1com这只有精品| 亚洲高清免费观看高清完整版在线观看 | 亚洲国产精品视频| 日韩欧美你懂的| 国产成人av电影免费在线观看| 国产精品妹子av| 欧美日韩一区国产| 麻豆精品在线播放| 中文一区在线播放| 欧美在线不卡一区| 久久国产夜色精品鲁鲁99| 欧美激情一区二区三区不卡 | 国产精品一区免费在线观看|