文章目录
- 前言
- 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以外的程序





















