汇编学习

Posted by 高庆东 on April 6, 2017

汇编语言

  • cpu有数据总线,控制总线,地址总线

  • Cpu通过总线与内存通信,(并行)

寄存器表示

寄存器表示

指令表示

指令表示

解释

Mov 功能

1将数据送入寄存器

2将寄存器中的内容送入另一个寄存器

3将内存单元中的内容送入寄存器 (段地址,偏移地址,cpu自动读取段地址)

##栈介绍 8086的栈顶指针为ss:sp 当栈里没有元素的时候指向的是(栈底—1),

先进后出。入栈后sp=sp+2,出栈后sp=sp-2.

每个地址存放一个字节,每个寄存器都是十六位的,所以每次栈操作都

是对两个地址进行的

(入栈与出栈。当出过头的时候回把其他地址的信息也推出来,当入过

头的时候会吧其他地址的信息覆盖掉。临时存放一些信息进去。)

5 inc 类似于c语言中++ (——)dec表示——

Loop :寄存器中存的是循环的次数(8086cpu中存循环次数的寄存器是cx)

6 [bx+idata],idata[bx]意义相同,等同于c语言中数组的定位方式

7使用loop循环时,如果有嵌套循环要考虑循环次数寄存器的值有没有被覆盖陷入死循环。用到变量值时可以使用栈。用栈实现暂时存储数据,解决嵌套循环问题先将循环次数寄存器的值放入栈中,执行到循环判断前出栈,

(所有涉及到数值增减的问题时都要考虑溢出问题)

8 div除法的意思。在8086中除数为8位时al中存商ah中存余数 除数为16位时ax中存商dx中存余数 db字节数据定义 dw字型数据定义 dd双字数据 db 3 dup(0,1,2)等价于 db 0,1,2,0,1,2,0,1,2 Jmp跳转到标号处,可以改变的IP的范围是-128到127 Jmp near s 近转移 改变IP范围是-32768到32767 Jmp 后可加内存地址,执行后跳转到内存中内容表示的ip或者cs:ip 有条件跳转指令jcxz改变ip范围是-128到127条件是判断cx寄存器的值是否为0 当cx不等于0时不跳转 Offset加标号 表示取标号处的偏移地址

9 ref 将堆栈中值赋给ip程序跳转reft 将堆栈中的值赋给ip cs

Call 跳转指令 表示跳转到标号处,将cs ip的值入栈,配合ref返回 可实现子程序调用

Mul 表示乘法,表示与ax寄存器中的值相乘结果存放在dx (高位) Ax(低位)中 And 与

10 cf 8086中表示借位或者进位nc表示没有进借位 cy表示又进借位 Of8086中表示溢出

Adc表示进位加法
cmp 运算只改变标志位的值不改变寄存器的值

Sbb表示借位减法、

11 8086标志寄存器为16位每一位的取值只能为0,1代表了标志寄存器的状态 比如有溢出时寄存器的值为1
Pushf表示对标志寄存器进行堆栈操作

12中断 iret 对cs ip 标志寄存器出栈操作 中断向量表的作用是找到中断程序 每种中断都是8086cpu确定好的 什么样的中断对应什么样的中断程序比如 除法溢出中断就是0号中断 标志寄存器的tf位时产生单步中断的标志位

13 int指令 首先取中断 将标志寄存器入栈 将csip入栈 将csip赋中断函数地址值 Int与iref配合 实现调用中断 再返回原程序

14端口 cpu可以读取三个位置的读写 寄存器 内存 端口 端口读写指令 in out 8086端口访问只能使用ax寄存器 Shl左移 shr 右移

15 标志寄存器的if位为中断标志位 当if为1时响应中断

16延时函数 首先将寄存器压栈 用cmp 比较 然后跳转

17 直接定址表 :建立一个存有结果的表 给出表中数据的偏移地址 函数执行时计算出 偏移地址 通过偏移地址查找表中的结果

8081cpu汇编学习

#代表是个数据 mov A #55H 将数据送进累加器A (A是特殊功能寄存器)。 没有#的话代表地址 8051通用寄存器有8个R0到R7 有四个寄存器区 每个寄存器区有8个寄存器 决定使用哪个区域的寄存器组是由另外两个特殊寄存器决定的

DPTR寄存器是16位的 唯一的16位寄存器

MOV A @R0 寄存器间接寻址寄存器中存放操作数的地址(在51中只有R0 R1 DPTR寄存器用与寄存器间接寻址 R0 R1用于内部ram DPTR用于外部ram)

MOV 内部传送 MOVX 外部传送 MOVC 针对程序存储器(程序存储器都是16位的)rom(查表指令)

SJMP 03H 表示PC+03 程序跳转到当前位置

交换指令 XCH A Rn XCHD 低半字节交换 SWAP A 实现累加器中高低字节交换

堆栈操作指令 PUSH (地址) POP(地址)(只能直接寻址的方式) SP为栈顶地址

ADD ADDC(进位加法) PSW寄存器的第一位为进位标志位 SUBB 减法里只有带借位的减法

MUL AB 高位存在B中 低位存在A中 乘法

DIV AB A中是被除数 B中是除数 A中存放商 B中存放余数

逻辑预算部影响psw寄存器的值 ANL 与运算 ORL或运算 XRL异或 本身与本身异或就是清零 CLR A 清零 CPL A 取反

移位指令 RL A 循环左移1位 RR A 循环右移1位 RLC A 循环左移1位但是第一位是寄存器中CY位

控制转移指令 LJMP AAAH 常转移指令(控制的是PC)AJMP addr11 只改变PC低11位地址 SJMP 03H 相对转移有正负之分 (-128到127)

散转移指令 JMP @A+DPTR