x86汇编环境搭建并运行第一个程序

2021/5/24 22:26:42

本文主要是介绍x86汇编环境搭建并运行第一个程序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言

  1. x86的起点是intel 8086处理器
  2. 8086是16位处理器
  3. 8个通用寄存器AX,BX,CX,DX,SI,DI,BP,SP,都是16位
  4. 一个字节八位
  5. AX可以拆分两个寄存器,高八位AH,低八位AL
  6. AX=AH,AL BX=BH,BL CX=CH,CL DX=DH,DL
  7. 8086有20根地址线,寻址范围2的20次方,等于1MB,转成16进制为0x00000-0xfffff
  8. 0x00000-0x9ffff 640KB 分配给内存,0xaffff-0xBFFFF 128KB分配给显卡(文字,图像模式),0xCFFFF-0xFFFFF 256KB分配给BIOS
  9. CPU寻址范围内的地址分配给其他设备
  10. 0x00000-0x9ffff 640KB 分配给内存内的,0x07c00-ox07DFF 512B为BootLoader
  11. 0xaffff-0xBFFFF 128KB分配给显卡(文字,图像模式)内的, 0xA0000-0xAFFFF 64KB EGA/VGA/XGA/XVGA彩色模式,0xb0000-0xb7fff 32KB 黑白文本,0xB80000-0xBffff 32KB 为彩色文本,这些地址映射为显卡显存,写入相当于写入显存
  12. cs代码段寄存器,ds数据段寄存器,
  13. 指令寄存器IP,CS段寄存器+IP偏移寄存器
  14. 段寄存器0xFFFF,偏移地址0x0000-0xFFFF,先把段寄存器左移四位,再加上16位偏移地址
  15. mov [0x00],'A' === mov [0x00],0x41 === mov [0x00],41h

image

0xFFFF 左移4 0xFFFF0,加上0x0000-0xFFFF
(0xFFFF << 4) + 0xFFFF

安装相应的软件

  1. 安装Vscode编辑器,并安装打开二进制文件的插件Hex editer
  2. 安装Nasm,nasm-2.15.05-installer-x64.exe,记得加入环境变量
  3. 安装virtualbox,VirtualBox-6.1.22-144080-Win.exe
  4. FixVhdw 把文件写入硬盘
  5. 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版本的虚拟机

  1. 硬盘类型vhd
  2. 固定硬盘16MB
  3. 其余选项默认

使用FixVhdw把程序写入硬盘

  1. 选择虚拟硬盘Vhd文件
  2. 数据文件选择1为start.bin文件
  3. 起始LBA扇区号为0
  4. 写入

软件写入U盘真机运行

  1. u盘使用fet32格式
  2. 打开WinHex,然后tool-> open disk -> 选择U盘(physical storages devices,不要选择logical)
  3. file-> open file -> 打开start.bin文件,
  4. 在start.bin标签页,选择所有的0之前的数据,不是全部数据,点击Copy All小图标
  5. 在u盘标签页,点击write clipboard小图标,写入最上面的数据,后面的数据不能破坏!
  6. 在u盘标签页,点击save小图标

让显卡显示内容



这篇关于x86汇编环境搭建并运行第一个程序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程