汇编是低级语言,可以用来直接控制硬件,所以不同于高级语言,因为汇编的代码和机器码有关,所以不同的机器使用不同的汇编码。
汇编因为是在二进制上面发展过来的,所以比二进制更加方便,举个栗子:
一个hello world程序(别问我Hello Word是啥,谢谢~)用二进制语言写的话需要花50行的0和1,相比汇编语言的16行,差的太多太多~
16位汇编采用实模式
(可以随意对内存编程的模式,也就是说,如果存放着系统的内存是允许被修改的,一经修改系统将会发生故障)
32位汇编采用的是保护模式(拥有权限级别,1级2级3级 根据等级的不同,访问的内存单元也不同)
16位寻址能力为2的16次方 从00000-FFFFF 就是内存大小
接下来我们介绍几个常用的寄存器
AX,BX,CX,DX
Ax:累加器
BX:存放一个内存单元的偏移地址
Cx :循环的计数器,当cx=0时,跳出循环执行下一条指令
Dx: 存放着数据
Cs:存放着当前执行的指令的段地址
IP:存放着要执行的指令的偏移地址 (和CS是一组)
Cs*16+IP =要执行的指令的实际地址
(乘16是因为要将地址转变为基地址,加上了偏移地址后就是实际地址)
当10000成为基地址,加载内存后,前面的内存单元和下一个内存单元之间,偏移量会变
这时候我们只需要计算偏移量,也就是0 1 2 3这些小的数字,加起来后我们就可以轻松的获取到程序的内存(就是执行的代码)
接下来我们讲一个特殊的东西,在汇编里面,有一种叫“栈”的奇特结构
这种结构的特性是,最先进去的内存最后出来,最后进去的内存最先出来。
栈遵循先进后出的原则
然后我们介绍两个跟栈有关的寄存器SS SP
Ss存放着栈顶的段地址
Sp存放着栈的偏移地址
无论何时 ss:sp指向栈顶
栈由于其特殊的结构,经常用来做数据交换。
补充:
Ds cs ss 这些寄存器是不能通过直接赋予数值来改变寄存器的地址,只能通过ax,bx等寄存器的中转去改变!
没有真正无用的事情,永远保持好心态去做事