第2天:汇编语言与Makefile

汇编语言指令

  • 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指令:
    1. ”MOV BYTE [678], 123“:移动8位二进制数到[678],[678]这个单元刚好能存下。
    2. "MOV WORD [678], 123":移动16位二进制数,123被解释成16位二进制数,高位填0,[678]这个单元存不下,只能存低位,高位存[679]单元。
    3. "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只能存储这么少信息,才需要内存的辅助。

posted @ 2014-02-26 00:32  吉吉的轨迹  阅读(436)  评论(0编辑  收藏  举报