汇编入门
DB指令:"data byte"的缩写,意思是往文件里直接写入一字节的指令
RESB指令:"reserve byte"的缩写,如果写成RESB 10意思是我们预约了10个字节。
DD、DW、DB的区别
;符号的作用是注释,相当于c++的//符号,DB指令的功能也变得更广,可以直接编写字符串。$符号是一个变量,可以告诉我们这一行现在的字符数。
在启动程序中,我们必须要保证第510字节(即第0x1fe)开始的地方是0x55 0xaa,使用$符号的话就可以直接计算出需要多少个字节来放0x00。
上述源代码中的一些专业的表示的含义如下
ORG指令:这个指令告诉编译器,在开始执行的时候,把这些机器语言指令装载到内存中的哪个地址。有了这个指令的话,美元符$的含义也会有一些变化,它将代表将要读入的内存地址。
ORG指令来源于英文“origin”,意思是“源头、起点”。它会告诉编译器,程序要从指定的这个地址开始,也就是把程序装载到内存中的指定地址。这里指定地址是0x7c00, 对于很多人来讲0x7C00这个地址是很神秘的,不知道这是干什么的。但是对于了解过x86平台下BIOS启动过程的人,对这个地址再熟悉不过了。 BIOS就是将MBR读入0x7C00地址 ,然后进行后续的引导的。操作系统或是bootloader开发者必须假设 他们的汇编代码被加载并从0x7C00处开始执行。
entry指令:这个指令用于指定JMP指令的跳转目的地等。
MOV指令:这个指令的功能很简单,就是一个赋值的功能,虽然简单,但是MOV指令在不同的场景下有不同的意义,掌握它对于掌握汇编和操作系统开发至关重要。
在CPU中有一种名为寄存器的电路,相当于机器语言中的变量。具有代表性的寄存器有以下8个,简单在这里说明一下:
- AX:accumulator,累加寄存器
- CX:counter,计数寄存器
- DX:data,数据寄存器
- BX:base,基址寄存器
- SP:stack pointer,栈指针寄存器
- BP:base pointer,基址指针寄存器
- SI:source index,源变址寄存器
- DI:destination index,目的变址寄存器
这些寄存器都是16位的寄存器,可以存储16位的二进制数。
这8个寄存器全部合起来只有16个字节。换句话说,就算我们把这8个寄存器都用上,CPU也只能存储区区16个字节。
另一方面,CPU中还有8个8位寄存器。
- AL:累加寄存器低位
- CL:计数寄存器低位
- D