文章目录
- 前言
- 1.mov
- 2.内存分段
- 3.调试
- 5.注释
- 6.标号
- 7.add sub
- 8.inc dec自增,自减
- 9.adc sbb
- 10 乘法栈
- 11 栈寄存器push pop
- 12 jz jnz
- 13 section 16字节对齐
- 14 CALL
- 15 逻辑运算
- 16 启动MBR以外的程序
- 17
- 4.
前言
视频教程
x86汇编代码学习-计算机工作原理1
1.mov
因为ah是8bit,所以会传送一个字节的数据到ah寄存器中
ax 是 16bit,所以会传送两个字节的数据到它那里
综上,就是会自动判断寄存器的大小,来移动数据。
mov ax,bx是可以的,但是mov cx,dh就不可以,必须保持左右两边宽度一样
所以总共有9个mov操作
mov word [0x01], 0xb80
加了[]为内存单元,不加的时候是立即数
2.内存分段
8086是16位的计算机,但是它的数据总线有20位,所以有1M的寻址
如果每一段位16Byte,那么1M就有65536个16Byte
如果每一段为64kb,那么就有16个64KB
下面可以看到一个物理地址,根据分段的不同,有多个逻辑地址,这也很好理解,因为分段不一样
根据实际运行来给段地址
3.调试
Bochs官网:http://bochs.sourceforge.net/
Bochs下载:https://sourceforge.net/projects/bochs/files/bochs/2.6.11/
Bochs命令:http://bochs.sourceforge.net/cgi-bin/topper.pl?name=New+Bochs+Documentation&url=http://bochs.sourceforge.net/doc/docbook/user/index.html
然后点击disk Boot,出现下面
可以通过load来加载
运行,如果运行失败把里面的lock文件删除了重新来
e05b是bios程序的入口
mov ax, 0x7c00
mov ds, ax
mov bx, 0x353637
mov byte [0xf1], 'h'
mov byte [0xf2], 0x3839
jmp $
times 510-($-$$) db 0
db 0x55,0xaa
编译
nasm -f bin .\mov2.asm -o .\mov2.bin
5.注释
6.标号
7.add sub
结果保存在第一个
s 200
表示循环200次
8.inc dec自增,自减
32位加法
9.adc sbb
10 乘法栈
64位寄存器,但是关注后16bit
11 栈寄存器push pop
12 jz jnz
13 section 16字节对齐
14 CALL
15 逻辑运算
16 启动MBR以外的程序