什么是汇编语言?(简要介绍)

汇编是低级语言,可以用来直接控制硬件,所以不同于高级语言,因为汇编的代码和机器码有关,所以不同的机器使用不同的汇编码。

汇编因为是在二进制上面发展过来的,所以比二进制更加方便,举个栗子:

 一个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等寄存器的中转去改变!

 

posted @ 2018-10-27 14:00  北极边界安全团队  阅读(4171)  评论(0编辑  收藏  举报