第六章 编写主引导扇区代码(启动时显示文字:Label offset:)

PART 1 >> 用VirtualBox显示最终效果

1.1 汇编

启用nasm的工具“nasm-shell”,执行命令“nasm test.asm -o test.bin”

1.2 写入虚拟磁盘文件

启用本书配套工具“fixvhdwr.exe”,将汇编得到的test.bin文件写入VirtualBox的虚拟磁盘文件test.vhd

1.3 执行

启用VirtualBox,最终显示的偏移地址为29(十进制)

===================================================================================================

PART 2 >> 用Bochs调试

2.1 配置Bochs

参考本书相关指引,得到配置文件“bochsrc.bxrc”

2.2 启用调试

1)ROM-BIOS,0xf000:0xe05b

物理地址0x07c00:如果计算机的设置是从硬盘启动,ROM-BIOS将读取硬盘主引导扇区的内容并加载到内存0x0000:0x7c00处

2)启用Bochs工具bochsdbg.exe

对应汇编源码可看到需要显示的偏移地址为0x001d(十六进制),即29(十进制)

===================================================================================================

PART 3 >> 汇编源码

jmp near start; 字符串"Label offset:",显示属性0x07(黑底白字)
mytext db 'L',0x07,'a',0x07,'b',0x07,'e',0x07,'l',0x07,' ',0x07,'o',0x07,\'f',0x07,'f',0x07,'s',0x07,'e',0x07,'t',0x07,':',0x07mynumber db 0, 0, 0, 0, 0start:; 若从硬盘启动,BIOS读取主引导扇区并加载到内存0x0000:0x7c00,即0x07c00mov ax, 0x7c0   ; 此处技巧性地将0x07c00看作0x07c0:0x0000mov ds, axmov ax, 0xb800  ; 显卡对应的物理地址空间: 0xb8000 ~ 0xbffffmov es, ax; 传送指令: movsb movsw; 源地址ds:si, 目的地址es:di; 传送方向: cld正向,std反向mov si, mytextmov di, 0mov cx, (mynumber-mytext)/2cldrep movsw   ; rep重复执行,次数为CX; div, 除以16位的二进制数; 被除数(高16位dx, 低16位ax), 商ax, 余数dxmov ax, mynumber    ; 要显示的数据mov si, 10  ; 除数mov cx, 5   ; loop循环次数mov bx, ax  ; 偏移地址
digit:xor dx, dxdiv simov [bx], dl ; 依次将mynumber十进制的各个位数存至[ds:bx]inc bxloop digitmov bx, mynumbermov si, 4
show:mov al, [bx+si]add al, 48      ; 将mynumber十进制的各个位数转为字符型mov ah, 0x04    ; 显示属性0x04(黑底红字)mov [es:di], ax ; 移至显存映射的内存空间add di, 2dec si          ; 影响符号位SF(Sign Flag)jns show        ; jns, SF=0跳转    mov al, 'D'     ; 黑底白字显示字符'D'mov ah, 0x07mov [es:di], axjmp near $      ; $, 当前行的汇编地址; $$, 当前汇编节(段)的起始汇编地址times 510-($-$$) db 0db 0x55, 0xaa

===================================================================================================

第六章 初识堆栈(求和1~100,并显示)

PART 1 >> 用VirtualBox显示最终效果

===================================================================================================

PART 3 >> 汇编源码

; DATE: 20191207jmp near startmessage db "1+2+3+...+100="start:; 若从硬盘启动,BIOS读取主引导扇区并加载到内存0x0000:0x7c00,即0x07c00; 0x0000:0x7c00 等同于 0x07c0:0x0000mov ax, 0x07c0mov ds, ax; 显卡对应的物理地址空间: 0xb8000 ~ 0xbffffmov ax, 0xb800mov es, axmov si, messagemov di, 0mov cx, start-message
show_message:mov al, [si]mov ah, 0x07    ; 显示属性0x07(黑底白字)mov [es:di], axinc siadd di, 2loop show_message ; cx为循环计数xor ax, axmov cx, 1
sum:add ax, cxinc cxcmp cx, 100jle sum; 设置堆栈段的段基地址xor cx, cxmov ss, cxmov sp, cxmov bx, 10
digit_sum:xor dx, dxdiv bxor dl, 0x30     ; 加48将数字转为字符型mov dh, 0x07    ; 显示属性0x07(黑底白字)push dxinc cxcmp ax, 0jne digit_sumshow_sum:pop word [es:di]add di, 2loop show_sum   ; cx为循环计数jmp near $times 510-($-$$) db 0db 0x55, 0xaa

