文章目录
- 前言
- 1.CPU架构
- 2.8086寄存器
- 3. 指令流水线
- 4.内存模型
- 5.总线
- 6.硬盘
- 7 计算机启动过程BIOS
- 8.BootLoader
- 9.地址映射
- 10.为什么boot loader要放在0x7c00这个位置?
- 11 显卡是如何显示的
- 12.汇编指令
- 1.环境搭建
 
- 12 程序
- 13 x86 汇编指令介绍
前言
x86汇编
详解x86汇编
1.CPU架构


 
 
 
 
 
 
 
 
2.8086寄存器

 
 
 
32位进行了简单的继承
 

 
 
 
 
3. 指令流水线

 。
4.内存模型

 
 
 
 
 
 
 
 
 
 
 
5.总线

 
 
 
 
 
 
6.硬盘

 
 
 
 
 
 
 
7 计算机启动过程BIOS
第一条指令在哪里呢
 主板刷BIOS


 
8.BootLoader

 
9.地址映射
8086是16位
1MB
 
 地址分配
 
10.为什么boot loader要放在0x7c00这个位置?

这主要是历史遗留问题,5150支持32KB寻址
 
 
 然后从rom里面读取指令开始执行

 
 
 
 找到后加载到内存里面
 
 
 
 所以放在内存最后面,用完就释放。
 
 
 
11 显卡是如何显示的

 
 要让显示器显示文字,就要把内容写到现存里面去,现存很大,但是系统分配的却很少地址空间
 
 通过映射,来写显卡内存
 
显卡也有自己的汇编指令,这些指令就可以完成切换映射地址空间的操作
 
 
 
 除了显示本身外,还有下面一个属性字节,所以需要两个字节,所以最后的代码是两个字节

12.汇编指令
1.环境搭建
86汇编
 8086汇编语言精讲
NASM编译器之下载安装使用
Nasm下载
VS Code:https://code.visualstudio.com/
 Nasm:https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/
 VBox:https://www.virtualbox.org/
关软件已全部上传云盘,链接: https://pan.baidu.com/s/1YN7mB5uPuIzcacS-Q-YCmg 提取码: 5ua2
安装后可以在vscode的terminal中能识别nasm,如果识别不了,设置nasm的环境PATH,重启vscode后就可以了

代码如下
mov ax,0b800h
mov ds,axmov byte [0x00], '2'
mov byte [0x02], '0'
mov byte [0x04], '2'
mov byte [0x06], '4'
mov byte [0x08], 'h'
mov byte [0x10], 'e'
mov byte [0x12], 'l'
mov byte [0x14], 'l'
mov byte [0x16], 'o'
mov byte [0x18], '0'
mov byte [0x1a], '2'
mov byte [0x00], '4'jmp $times 510-($-$$) db 0
db 0x55,0xaa
如下图编译
 
 打开ORacle VM VirtualBox
 
 
 
 一步步发现没有vhd的选项,结果最后发现了
 
 
 再次返回发现成功了,当然还要设置第一和第二选项,一定要选择提前分配
 
接着打开vhd writer,下面是因为磁盘没有选择提前分配,重新创建磁盘,选择提前分配后
 
 选择提前分配后,终于可以了
 
 打开虚拟机,注意一定要 虚拟化开启
 
 如何开启虚拟化,重启电脑,按F2,将Disabled 改为Enabled
 

12 程序
8086是16位处理器,但是数据总线却有20位
 
 
 

 
mv ds,ax
 指定数据段基准地址
 
800H是因为这段地址是显卡的显存地址
 
 
 
 下面单中写法是一样的
 
;开辟200字节内存空间
times 200 db 0;开辟200字节内存空间
db 200 dup (0)MBR 512字节
 $ 代表程序的起始位置, 代表程序的起始位置, 代表程序的起始位置,代表jmp所在的位置
 − - −$=从开头到jmp的位置一共有多少个字节
 下面这段代码是为了在最末尾添加0x55aa
 
 
13 x86 汇编指令介绍

 红色的表示不能传递
 
 
 