X86汇编调试环境搭建的过程 - 网站

X86汇编调试环境搭建的过程

分类:汇编语言 · 发布时间:2023-04-22 11:47 · 阅读:6269

本次使用vscode搭建的,需要的插件有X86 and X86_64 Assembly(也可以使用masm插件),还有一个hexdump for VSCode。 安装NASM,并添加到环境变量,下面看下X86汇编调试环境搭建的过程吧

最近毕设需要做一个基于X86的微型OS内核,一直在学习汇编,前来记录一下

汇编环境搭建

本次使用vscode搭建的,需要的插件有X86 and X86_64 Assembly(也可以使用masm插件),还有一个hexdump for VSCode。
安装NASM,并添加到环境变量
安装QEMU,并将其添加到环境变量下

编写代码:(代码来自30天自制操作系统)

 ; hello-os ; TAB=4 ; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy code DB      0xeb, 0x4e, 0x90 DB      "HELLOIPL"      ; 启动扇区名称(8字节) DW      512             ; 每个扇区(sector)大小(必须512字节) DB      1               ; 簇(cluster)大小(必须为1个扇区) DW      1               ; FAT起始位置(一般为第一个扇区) DB      2               ; FAT个数(必须为2) DW      224             ; 根目录大小(一般为224项) DW      2880            ; 该磁盘大小(必须为2880扇区1440*1024/512) DB      0xf0            ; 磁盘类型(必须为0xf0) DW      9               ; FAT的长度(必须是9扇区) DW      18              ; 一个磁道(track)有几个扇区(必须为18) DW      2               ; 磁头数(必须是2) DD      0               ; 不使用分区,必须是0 DD      2880            ; 重写一次磁盘大小 ; 书中作者说原因不明的两行代码我查到了,see https://www.ntfs.com/fat-partition-sector.htm DB      0               ; BPB_Physical_Disk_Number    DB   (This is related to the BIOS physical disk number. Floppy drives are numbered starting with 0x00 for the A disk. Physical hard disks are numbered starting with 0x80. The value is typically 0x80 for hard disks, regardless of how many physical disk drives exist, because the value is only relevant if the device is the startup disk.) DB      0               ; BPB_Current_Head            DB   (Not used by FAT file system) DB      0x29            ; BPB_Signature               DB   (Must be either 0x28 or 0x29 in order to be recognized by Windows NT.) DD      0xffffffff      ; BPB_Volume_Serial_Number    DD DB      "HELLO-OS   "   ; 磁盘的名称(必须为11字节,不足填空格) DB      "FAT12   "      ; 磁盘格式名称(必须是8字节,不足填空格) TIMES   18  DB 0        ; 先空出18字节 ; 程序主体 DB      0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c DB      0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a DB      0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09 DB      0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb DB      0xee, 0xf4, 0xeb, 0xfd ; 信息显示部分 DB      0x0a, 0x0a      ; 换行两次 DB      "hello, world" DB      0x0a         ; 换行 DB      0 TIMES   0x1fe-($-$$) DB 0x00         ; 填写0x00直到0x001fe DB      0x55, 0xaa ; 启动扇区以外部分输出 DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 TIMES   4600    DB 0 DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 TIMES   1469432 DB 0 ; 只是把 RESB 20 改成了 TIMES 20 DB 0 

编译命令
vscode写好后直接终端运行

 nasm -f bin day1.asm -o day1.img

-f指定输出格式为bin,本次生成的是img文件,因为后续调试要用,当然也可以生成其他类型文件

运行命令

 qemu-system-i386 day1.img

运行结果:

在这里插入图片描述

调试环境搭建

调试汇编我们一般用bochs软件调试
下载链接

进入安装目录找到一个叫bochsdbg。exe的程序,我们调试主要用到这个程序
打开即可看到如下界面

在这里插入图片描述

在白色menu框中点击Disk & Boot选项,选择ATA channel 0下的First HD/CD on channel

在这里插入图片描述

修改如下参数

在这里插入图片描述

第一个指定为磁盘
第二个指定img文件路径
Heads:磁头数
Sectors per track :每磁道有几个扇区
这些参数其实是由上文的程序指定的程序指定的

 DW      18              ; 一个磁道(track)有几个扇区(必须为18) DW      2               ; 磁头数(必须是2)

之后点击Boot Options中的boot drive设置为disk即可

在这里插入图片描述

点击ok后会退到Bochs start menu菜单, 点击start即可启动调试
这里展示了一下

在这里插入图片描述

注意最下面的s 其实就是单步调试的意思,还有注意的是展示的一行汇编代码实际是未运行的,是下次运行的,比如这里的

 jmpf 0xf000:e05b

实际未运行,需要输入s才能运行这一步

如果想要跳转个某个地址呢 比如0x7c00,该怎么办呢?
输入 b 0x7c00 b就是打断点 运行一下
再输入c就是continue继续的意思即可跳转到这
想要退出的话需要输入2次q即可
后续有什么命令在继续补充吧

需要注意的是汇编代码必须加前面那个fat代码,不然bochs无法调试,还有另一种方法是用FixVhdw,这个方法可以去参考B站UP谭玉刚的视频。这个软件是X86汇编 从实模式到保护模式的作者写的。

到此这篇关于X86汇编调试环境搭建的文章就介绍到这了,更多相关X86汇编调试环境内容请搜索0133技术站以前的文章或继续浏览下面的相关文章希望大家以后多多支持0133技术站!

标签:
X86 汇编 环境

相关文章

汇编语言 跳转指令与C语言的条件分支

这篇文章主要介绍了汇编语言 跳转指令与C语言的条件分支,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

汇编语言LDR指令和LDR伪指令详解

这篇文章主要介绍了汇编语言LDR指令和LDR伪指令详解,伪指令是用来自动拆分代码值的,会把一条语句拆分成多条语句,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一文掌握汇编语言 halt 命令

汇编 halt 命令,是一条重复执行指定标号的循环命令。处理器暂停,直到出现中断或复位信号才继续,这篇文章主要介绍了汇编语言 halt 命令,需要的朋友可以参考下

VScode配置8086汇编环境的过程解析

这篇文章主要介绍了VScode配置8086汇编环境的过程解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

最好懂的汇编语言教程,解释CPU如何执行代码

这篇文章主要介绍了最好懂的汇编语言教程,解释CPU如何执行代码。计算机真正能够理解的是低级语言,它专门用来控制硬件。汇编语言就是低级语言,直接描述/控制 CPU 的运行。如果你想了解 CPU 到底干了些什么,以及代码的运行步骤,就一定要学习汇编语言。

返回分类 返回首页