汇编语言指令
- ORG:origin,指定程序从某个地址开始,即把程序装载到内存的某个地址。 如:ORG 0x7c00,0x7c00作为是英特尔指定的。
- JMP:jump,跳转指令。
- entry, msg, loop:自定义标签,随便是什么都可以,代表了某个地址,仅仅代表单纯的数字,通过ORG计算出来的,用于指定JMP指令跳转目的地。
- MOV:move,赋值。如:MOV AX, 0,表示“AX = 0”。 值得注意的是,例如MOV SS, AX,SS被赋值后,AX原来的值还在,并没有变空。而且,MOV源数据和目的数据的位数必须相同。
- []:表示内存地址,但只有BX、BP、SI、DI可以,其他寄存器不行,因为CPU没有处理这种指令的电路,也就是没有表示这种处理的机器语言,又是英特尔的“杰作”。
- CMP:常与JE、JNE连用,变成if语句。
- INT:中断指令,目前可看作函数调用。如:INT 0x10,调用16号函数。
- HLT:halt,让CPU进入状态,只要按下键盘、移动鼠标等,CPU就会醒过来。
- 汇编语言出现的数字,有0x前缀的就是十六进制,无前缀就是十进制。
- 关于MOV指令:
- ”MOV BYTE [678], 123“:移动8位二进制数到[678],[678]这个单元刚好能存下。
- "MOV WORD [678], 123":移动16位二进制数,123被解释成16位二进制数,高位填0,[678]这个单元存不下,只能存低位,高位存[679]单元。
- "MOV DWORD [678], 123":移动32位二进制数,123被解释成32位二进制数,高位填0,存不下像高位拓展存储。
寄存器
- AX,CX,DX,BX,SP,BP,SI,DI都是CPU的8个16位寄存器(各寄存器意义可参考P31),因此可以存储16位二进制数。它们不管使用哪个都可以进行同样的运算,只是如果用AX进行运算的话,程序可以变得简洁。例如:“ADD CX,0x1234”是一个4字节命令,而“ADD AX,0x1234”是一个3字节的命令。
- AX,CX等寄存器的X是extend的意思,因为原来CPU的寄存器都是8位的。用齐这8个寄存器,总共只可以存储16个字节。
- 当然,AX,CX,DX,BX分为AL,AH、CH,CL等。但是SP,BP,SI,DI没有这样分哦! 所以你想使用这4个寄存器分开高位和低位处理的时候,只能“MOV AX, SI”,使用AH、AL来取值。没办法,这又是英特尔规定的。
- 现在的CPU大多数都是32位的,因此在这些寄存器前面加上E就成为32位寄存器了,也是extend的意思哈。如:EAX,EBX.....。32位CPU也只能存储32个字节。
- 段寄存器:16位寄存器,明天讲解。
内存
就是因为CPU只能存储这么少信息,才需要内存的辅助。