简介
汇编语言实际上就是将0101这种2进制设计成单词字母这种便于阅读的形式来编程,在实际编译完成之后生成的可执行代码还是将汇编指令再重新转化成机器指令的0101这种2进制形式。
问:汇编是如何转变成机器指令?
答:通过编译器将写好的汇编指令进行编译后生成机器指令。
1. 寄存器的概念
简单来说就是CPU中可以存储数据的器件,1个CPU可以有多个寄存器,我们一般可以给寄存器取一个别名,比如AX、BX。
2. 汇编语言的组成
1、汇编指令(机器码的助记符)每一种CPU都有自己的汇编指令集
2、伪指令(由编译器执行)
3、其他符号(由编译器识别)
汇编语言的核心是汇编指令,它决定了汇编语言的特性。
1. 8086CPU
8086有20位地址总线,可传输20位地址,寻址能力为1M,但是因为内部为16位总线结构,因此需要采用段地址加偏移地址的形式来完成
1.1. 8086CPU寄存器的介绍
8086CPU有14个寄存器,他们分别是:
AX、BX、CX、DX、
SI、DI、SP、BP、IP、
CS、SS、DS、ES、PSW。
寄存器位数为16位。
AX、BX、CX、DX通常用来存放一般性的数据被称为通用寄存器。
由于上一代的8086CPU寄存器都是8位的,为了兼容,这4个寄存器都可分为2个独立的8位寄存器使用,如:AX可分为AH和AL。
CS、SS、DS、ES是提供段地址的段寄存器,分别为指令地址、堆栈地址、数据地址、备用地址。
SP是栈顶的指针,任意时刻SS:SP指向暂定元素。
CS和IP是8086CPU中最关键的寄存器,CPU当前要读取执行的代码内容就是根据CS的段地址加地址偏移IP来决定的。
由于mov指令是无法修改CS、IP的内容,我们可通过8086提供的转移指令jmp 段地址:偏移地址的形式来间接修改CS和IP
1.2. 汇编指令集
汇编指令集不区分大小写
mov ax,18 ;注释:将18送入ax
mov ah,78 ;注释:将78送入ah
add ax,08 ;注释:将ax内的值加8
mov ax,bx ;注释:将bx内数据送入ax
add ax,bx ;注释:将ax、bx数据相加,结果保存在ax
sub 注释:为减法,用法参考mov
1.3. Debug的使用
可以直接从cmd输入debug进入debug工具。debug的命令如下:
-R:查看改变CPU寄存器的内容
-D:查看内存中的内容
-E:改写内存中的内容
-U:将内存中的机器指令翻译成汇编指令
-T:执行一条机器指令
-A:以汇编的指令格式在内存中写入一条机器指令
1.4. 数据结构
1.4.1. 栈
指令集
push: 入栈
pop : 出栈