汇编 之call介绍

Call自动将下一条指令入栈   没有ret这条指令

Retn , retf  弹出栈  

Retn + imm  表示平栈大小

 

Call 相当于  当前位置入栈  跳转子程序

Mov ax, $ + 6  ;$表示当前1p

Push ax

Jmp PRINTF

PRINTF:

功能

 

ret相当于  取栈顶入栈位置 跳转入栈位置  释放栈

Mov bx,sp

Jmp word ptr ss: [bx]

;释放栈

Add sp ,2

 

c调用约定

Mov ax,3  最后一个参数先入栈

Push ax

Mov ax,2

Push ax

Call Add

 

Add:   ;ax返回值

Push bp

Mov bp ,sp

Mov ax,[bp+4]

Add ax,[bp+6]

Pop bp

Retn

 

 

栈寄存器bp的作用算局部变量的位置        00  00  00

函数标准写法

1. 保存环境   push bp

2. 保存栈底     mov bp,sp

3. 申请局部变量空间   sub sp , 4     抬栈大小就是变量的大小

4. 保存寄存器环境      push ax  可以有可以无

5. 恢复寄存器环境   pop ax

6. 释放局部变量空间   add sp +4

7. 恢复环境   pop bp

8. 返回   retn

 

00      00      00     00    00     00     00  00     00 00

变量1  变量2   栈底   bp     程序位置  ip(段内)      参数1     参数2

 

00      00   00   00    00  00   00  00   00 00   00 00

变量1  变量2    栈底   bp     程序位置   ip(段间)  参数1    参数2

 

 

 

 

 

中断指令INT  中断需要 iret表示中断返回

中断表不能传参,所以只能寄存器传参

 

Int 10   bios 检测硬件

Int 21  系统

INT i8

中断调用指令:产生i8号中断

IRET

中断返回指令:实现中断返回

INTO

溢出中断指令:

若溢出标志OF=1,产生4号中断

否则顺序执行

 

Int 建了一个表 通过下标寻址来调用函数指针来实现对应的功能,如果找不到系统直接崩溃

 

Debug调试器调试  在程序中加int3中断  汇编代码  cc 随时定位

g直接到你想停的位置,快速定位   e  int 3的位置  改代码 90  可以做到快速定位

 

Not 什么都不干    汇编代码 90

可以对齐    解决花指令

 

用于任意设置进位标志

CLC  复位进位标志:CF←0

STC  置位进位标志:CF←1

CMC  求反进位标志:CF←~CF

 

串操作指令中,需要使用

CLD  复位方向标志:DF←0

STD  置位方向标志:DF←1

 

在编写中断服务程序时,需要控制可屏蔽中断的允许和禁止

CLI  复位中断标志:IF←0

STI  置位中断标志:IF←1

 

LOCK 封锁总线 用于线程同步   ;原子操作

只能锁一条指令   执行指令后自动解锁

HLT   进入暂停状态   not 消耗指令  hlt什么都不干

 

交权指令 ESC  浮点协处理器8087指令是与8086的整数指令组合在一起的,当8086发现是一条浮点指令时,就利用ESC指令将浮点指令交给8087执行

posted @ 2020-09-05 16:46  特权E5  阅读(940)  评论(0编辑  收藏  举报