Tag Archives: 汇编

函数调用原理–局部变量篇

1、参考链接
1.1、函数调用原理–参数篇

2、函数需要解决的三大问题:参数、返回值、局部变量
2.1、参数在函数执行前压栈,执行结束后恢复内平栈或外平栈的方式恢复栈顶位置释放空间;
2.2、返回值一般直接存储在寄存器ax中,函数运行结束后在ax中读取
2.3、函数内部的局部变量也是通过栈来存储

3、函数局部变量面临的几个问题
3.1、专用空间,不被其他数据覆盖;
3.2、对栈进行操作,结束后需要对栈进行恢复操作;
3.3、临时空间使用结束后及时释放

4、基本实现思路
4.1、保存栈顶位置(sp);
4.2、将栈顶位置往前移动一段位置做为局部变量专有空间;
4.3、通过原栈顶+偏移位置(bp寄存器)来访问专用的临时空间;
4.4、结束后恢复原来栈顶位置;
4.5、考虑到函数的嵌套调用,保护和恢复bp同样重要!

5.0、汇编代码实现[……]

继续阅读

函数调用原理–参数篇

1、汇编模拟函数调用的基本过程:

1
2
3
4
5
6
7
8
9
assume cs:code, ds:data, ss:stack
 
stack segment   
    db 20h dup(1)
stack ends    
 
data segment    
    db 20h dup(2)
dat[......]<p class="read-more"><a href="https://www.yusian.com/blog/assembler/2018/10/24/1739131283.html">继续阅读</a></p>

汇编简单实现两个数值的交换

1
2
3
4
5
6
7
8
assume ss:stack, ds:data, cs:code
;堆栈段
stack segment
    db 20 dup(1);初始化20个字节空间
stack ends
;数据段
data segment
    db 20 dup(2);初始化20个字节空间[......]<p class="read-more"><a href="https://www.yusian.com/blog/assembler/2018/10/23/2308131274.html">继续阅读</a></p>

第一个汇编程序Hello World!(Hello Assembler!)

1、看图说话

2、代码

1
2
3
4
5
6
7
8
9
assume cs:code ,ds:data
;数据段
data segment
    db 'Hello Assembler!$'    
data ends
;代码段
code segment
start:
    ;加载数据到ds[......]<p class="read-more"><a href="https://www.yusian.com/blog/assembler/2018/10/23/2134301270.html">继续阅读</a></p>