x86汇编环境搭建并运行第一个程序
2021/5/24 22:26:42
本文主要是介绍x86汇编环境搭建并运行第一个程序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
- x86的起点是intel 8086处理器
- 8086是16位处理器
- 8个通用寄存器AX,BX,CX,DX,SI,DI,BP,SP,都是16位
- 一个字节八位
- AX可以拆分两个寄存器,高八位AH,低八位AL
- AX=AH,AL BX=BH,BL CX=CH,CL DX=DH,DL
- 8086有20根地址线,寻址范围2的20次方,等于1MB,转成16进制为0x00000-0xfffff
- 0x00000-0x9ffff 640KB 分配给内存,0xaffff-0xBFFFF 128KB分配给显卡(文字,图像模式),0xCFFFF-0xFFFFF 256KB分配给BIOS
- CPU寻址范围内的地址分配给其他设备
- 0x00000-0x9ffff 640KB 分配给内存内的,0x07c00-ox07DFF 512B为BootLoader
- 0xaffff-0xBFFFF 128KB分配给显卡(文字,图像模式)内的, 0xA0000-0xAFFFF 64KB EGA/VGA/XGA/XVGA彩色模式,0xb0000-0xb7fff 32KB 黑白文本,0xB80000-0xBffff 32KB 为彩色文本,这些地址映射为显卡显存,写入相当于写入显存
- cs代码段寄存器,ds数据段寄存器,
- 指令寄存器IP,CS段寄存器+IP偏移寄存器
- 段寄存器0xFFFF,偏移地址0x0000-0xFFFF,先把段寄存器左移四位,再加上16位偏移地址
- mov [0x00],'A' === mov [0x00],0x41 === mov [0x00],41h
0xFFFF 左移4 0xFFFF0,加上0x0000-0xFFFF (0xFFFF << 4) + 0xFFFF
安装相应的软件
- 安装Vscode编辑器,并安装打开二进制文件的插件
Hex editer
- 安装Nasm,nasm-2.15.05-installer-x64.exe,记得加入环境变量
- 安装virtualbox,VirtualBox-6.1.22-144080-Win.exe
- FixVhdw 把文件写入硬盘
- WinHex 读取写入裸盘,把程序写入U盘
软件打包下载地址,链接: https://pan.baidu.com/s/1YN7mB5uPuIzcacS-Q-YCmg 提取码: 5ua2
开发一段测试代码
第一个汇编程序start.asm
mov ax, 0b800h # 显卡彩色文字模式起始位 mov ds,ax mov byte [0x00],'2' mov byte [0x02],'0' mov byte [0x04],'2' mov byte [0x06],'1' mov byte [0x08],',' mov byte [0x0a],'H' mov byte [0x0c],'a' mov byte [0x0e],'p' mov byte [0x10],'p' mov byte [0x12],'y' mov byte [0x14],' ' mov byte [0x16],'N' mov byte [0x18],'i' mov byte [0x1a],'u' mov byte [0x1c],' ' mov byte [0x1e],'Y' mov byte [0x20],'e' mov byte [0x22],'a' mov byte [0x24],'r' mov byte [0x26],'!' jmp $ # times 510-($-$$) db 0 # 补0,$$起始位置,$表示jmp所在位置,$-$$从开头到jmp一共多少个字节,512减去两个标志位55 aa得到510,510减去($-$$)中间填充0 db 0x55,0xaa # MBR分区最后的标志位
使用Nasm编译为二进制文件,生成start.bin
nasm -f bin start.asm -o start.bin
然后新建other类型dos版本的虚拟机
- 硬盘类型vhd
- 固定硬盘16MB
- 其余选项默认
使用FixVhdw把程序写入硬盘
- 选择虚拟硬盘Vhd文件
- 数据文件选择1为start.bin文件
- 起始LBA扇区号为0
- 写入
软件写入U盘真机运行
- u盘使用fet32格式
- 打开WinHex,然后tool-> open disk -> 选择U盘(physical storages devices,不要选择logical)
- file-> open file -> 打开start.bin文件,
- 在start.bin标签页,选择所有的0之前的数据,不是全部数据,点击Copy All小图标
- 在u盘标签页,点击write clipboard小图标,写入最上面的数据,后面的数据不能破坏!
- 在u盘标签页,点击save小图标
让显卡显示内容
这篇关于x86汇编环境搭建并运行第一个程序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南