学习,了解汇编语言的工作机制和编写流程,有助于我们对程序的执行有一个比较清晰的认识。
主要的过程就是寻找能够存放数据的内存地址,将数据存放至这个地址之上,取出内存中数据至寄存器,寄存器经过计算后写回内存。
需要清楚的是,调用者知道被调用的函数有几个参数,调用者分配内存空间,而只有被调用的函数知道其内部有几个局部变量,函数分配内存空间。
还需要清楚的是,局部变量的入栈顺序依次为由高到低,而函数参数在内存中的分配(第一个参数总是在最低地址处),即由低至高分配,这样做的好处是,当参数为变长参数时,其栈指针总能指向函数的第一个参数。
以下面的代码为例,我们写出相应的汇编语句,注意,在这里我们假设每一条汇编指令的大小均为4个字节。最终,根据指令集,将汇编语句翻译成计算机能够识别的机器码。
int main() { int i = 4; foo(i, &i); return 0; }
void foo(int bar, int *baz) { char snink[4]; short * why; why = (short *) (snink + 2); *why = 50; }
SP: STACK POINTER
SP = SP - 4; // 内存是 由高向低进行扩展的,故需要减去4,来存放int 4,(设定能够存放4 的内存位置)
M[SP] = 4; // 将其内存位置赋值
SP = SP - 8; // i, &i, 一共8个字节
R1 = M[SP + 8]; // 取出i 值
R2 = SP + 8; // 取出i 地址
M[SP] = R1; // 给相应的内存赋值
M[SP + 4] = R2;
CALL <foo>;
SP = SP + 8; // 栈指针返回
RV = 0; // 返回0
<foo> : SP = SP - 8; // 两个局部变量
R1 = SP + 6; // char char char char 4bytes short * 4bytes snink + 2 = short * + 2 个char 的位置(6)
M[SP] = R1; // why 的地址改变
R1 = M[SP]; // 取地址
M[R1] = .2 50; // 解引用 .2表示2个字节(short), 相应的地址 赋相应的值
SP = SP + 8; // 回收局部变量
RET; // 返回
附:一个递归函数的递归写法:
int fact(int a) { if (n == 0) return 1; return n * fact(n - 1); }
SP 的位置为当前函数在栈中的位置,取得参数故需向高地址寻找,(总能从第一个参数开始寻找)
<fact>:
R1 = M[SP + 4];
BNE R1,0, PC + 12; // 12 跳跃三条汇编指令(每条汇编指令假设为4个字节)
RV = 1;
RET;
R1 = M[SP + 4];
R1 = R1 - 1;
SP = SP - 4;
M[SP] = R1;
CALL <fact>; // 使得SP向下延伸4个字节,将这个指令存储至saved PC中
SP = SP + 4;
R1 = M[SP + 4];
RV = RV * R1;
RET;
相关推荐
【基于汇编语言的面向对象编程】是...综上所述,基于汇编语言的面向对象编程结合了两种编程范式的优点,提供了更灵活和高效的编程模型,尤其在需要高度定制和优化的系统中,这种编程方式能够帮助开发者更好地实现目标。
在计算机编程领域,C语言和汇编语言是两种截然不同的编程范式。C语言是一种高级编程语言,具有丰富的抽象和简洁的语法,适合编写复杂的系统软件和应用程序。而汇编语言则是与机器码直接对应的低级语言,它提供对硬件...
让我们深入探讨这三大类计算机语言:机器语言、汇编语言以及高级语言。 **机器语言**是计算机能够直接理解和执行的语言,由二进制代码(0和1)组成。这种语言与硬件紧密相连,每个指令都对应着计算机内部特定的电路...
在计算机编程领域,C语言和汇编语言是两种截然不同的编程范式,但它们各自拥有独特的优点。C语言是一种高级编程语言,以其强大的抽象能力和跨平台性而著名,而汇编语言则接近机器码,提供了对硬件的直接控制。在特定...
这种编程范式强调将数据和操作数据的方法封装在一起,形成对象,增强了代码的复用性和模块化。C++和Java是典型的面向对象语言,而Python和Ruby等语言则在支持OOP的同时,提供了函数式和命令式编程等多种风格。 现代...
通过深入学习《IBM大型机汇编语言》,开发者不仅能掌握汇编语言的基本语法和技巧,还能了解IBM大型机的独特特性和编程范式,为开发高效、可靠的大型机应用打下坚实基础。这份资料将引导读者逐步探索这个专业领域的...
其语法简洁明了,采用汉字命名,易于理解,支持多种编程范式,如面向过程、面向对象和组件编程。易语言提供了丰富的内置函数和库,使得开发者能快速实现各种功能,特别适合初学者和快速开发应用。 三、汇编转易语言...
示例代码可以帮助初学者了解基本的汇编语言编程范式,例如数据定义、函数调用、循环和条件判断等。 总的来说,ASM汇编语言编译器是学习和开发8088汇编程序的重要工具,通过深入学习和实践,开发者可以掌握计算机...
同时,理解汇编语言的指令集和编程范式也是必不可少的。通过学习和实践,不仅可以掌握点阵显示技术,还能进一步提升对51单片机及汇编语言的理解。 总结来说,基于51单片机的点阵显示是一个涉及硬件接口、数据传输、...
它支持多种编程范式,包括过程化编程、模块化编程等,并允许直接操作内存和硬件,这在嵌入式系统和系统软件开发中非常有用。 在给定的文件内容中,我们可以看到汇编语言与C语言的一些具体例子。例如,文件中提到了...
在编程世界中,汇编语言和C语言是两种截然不同的编程范式,但它们之间可以通过特定的方法相互交互。汇编语言是一种低级语言,直接对应于机器指令,提供了对硬件资源的直接控制,而C语言则是一种中级语言,提供了一种...
此外,因为混合编程往往涉及不同编程范式的融合,所以还需要考虑语言之间在调用、数据传递等方面的协同工作。 总结而言,汇编语言与C语言的混合程序设计技术,是一种在软件开发中发挥各自语言优势的高级技术。通过...
Java和汇编语言是两种截然不同的编程范式,它们在计算机科学中占据了重要的位置。Java是一种高级编程语言,由Sun Microsystems(现为Oracle Corporation)于1995年推出,设计目标是“一次编写,到处运行”。它以其...
C语言则是一种中级语言,它提供了面向过程的编程范式,同时保持了足够的底层控制。TURBOC.20T和TURBOC30是Borland公司发布的Turbo C编译器的不同版本。Turbo C以其快速编译和小巧的体积著称,是80年代和90年代初许多...
在计算机编程中,汇编语言和C语言是两种不同的编程范式。汇编语言是一种低级编程语言,直接对应机器指令,对硬件控制更精细,而C语言是一种高级语言,抽象程度更高,易于编写和理解。然而,在某些情况下,如需要优化...
模块化开发是一种编程范式,强调将程序分解为多个小的、可独立编译的模块,以提高代码的可维护性和可复用性。书中讲解了如何通过链接和定位实现模块间的连接,以及如何定义和使用程序段(segment),从而实现模块化...
2. **汇编语言**:一种低级语言,比机器语言更易于阅读和编写,每条指令对应一条机器语言指令。 3. **高级语言**:如C、Java、Python等,它们更接近自然语言,提高了程序员的工作效率,降低了错误率。 ### 二、编程...
在C++编程中,编程范式是指编程时遵循的风格和模式,它影响代码的组织、可读性和可维护性。本章主要介绍了C++编程的三个方面:工程组织结构、代码编译方法以及编程风格指南。 2.1 C++工程组织结构 C++工程的组织...