[书]x86汇编语言:从实模式到保护模式 -- 第六、七章 编写主引导扇区代码
第六章 编写主引导扇区代码(启动时显示文字: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汇编语言:从实模式到保护模式 -- 第六、七章 编写主引导扇区代码相关推荐
- 【OS学习笔记】六 实模式:编写主引导扇区代码
上一篇文章学习了:计算机的启动过程(点击链接查看上一篇文章) 这篇文章学习记录为:编写主引导扇区代码. 参考:<X86汇编语言-从实模式到保护模式>-李忠.纯学习笔记,更详细内容请阅读正版 ...
- 【OS学习笔记】八 实模式:编写主引导扇区代码-另一种更高效的写法
学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 上一篇文章,我们用比较原始的方法编写了主引导扇区的代码.点击链接查看 ...
- [书]x86汇编语言:从实模式到保护模式 -- 第17章 中断、任务切换、分页机制、平坦模型
# 任务切换 内核任务.用户任务1.用户任务2,之前的轮询切换 利用RTC芯片的硬件中断来实现任务切换 计算机主板上有实时时钟芯片RTC,可以设置RTC芯片,使得它每次更新CMOS中的时间信息后,发出 ...
- [书]x86汇编语言:从实模式到保护模式 -- 第13章 mbr加载内核、内核加载应用程序
# mbr加载内核 1.0x7c00,16位实模式 2.进入保护模式前的准备工作:创建段描述符(代码段.数据段.堆栈段.显示缓冲区),构建gdt 3.进入保护模式 ; 开启保护模式 ; CR0的第1位 ...
- [书]x86汇编语言:从实模式到保护模式 -- 第11章 进入保护模式,初识全局描述符表GDT; 第12章 别名,冒泡排序
第11章 进入保护模式:初始化全局描述符表,通过GDT进入代码段.数据段.堆栈段 ; FILE: c11_mbr.asm ; DATE: 20191229 ; TITLE: 硬盘主引导扇区代码; 设置 ...
- 【OS学习笔记】三十七 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----主引导扇区代码
本文是以下几篇文章对应的主引导扇区代码汇编代码: [OS学习笔记]三十四 保护模式十:中断和异常区别 [OS学习笔记]三十五 保护模式十:中断描述符表.中断门和陷阱门 [OS学习笔记]三十六 保护模式 ...
- [书]x86汇编语言:从实模式到保护模式 -- 第八章 硬盘和显卡的访问与控制,mbr加载并重定位应用程序
第八章 硬盘和显卡的访问与控制 mbr加载.重定位用户程序 PART 1 >> VirtualBox显示最终效果 ===================================== ...
- [书]x86汇编语言:从实模式到保护模式 -- 第16章 分页机制、平坦模型
# 分页机制 二级页表:页目录.页表 ==> 4KB物理页 32位线性地址中:高10位为页目录中的索引号(乘4得偏移量),该目录项指向页表的基地址:中间10位为页表中的索引号,该页表项指向4KB ...
- [书]x86汇编语言:从实模式到保护模式 -- 第15章 任务切换
# 执行结果 # TODO:字符串显示函数的滚屏部分应该是有bug. # file_02: c15_core.asm ; FILE: c13_core.asm ; DATE: 20200104 ; T ...
最新文章
- 数学建模公选课Ch1.2020.4.4
- vant 下拉框样式_使用 Vue 的 Vant.js List 列表组件实现无限下拉
- 使用工具Source Monitor测量您Java代码的环复杂度
- Redis 究竟适不适合当队列来用?
- 助力企业应用与基础架构现代化 VMware这波组合拳够强!
- 最受欢迎中文机器学习课程,台大李宏毅老师公开课2019版上线!
- 返回通知异常通知环绕通知
- 计算机职业规划500字中专,计算机中专生职业规划范文500字中专生职业生涯规划书范文.doc...
- Java HotSpot(TM)64位服务器虚拟机警告
- [ZT]难道美国的一些都市真的比长安还要古老?
- 模型矩阵、视图矩阵、投影矩阵
- 2022年暑期实习 PwC AC 普华永道信息技术 待遇+笔试+面试信息
- IntelliJ IDEA破解版 2017.3.4 Ultimate下载安装和JetbrainsCrack-2.7.jar激活教程
- 试用计算机绘制*组成的图案c语言,C语言绘图与计算机仿真技术
- matlab 声源定位csdn_麦克风阵列声源定位 GCC-PHAT(一)
- {转}tbl语言简介
- 我的世界服务器领地系统,我的世界服务器怎么创建领地
- 如何混迹程序猿江湖,你得懂程序员黑话暗语!
- 开启 Linux 版的 Window 子系统(WSL)
- 10月第3周业务风控关注|网络安全威胁信息格式规范正式发布