[书]x86汇编语言:从实模式到保护模式 -- 第六、七章 编写主引导扇区代码相关推荐

  1. 【OS学习笔记】六 实模式:编写主引导扇区代码

    上一篇文章学习了:计算机的启动过程(点击链接查看上一篇文章) 这篇文章学习记录为:编写主引导扇区代码. 参考:<X86汇编语言-从实模式到保护模式>-李忠.纯学习笔记,更详细内容请阅读正版 ...

  2. 【OS学习笔记】八 实模式:编写主引导扇区代码-另一种更高效的写法

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 上一篇文章,我们用比较原始的方法编写了主引导扇区的代码.点击链接查看 ...

  3. [书]x86汇编语言:从实模式到保护模式 -- 第17章 中断、任务切换、分页机制、平坦模型

    # 任务切换 内核任务.用户任务1.用户任务2,之前的轮询切换 利用RTC芯片的硬件中断来实现任务切换 计算机主板上有实时时钟芯片RTC,可以设置RTC芯片,使得它每次更新CMOS中的时间信息后,发出 ...

  4. [书]x86汇编语言:从实模式到保护模式 -- 第13章 mbr加载内核、内核加载应用程序

    # mbr加载内核 1.0x7c00,16位实模式 2.进入保护模式前的准备工作:创建段描述符(代码段.数据段.堆栈段.显示缓冲区),构建gdt 3.进入保护模式 ; 开启保护模式 ; CR0的第1位 ...

  5. [书]x86汇编语言:从实模式到保护模式 -- 第11章 进入保护模式,初识全局描述符表GDT; 第12章 别名,冒泡排序

    第11章 进入保护模式:初始化全局描述符表,通过GDT进入代码段.数据段.堆栈段 ; FILE: c11_mbr.asm ; DATE: 20191229 ; TITLE: 硬盘主引导扇区代码; 设置 ...

  6. 【OS学习笔记】三十七 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----主引导扇区代码

    本文是以下几篇文章对应的主引导扇区代码汇编代码: [OS学习笔记]三十四 保护模式十:中断和异常区别 [OS学习笔记]三十五 保护模式十:中断描述符表.中断门和陷阱门 [OS学习笔记]三十六 保护模式 ...

  7. [书]x86汇编语言:从实模式到保护模式 -- 第八章 硬盘和显卡的访问与控制,mbr加载并重定位应用程序

    第八章 硬盘和显卡的访问与控制 mbr加载.重定位用户程序 PART 1 >> VirtualBox显示最终效果 ===================================== ...

  8. [书]x86汇编语言:从实模式到保护模式 -- 第16章 分页机制、平坦模型

    # 分页机制 二级页表:页目录.页表 ==> 4KB物理页 32位线性地址中:高10位为页目录中的索引号(乘4得偏移量),该目录项指向页表的基地址:中间10位为页表中的索引号,该页表项指向4KB ...

  9. [书]x86汇编语言:从实模式到保护模式 -- 第15章 任务切换

    # 执行结果 # TODO:字符串显示函数的滚屏部分应该是有bug. # file_02: c15_core.asm ; FILE: c13_core.asm ; DATE: 20200104 ; T ...

最新文章

  1. 数学建模公选课Ch1.2020.4.4
  2. vant 下拉框样式_使用 Vue 的 Vant.js List 列表组件实现无限下拉
  3. 使用工具Source Monitor测量您Java代码的环复杂度
  4. Redis 究竟适不适合当队列来用?
  5. 助力企业应用与基础架构现代化 VMware这波组合拳够强!
  6. 最受欢迎中文机器学习课程,台大李宏毅老师公开课2019版上线!
  7. 返回通知异常通知环绕通知
  8. 计算机职业规划500字中专,计算机中专生职业规划范文500字中专生职业生涯规划书范文.doc...
  9. Java HotSpot(TM)64位服务器虚拟机警告
  10. [ZT]难道美国的一些都市真的比长安还要古老?
  11. 模型矩阵、视图矩阵、投影矩阵
  12. 2022年暑期实习 PwC AC 普华永道信息技术 待遇+笔试+面试信息
  13. IntelliJ IDEA破解版 2017.3.4 Ultimate下载安装和JetbrainsCrack-2.7.jar激活教程
  14. 试用计算机绘制*组成的图案c语言,C语言绘图与计算机仿真技术
  15. matlab 声源定位csdn_麦克风阵列声源定位 GCC-PHAT(一)
  16. {转}tbl语言简介
  17. 我的世界服务器领地系统,我的世界服务器怎么创建领地
  18. 如何混迹程序猿江湖,你得懂程序员黑话暗语!
  19. 开启 Linux 版的 Window 子系统(WSL)
  20. 10月第3周业务风控关注|网络安全威胁信息格式规范正式发布

热门文章

  1. Springboot实现的心理测评管理系统
  2. 几个html页面怎么连接,如何使用flas连接我的两个HTML页面
  3. 大学计算机操作系统实验报告,四川大学计算机操作系统第四实验报告
  4. 咬文嚼字vue系列(一)
  5. 关于FloTHERM破解后无法打开的问题的解决方法
  6. 对数学建模论文的一些建议
  7. 史上最强型人养成秘籍: 90 天肥仔变型男实录
  8. vue flv播放器
  9. 网络协议封封封之Panabit配置文档
  10. 购置税用计算机怎么算百分比,怎样在网上使用新车购置税计算器?