1.2:系统启动-第二阶段setup.s

1:功能

从bootset.s跳转到setup.s中执行,该代码作用如下:
1:获取初始化的基本参数
2:进入保护模式

1)将system模块从0x10000-0x8ffff整体移动到0X0地址处
2)启动保护模式
3)进入32位保护模式运行,并跳转到head.s

2:代码实现

2.1:获取初始化参数

! Get memory size (extended mem, kB)
//获取扩展内存并放人0X90002处
        mov     ah,#0x88
        int     0x15
        mov     [2],ax	
! Get video-card data:
//获取显示卡当前显示模式
        mov     ah,#0x0f
        int     0x10
        mov     [4],bx          ! bh = display page
        mov     [6],ax          ! al = video mode, ah = window width
! check for EGA/VGA and some config parameters
//检查EGA/VGA并获取参数
        mov     ah,#0x12
        mov     bl,#0x10
        int     0x10
        mov     [8],ax
        mov     [10],bx
        mov     [12],cx
! Get hd0 data	
! Get hd1 data
//获取硬盘信息

2.2:进入保护模式

1)将system模块从0x10000-0x8ffff整体移动到0X0地址处

! first we move the system to it's rightful place

        mov     ax,#0x0000
        cld                     ! 'direction'=0, movs moves forward
do_move:
        mov     es,ax           ! destination segment
        add     ax,#0x1000
        cmp     ax,#0x9000
        jz      end_move
        mov     ds,ax           ! source segment
        sub     di,di
        sub     si,si
        mov     cx,#0x8000
        rep
        movsw
        jmp     do_move

2)启动保护模式
开启保护模式后会进行32位寻址,计算机会启动另一套电路来解释执行指令。所以CS:IP不能再用CS<<4 + IP来工作了。因为此时CS如果是16位寄存器,那么CS<<4只能到20位,那边段基地址只能在1M以内,如果是32位寄存器,那么CS<<4就会移出36位,不符合32位寻址,所以需要新的寻址方式。为了支持新的寻址方式,就需要将A20地址先选通,并将CR0寄存器最后一位置1,完成后,内存寻址就会采用另一套电路----保护模式电路。

end_move:
        mov     ax,#SETUPSEG    ! right, forgot this at first. didn't work :-)
        mov     ds,ax
        //1)加载中断描述符表寄存器
        lidt    idt_48          ! load idt with 0,0	
        //2)加载全局描述符表寄存器
        lgdt    gdt_48          ! load gdt with whatever appropriate	

! that was painless, now we enable A20
		//3)开启A20地址线
        call    empty_8042
        mov     al,#0xD1                ! command write
        out     #0x64,al
        call    empty_8042
        mov     al,#0xDF                ! A20 on
        out     #0x60,al
        call    empty_8042
		
		//4)重新对中断编程
!Now we have to reprogram the interrupts
        mov     al,#0x11                ! initialization sequence
..............

3)进入32位保护模式运行,并跳转到head.s
保护模式启动后,第一条指令就是“jmpi 0,8”,那么此时就不应该是8<<4 + 0这样算出来的0X80了。
32位保护模式下的寻址是这样设计的:
用段寄存器作为索引在一个地址表里找到32位的基址,再和偏移寄存器中存放的32位数值相加,形成最终的地址放到地址总线上选定内存。

mov     ax,#0x0001      ! protected mode (PE) bit	//打开保护模式bit位
lmsw    ax              ! This is it!	//加载机器状态字
jmpi    0,8             ! jmp offset 0 of segment 8 (cs)	//跳转到基地址0处执行head.s
//2)加载全局描述符表寄存器
lgdt    gdt_48          ! load gdt with whatev
//全局描述符由多个8字节长的描述符组成。这里给出3个描述符项
gdt:
		//第一个描述符不用
        .word   0,0,0,0         ! dummy
		//第二个是操作系统内核代码段描述符
        .word   0x07FF          ! 8Mb - limit=2047 (2048*4096=8Mb)
        .word   0x0000          ! base address=0
        .word   0x9A00          ! code read/exec
        .word   0x00C0          ! granularity=4096, 386
		//第三个是操作系统内核数据段描述符
        .word   0x07FF          ! 8Mb - limit=2047 (2048*4096=8Mb)
        .word   0x0000          ! base address=0
        .word   0x9200          ! data read/write
        .word   0x00C0          ! granularity=4096, 386

