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

汇编环境搭建

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

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

; hello-os
; TAB=4; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy codeDB      0xeb, 0x4e, 0x90DB      "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               ; 不使用分区,必须是0DD      2880            ; 重写一次磁盘大小; 书中作者说原因不明的两行代码我查到了,see https://www.ntfs.com/fat-partition-sector.htmDB      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    DDDB      "HELLO-OS   "   ; 磁盘的名称(必须为11字节,不足填空格)DB      "FAT12   "      ; 磁盘格式名称(必须是8字节,不足填空格)TIMES   18  DB 0        ; 先空出18字节; 程序主体DB      0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7cDB      0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8aDB      0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09DB      0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xebDB      0xee, 0xf4, 0xeb, 0xfd; 信息显示部分DB      0x0a, 0x0a      ; 换行两次DB      "hello, world"DB      0x0a         ; 换行DB      0TIMES   0x1fe-($-$$) DB 0x00         ; 填写0x00直到0x001feDB      0x55, 0xaa; 启动扇区以外部分输出DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00TIMES   4600    DB 0DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00TIMES   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汇编调试环境搭建相关推荐

  1. 汇编之调试环境搭建及调试步骤详解

    调试环境搭建 思路 学习一门语言,上手上机调试是非常重要的,它会带来一个感性的认知,所以学习汇编第一件事,推荐把开发环境搞起来. 安装 nasm: 程序中的汇编代码需要转译为处理器指令,在提交给处理器 ...

  2. 双机调试环境搭建 windbg + virtualkd

    双机调试环境搭建 1. 环境准备 2. 单独的windbg双机配置 2.1 设置GuestOS环境 2.2 设置HostOS环境 2.3 Windbg测试 3. 使用Virtualkd/Virtual ...

  3. auto.js id为参数滑动_【Autojs教程】02Autojs PC端开发调试环境搭建

    [Autojs教程]02-Autojs PC端开发调试环境搭建 写在前面 本篇教程算是保姆级教程了,希望以此能吸引更多感兴趣的同学学习Autojs,也希望大家能因此碰撞出更多的奇思妙想 关注微信公众号 ...

  4. mac 内核调试环境搭建

    操作系统安装 先从 app store 下载 下载完后安装程序在应用里 打开 vm 新建 双击从光盘或映像安装 安装 安装失败 用其它工具安装 还可以先在 windows 上的 VM 下先安装好再拷贝 ...

  5. uni-app 模拟机调试环境搭建

    前言 最近接手了一份使用 uni-app 进行开发的工作,今天才有时间正式开始,在这里记录一下使用 HBuilderX 进行 uni-app 开发的调试环境搭建过程. 下载安装 HBuilderX 进 ...

  6. Mikrotik路由器(routerOS)调试环境搭建

    routerOS 调试环境搭建 1 安装routerOS 1.1 下载routerOS镜像文件 略 1.2 安装 需要注意的是:选择硬盘类型为IDE,因为routerOS默认情况下未包含SCSI或SA ...

  7. eas java配置_EAS客户端调试环境搭建

    客户端调试环境搭建说明 适用场景:在现场跟踪问题或者在研发内部跟踪定位测试环境的问题时,开发人员需要快速搭建一个可供调试的环境以供分析问题,以下说明可供开发人员在需要时使用,注意该方式只支持客户端调试 ...

  8. Nacos 简介与 本地调试环境搭建

    目录 1.简介 2.Nacos架构 3.本地调试环境搭建 3.1 源码下载 3.3 单机启动 Nacos 3.4 集群方式启动:基于文件方式 4.Nacos源码模块介绍 5. 约定说明 1.简介 Na ...

  9. ffmpeg编译gb28181_RTSP/GB28181协议/海康SDK/Ehome协议视频上云网关EasyCVR视频平台在linux环境下ffmpeg源码单步调试环境搭建...

    目前TSINGSEE青犀视频研发的视频上云服务平台EasyCVR已经可集成海康EHome私有协议,并且在前文中我也跟大家讲过EHome协议的配置和调用流程,有兴趣的可以阅读一下:配置及协议介绍.Eho ...

最新文章

  1. 聊聊reactive streams的schedulers
  2. java 控件内布局_Java开发桌面程序学习(二)————fxml布局与控件学习
  3. 可靠性测试-故障模型库
  4. 连续子数组的最大和python_连续子数组的最大和
  5. lineNumber: 1; columnNumber: 1; 前言中不允许有内容
  6. mysql+查询会话sql_MySQL Processlist--查看会话执行过的SQL情况
  7. linux挂载时间3秒,linux基础学习(十一) 时间的同步 设备的挂载
  8. (网络收藏)WIKI
  9. ACM-ICPC 2018 南京赛区网络预赛 B The writing on the wall(暴力)
  10. 监控软件Zabbix安装使用
  11. ArcGIS裁剪栅格图像(图片)后,图…
  12. 贝叶斯网络之父Judea Pearl力荐、LeCun点赞,这篇长论文全面解读机器学习中的因果关系
  13. 接连倒闭失联的背后 传统健身房生意为什么突然就不行了?
  14. 云上PDF怎么删除页眉页脚_本科论文页眉与页脚怎么设置?
  15. 新版本微信分享sdk(1.8.3)踩坑实录
  16. 过宝塔php大马,分享宝塔网站防火墙使用帮助
  17. 腾讯云服务器地域与可用区
  18. 第二次作业:微信软件案例分析
  19. Win10夜间模式无法关闭解决方法
  20. 高考平行报志愿计算机录取规则,2020年高考平行志愿录取规则大全

热门文章

  1. java 坑_JAVA陷阱---三元表达式潜藏的坑
  2. php怎么重启,修改玩php.ini后如何重启php
  3. html背景看不见,html不显示图片-为什么在html中不显示背景图片 – 手机爱问
  4. js 通用表单提交1-onsubmit
  5. Python爬虫爬取网页数据并存储(一)
  6. SQL-截取字符串函数
  7. android 长时间充电,充电十分钟就能在畅玩N小时?没想到这样的手机居然真正存在!...
  8. python声明全局变量_python怎样声明全局变量
  9. android+网络下载资源,【已解决】Android中利用HttpClient等库实现网络文件下载
  10. 欧几里得几何(3)Gamma