来自于《Intel汇编语言程序设计》(第四版)的第八章。
让我们先来看看值传递,值传递相对简单,看以下代码:
.data
myData WORD 1000h ; this never changes
.code
main PROC
INVOKE Sub1, myData
exit
main ENDP
Sub1 PROC someData:WORD
mov someData,0
ret
Sub1 ENDP
程序使用 INVOKE 指令向Sub1传递参数myData的值,在最后的Sub1函数中虽然为someData赋了值,但是却并不影响myData的值。过于简单,不需要过多解释。
下面来看一下引用传递:
.data
myData WORD 1000h
.code
main PROC
INVOKE Sub2, ADDR myData ; pass by reference
exit
main ENDP
sub2 PROC dataPtr:PTR WORD
mov esi,dataPtr
mov WORD PTR[esi],0
ret
sub2 ENDP
可以看到在使用INVOKE调用Sub2时,将myData的地址传给了Sub2,而在Sub2中,参数是一个指向WORD的指针,Sub2接收了myData的地址之后,使用这个地址找实际上是在操作真正的myData,此时将0赋值给了myData,必然影响了myData中真正存储的值。
这便是高级语言中的传值和传址的汇编解释。
注意:在进行数据结构的传递时,一般采用引用传递的方式。
分享到:
相关推荐
Java编程语言中,参数传递的方式主要有两种:值传递和引用传递。然而,由于Java不支持指针,所以严格意义上的引用传递并不存在。但是,通过对象的传递,Java实现了类似引用传递的效果。 值传递是Java中基本类型的...
汇编语言程序设计的基础步骤包括:分析问题、设计算法、编写源代码、汇编和链接。汇编器将源代码转换成机器码,链接器则负责解决外部函数和数据的引用。在编写汇编程序时,需要注意内存管理和指令的正确性,因为错误...
《Windows环境下32位汇编语言程序设计》第三版是一本深入探讨在Windows操作系统下编写32位汇编语言程序的专业书籍。...通过分析和修改这些源代码,读者可以更直观地感受到汇编语言的魅力,并提升实际编程技能。
3. **内存管理**:在汇编语言中,程序员需要手动管理内存,包括分配、释放和引用。新一代设计可能包含更有效的内存管理策略,如自动堆栈管理。 4. **过程和子程序**:通过过程调用来组织代码,可以提高代码的模块化...
6. **中断和异常处理**:Intel汇编语言允许程序员处理硬件中断和软件异常,这对于实现操作系统级别的功能至关重要。 7. **函数调用约定**:在多函数程序中,函数调用的参数传递、返回值接收和栈管理有一套约定,如...
通过这种方式,程序员可以在保持高级语言编程的同时,利用低级汇编语言的优势来优化关键部分的代码。 ##### 2.2 内嵌汇编举例 内嵌汇编通常使用`__asm__`关键字来标记,例如: ```c int add(int a, int b) { int...
6. **转换与反汇编**:了解汇编语言与机器码之间的转换过程,以及反汇编器的工作原理,这对于调试和分析二进制代码非常有用。 7. **链接与加载**:学习如何将汇编程序与其他模块链接,以及在内存中的加载过程,包括...
本示例探讨了DLL的互引用情况,即一个汇编语言编写的DLL被一个用Visual C++(VC)编译的WIN32窗口程序引用,同时这个VC程序所依赖的DLL又反过来引用了汇编语言编写的DLL。这种复杂的交互关系涉及到DLL的加载、函数...
6. **子程序与调用**:汇编语言中的过程或子程序使用CALL和RET指令实现。理解如何传递参数、保存和恢复上下文对于编写复杂数学函数和系统调用至关重要。 7. **中断处理**:中断是处理器响应外部或内部事件的方式。...
本教案旨在深入讲解汇编语言的基本概念、语法和应用,帮助学习者掌握计算机底层操作的核心技能。 一、汇编语言简介 汇编语言与机器语言密切相关,每条汇编指令对应一个或多个机器码,直接控制计算机硬件的操作。它...
6. **调用约定**:在Delphi中,汇编代码必须遵循特定的调用约定,如stdcall或fastcall,以确保参数传递和返回值的正确处理。不遵守这些约定可能导致函数调用出错。 7. **使用外部汇编程序**:除了内联汇编,Delphi...
6. **子程序和调用**:了解如何定义和调用子程序(函数),以及如何处理参数传递和返回值。 7. **链接与装配**:汇编语言程序通常需要经过汇编器转换成机器码,然后通过链接器与其他模块组合成可执行文件。这一过程...
第一部分是基础部分,以8086/8088为背景,以DOS和PC兼容机为软硬件平台,以MASM和TASM为汇编器,介绍汇编语言的有关概念,讲解汇编语言程序设计技术。第二部分是提高部分,以80386为背景,以新一代微处理器Pentium为...
《汇编语言全接触》教程是一本深入浅出地介绍汇编语言的教育资源,适合对计算机底层原理感兴趣的初学者和进阶者。汇编语言,作为计算机编程的基础,是计算机科学的重要组成部分,它直接对应于机器指令,对于理解...
Chapter 4的代码实例通常会包含上述概念的实践应用,通过分析和运行这些代码,学习者可以更直观地理解汇编语言的工作原理,提升编程能力。这些代码可能涵盖从简单的算术运算到复杂的控制流,以及数据结构的处理。 ...
本教程将深入讲解AT&T汇编语言的基础知识,包括其语法特点、指令系统以及如何通过它来编写和理解低级程序。 一、AT&T汇编语言基础 1. 格式规范:AT&T汇编代码的格式与Intel汇编有显著差异。例如,Intel汇编中操作...
在Linux操作系统中,汇编语言程序设计是一种底层编程技术,对于理解计算机系统的工作原理和优化性能至关重要。32位AT&T汇编语言是Linux环境下的主流汇编语法,与Intel的汇编语言略有不同,主要在指令格式和寻址模式...
汇编语言允许程序员以不同的方式引用内存位置,包括直接寻址、间接寻址、相对寻址等。理解这些寻址方式对于编写有效且高效的汇编代码至关重要。 **5. 汇编过程** 汇编过程包括源码到目标码的转换,由汇编器完成。...
因此,了解如何在C语言中嵌入汇编代码或如何在C语言和汇编语言之间进行相互调用是十分必要的。 #### 内嵌汇编 内嵌汇编是指在C语言程序中嵌入汇编代码的一种方式。这种方式可以用来执行那些C语言难以处理的任务,...
### AT&T汇编语言与GCC内嵌汇编简介 #### AT&T与INTEL汇编语言语法的区别 在深入了解AT&T汇编语言与GCC内嵌汇编之前,我们首先需要了解这两种汇编语言之间的区别,尤其是与传统的Intel汇编语言相比。 ##### 1.1 ...