gdt_48:
        .word   0x800           ! gdt limit=2048, 256 GDT entries
        //0x0009<<16 + 0x0200 + gdt,0x90200恰好是setup开始的位置
        .word   512+gdt,0x9     ! gdt base = 0X9xxxx

所以,根据上面的代码,最终形成如下的gdt表,根据该表,可以知道cs处的基地址为0x0处,IP也0,所以就跳到0地址处执行代码,即head.s代码中。
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: tesseract-ocr-w64-setup-v5.2.0.20220712.exe是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,支持识别多种语言,包括中文、英文、法语、德语等。该软件提供了一种从图像中识别文本的方法,用户可以将扫描或数字化的文档转换成电子文本,从而便于编辑、搜索或转化成其他格式。此版本的tesseract-ocr-w64-setup-v5.2.0.20220712.exe需要在Windows 64位操作系统上运行,并提供了安装程序方便用户快速安装。此外,通过稍微的调整和训练,tesseract-ocr-w64-setup-v5.2.0.20220712.exe可以大大提高识别准确度,并且该软件还可以为不同的应用程序提供API,便于开发人员将其集成到其他应用程序中。总的来说,tesseract-ocr-w64-setup-v5.2.0.20220712.exe是一款功能强大的OCR工具,可以帮助用户处理各种文本识别任务。 ### 回答2: tesseract-ocr-w64-setup-v5.2.0.20220712.exe是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎。它由Google于2005年开发,现在由社区开发和支持。它可以识别各种语言的文本,包括汉语、英语、阿拉伯语等。tesseract的识别准确率随着版本的更新逐渐提高。当前的版本v5.2.0是在2022年7月12日发布的。 tesseract-ocr-w64-setup-v5.2.0.20220712.exe是Windows 64位平台上的安装包。用户可以下载安装包,并进行简单的设置,就可以使用tesseract OCR引擎。tesseract也提供了命令行接口和API接口,可以在不同的应用程序中使用。 tesseract的使用场景非常广泛,例如可以用于数字化图书和文档,提取字幕和照片中的文字,自动化识别票据和账单等。tesseract的识别准确率受到很多因素的影响,例如输入图像清晰度、文字大小和字体等。在使用tesseract时,建议先进行图像处理和预处理,以提高识别结果的准确率。 总的来说,tesseract-ocr-w64-setup-v5.2.0.20220712.exe是一个非常有用的OCR引擎,允许用户在Windows平台上进行光学字符识别。通过它,用户可以将图像中的文本转换成可编辑的文本,从而提高工作效率和准确性。 ### 回答3: tesseract-ocr-w64-setup-v5.2.0.20220712.exe 是一个免费的OCR(Optical Character Recognition,光学字符识别)软件,适用于Windows 64位操作系统。该软件可以读取和识别被扫描的文档、图片、PDF文件等中的文字,并且将其转化为可编辑的文字格式,方便用户进行复制、粘贴、编辑等操作。 tesseract-ocr-w64-setup-v5.2.0.20220712.exe 的安装过程简单,用户只需要下载并运行安装程序即可。在安装完成后,用户可以访问软件的图形用户界面,或者使用命令行工具来执行OCR操作。该软件支持多种语言,包括英语、法语、中文等,并且可以通过将其与第三方程序集成来扩展其功能。 总之,tesseract-ocr-w64-setup-v5.2.0.20220712.exe 是一款强大的OCR工具,可以为用户提供高质量的文本识别服务,帮助用户快速转换图片或PDF文件中的文字内容,提高工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值