美文网首页
[OS64位][015]源码阅读:代码清单3-23 ~ 3-24

[OS64位][015]源码阅读:代码清单3-23 ~ 3-24

作者: AkuRinbu | 来源:发表于2019-05-16 20:12 被阅读0次

学习笔记

使用教材(配书源码以及使用方法)
《一个64位操作系统的设计与实现》
http://www.ituring.com.cn/book/2450
https://www.jianshu.com/p/28f9713a9171

源码文件

  • 第3章\程序\程序3-4\ loader.asm

调试运行

运行结果
  • 随便新建一个文件,然后将其命名成 kernel.bin ,就可以查看运行效果
[anno@localhost Desktop]$ sudo cp loader.bin media
[anno@localhost Desktop]$ sync

[anno@localhost Desktop]$ sudo cp kernel.bin media
[anno@localhost Desktop]$ sync
  • 打开bochs ,反汇编,可以计算出断点位置b 0x1033c ,至此是Get SVGA Mode Info SUCCESSFUL!,断点之后开始的就是 SET SVGA Mode (一旦运行SET部分的机器码,就会改变bochs窗口的大小)
0001033c: (                    ): mov ax, 0x4f02            ; b8024f
0001033f: (                    ): mov bx, 0x4180            ; bb8041
00010342: (                    ): int 0x10                  ; cd10
00010344: (                    ): cmp ax, 0x004f            ; 83f84f
00010347: (                    ): jnz .-38                  ; 75da
  • 重要的断点
0x7c00  boot
0x7d34  boot 跳转到 loader
0x1000:0080 ( 即 0x10080 loder.bin) loader第一条指令

反汇编 u 0x10080:0x10280 查看512字节
  • 完整运行步骤可参考

[OS64位][011]源码阅读:代码使用与命令行操作 程序3-3 boot.asm loader.asm 以及 mount 使FAT文件系统生效
https://www.jianshu.com/p/6c7f9f12c2af

代码清单3-23 源码 line : 671 ~ 709 : 显示十六进制数字

  • 模块Label_DispAL功能:显示十六进制数字
  • 传入参数:AL=要显示的十六进制数
显示十六进制数.png

代码清单3-24 源码 line : 332 ~ 478 : 显示视频图像芯片的查询信息,并且根据查询信息配置芯片的显示模式

显示视频图像芯片的查询信息,并且根据查询信息配置芯片的显示模式
;=======    get SVGA information
;=======    Get SVGA Mode Info
Label_SVGA_Mode_Info_Get
      ;=======  display SVGA mode information
      Label_SVGA_Mode_Info_FAIL
      Label_SET_SVGA_Mode_VESA_VBE_FAIL
Label_SVGA_Mode_Info_Finish
;=======    set the SVGA mode(VESA VBE)

参考资料

显存显示相关

  • 显示到显示屏 上要在 【显存】 填入 【ASCII码的值】

[048][汇编语言]实验10 3、数值显示
https://www.jianshu.com/p/187d1fce3e45

  • BCD码转换成ASCII
;-------------------------------------------------------------------------------
;子程序:   bcd_to_ascii
;参数:        AL = BCD码
;返回:        AH 十位数的ASCII码 
;           AL 个位数的ASCII码
;-------------------------------------------------------------------------------
bcd_to_ascii:           ;新0x70中断中调用的子程序
                        ;将BCD码转换成ASCII
    mov ah,al
    and al,0x0f         
    add al,0x30         ;个位数的ASCII码
    
    shr ah,4
    and ah,0x0f
    add ah,0x30         ;十位数的ASCII码

ret

[014][x86汇编语言]采用更新周期结束中断,动态时钟(Bochs 调试: 在中断向量表IVT中,查看新的0x70号中断程序的入口地址)
https://www.jianshu.com/p/0667a55bafce

图像芯片信息相关

  • Int 0x10, AH=0x4f

http://www.delorie.com/djgpp/doc/rbinter/ix/10/4F.html

104F00 INT 10 - VESA SuperVGA BIOS (VBE) - GET SuperVGA INFORMATION
104F01 INT 10 - VESA SuperVGA BIOS - GET SuperVGA MODE INFORMATION
104F02 INT 10 - VESA SuperVGA BIOS - SET SuperVGA VIDEO MODE

AX = 4F00h
ES:DI -> buffer for SuperVGA information
 (see 00077 http://www.delorie.com/djgpp/doc/rbinter/it/77/0.html)

Return:
AL = 4Fh if function supported
AH = status 
  00h successful ES:DI buffer filled
  01h failed

http://www.delorie.com/djgpp/doc/rbinter/id/78/2.html

 0Eh    DWORD   pointer to list of supported VESA and OEM video modes
        (list of words terminated with FFFFh)

http://www.delorie.com/djgpp/doc/rbinter/it/77/0.html

  • INT10H AX = 4F01h
INT 10 
- VESA SuperVGA BIOS 
- GET SuperVGA MODE INFORMATION
AX = 4F01h
CX = SuperVGA video mode 
(see #04082 for bitfields)
ES:DI->256-byte buffer for mode information (see #00079)

Return: 
AL = 4Fh if function supported
AH = status
00h successful ES:DI buffer filled
01h failed

http://www.delorie.com/djgpp/doc/rbinter/id/79/2.html

相关文章

网友评论

      本文标题:[OS64位][015]源码阅读:代码清单3-23 ~ 3-24

      本文链接:https://www.haomeiwen.com/subject/sauwaqtx.html