📝 汇编语言编程教程

24篇技术文档
  汇编程序设计教程

📅  最后修改于: 2020-11-05 05:01:22        🧑  作者: Mango

汇编语言是特定于特定计算机体系结构的计算机或其他可编程设备的低级编程语言,而大多数高级编程语言通常可跨多个系统移植。汇编语言通过称为NASM,MASM等汇编程序的实用程序转换为可执行的机器代码。本教程是为那些希望从头开始学习汇编编程基础知识的人而设计的。本教程将使您对汇编编程有足够的了解,从那里您可以进入更高层次的专业知识。先决条件在继续本教程之前,您应该对计算机编程术语有基本的了解。对任何一种编...

  组装-简介

📅  最后修改于: 2020-11-05 05:02:06        🧑  作者: Mango

什么是汇编语言?每台个人计算机都有一个微处理器,用于管理计算机的算术,逻辑和控制活动。每个处理器系列都有其自己的指令集,用于处理各种操作,例如从键盘获取输入,在屏幕上显示信息以及执行各种其他作业。这些指令集称为“机器语言指令”。处理器仅理解机器语言指令,这些机器指令是1和0的字符串。但是,机器语言对于软件开发而言过于模糊和复杂。因此,低级汇编语言是为特定的处理器家族设计的,该处理器以符号代码和更易...

  组装-环境设置

📅  最后修改于: 2020-11-05 05:02:24        🧑  作者: Mango

本地环境设置汇编语言取决于指令集和处理器的体系结构。在本教程中,我们重点介绍奔腾等Intel-32处理器。要遵循本教程,您将需要-IBM PC或任何等效的兼容计算机Linux操作系统的副本NASM汇编程序的副本有很多好的汇编程序,例如-Microsoft汇编程序(MASM)Borland涡轮组装机(TASM)GNU汇编器(GAS)我们将使用NASM汇编程序,因为它是-自由。您可以从各种Web来源下...

  程序集-基本语法

📅  最后修改于: 2020-11-05 05:02:50        🧑  作者: Mango

汇编程序可以分为三个部分-数据部分bss部分,以及文字部分。数据部分数据部分用于声明初始化的数据或常量。此数据在运行时不会更改。您可以在本节中声明各种常量值,文件名或缓冲区大小等。声明数据部分的语法是-bss部分bss部分用于声明变量。声明bss部分的语法是-文字部分文本部分用于保留实际代码。该部分必须以全局声明_start开头,该声明告诉内核程序从何处开始执行。声明文本部分的语法是-评论汇编语言...

  程序集-内存段

📅  最后修改于: 2020-11-05 05:03:07        🧑  作者: Mango

我们已经讨论了汇编程序的三个部分。这些部分也代表各种内存段。有趣的是,如果将section关键字替换为segment,则会得到相同的结果。尝试以下代码-现场演示编译并执行上述代码后,将产生以下结果-内存段分段存储器模型将系统存储器分为独立的分段组,这些分段由位于分段寄存器中的指针引用。每个段用于包含特定类型的数据。一个段用于包含指令代码,另一段用于存储数据元素,第三段用于保留程序堆栈。根据以上讨论...

  汇编-寄存器

📅  最后修改于: 2020-11-05 05:03:52        🧑  作者: Mango

处理器操作主要涉及处理数据。该数据可以存储在存储器中并从其访问。然而,从存储器中读取数据并将数据存储到存储器中会减慢处理器的速度,因为它涉及通过控制总线发送数据请求并进入存储器存储单元并通过同一通道获取数据的复杂过程。为了加速处理器的运行,处理器包括一些内部存储器存储位置,称为寄存器。寄存器存储要处理的数据元素,而不必访问存储器。处理器芯片中内置了数量有限的寄存器。处理器寄存器IA-32体系结构中...

  程序集-系统调用

📅  最后修改于: 2020-11-05 05:04:13        🧑  作者: Mango

系统调用是用户空间和内核空间之间接口的API。我们已经使用了系统调用。 sys_write和sys_exit分别用于写入屏幕和退出程序。Linux系统调用您可以在汇编程序中使用Linux系统调用。您需要执行以下步骤才能在程序中使用Linux系统调用-将系统呼叫号码放入EAX寄存器中。将参数保存到系统调用中的寄存器EBX,ECX等中。调用相关的中断(80h)。结果通常在EAX寄存器中返回。有六个寄存...

  汇编-寻址模式

📅  最后修改于: 2020-11-05 05:04:48        🧑  作者: Mango

大多数汇编语言指令都需要处理操作数。操作数地址提供要存储数据的位置。有些指令不需要操作数,而另一些指令则需要一个,两个或三个操作数。当一条指令需要两个操作数时,第一个操作数通常是目的地,它在寄存器或存储器位置中包含数据,第二个操作数是源。源包含要传递的数据(立即寻址)或数据的地址(在寄存器或存储器中)。通常,源数据在操作后保持不变。寻址的三种基本模式是-注册地址立即寻址内存寻址注册地址在这种寻址模...

  汇编-变量

📅  最后修改于: 2020-11-05 05:05:13        🧑  作者: Mango

NASM提供了各种定义指令来为变量保留存储空间。 define assembler指令用于分配存储空间。它可以用于保留以及初始化一个或多个字节。为初始化数据分配存储空间初始化数据的存储分配语句的语法为-其中,变量名是每个存储空间的标识符。汇编器为数据段中定义的每个变量名称关联一个偏移值。define指令有五种基本形式-DirectivePurposeStorage SpaceDBDefine By...

  汇编-常量

📅  最后修改于: 2020-11-05 05:05:32        🧑  作者: Mango

NASM提供了几个定义常量的指令。在前面的章节中,我们已经使用过EQU指令。我们将特别讨论三个指令-均衡器%分配%定义EQU指令EQU指令用于定义常量。 EQU指令的语法如下-例如,然后,您可以在代码中使用此常量值,例如-EQU语句的操作数可以是表达式-以上代码段将AREA定义为200。例以下示例说明了EQU指令的使用-现场演示编译并执行上述代码后,将产生以下结果-%assign指令%assign...

  汇编-算术指令

📅  最后修改于: 2020-11-05 05:06:20        🧑  作者: Mango

INC指令INC指令用于将操作数加1。它对可以在寄存器或内存中的单个操作数起作用。句法INC指令具有以下语法-操作数目的地可以是8位,16位或32位操作数。例DEC指令DEC指令用于将操作数减1。它对可以在寄存器或内存中的单个操作数起作用。句法DEC指令具有以下语法-操作数目的地可以是8位,16位或32位操作数。例ADD和SUB指令ADD和SUB指令用于对字节,字和双字大小的二进制数据进行简单的加...

  汇编-逻辑指令

📅  最后修改于: 2020-11-05 05:06:55        🧑  作者: Mango

处理器指令集提供指令AND,OR,XOR,TEST和NOT布尔逻辑,它们根据程序的需要测试,设置和清除位。这些指令的格式-Sr.No.InstructionFormat1ANDAND operand1, operand22OROR operand1, operand23XORXOR operand1, operand24TESTTEST operand1, operand25NOTNOT oper...

  装配-条件

📅  最后修改于: 2020-11-05 05:07:27        🧑  作者: Mango

汇编语言中的条件执行通过若干循环和分支指令来完成。这些指令可以更改程序中的控制流。在两种情况下观察到条件执行-Sr.No.Conditional Instructions1Unconditional jumpThis is performed by the JMP instruction. Conditional execution often involves a transfer of con...

  汇编-循环

📅  最后修改于: 2020-11-05 05:07:43        🧑  作者: Mango

JMP指令可用于实现循环。例如,以下代码段可用于执行循环主体10次。但是,处理器指令集包括一组用于实现迭代的循环指令。基本的LOOP指令具有以下语法-其中,label是标识目标指令的目标标签,如跳转指令中所述。 LOOP指令假定ECX寄存器包含循环计数。当执行循环指令时,ECX寄存器递减,并且控制跳至目标标签,直到ECX寄存器的值(即计数器达到零)为止。上面的代码片段可以写成-例以下程序在屏幕上打...

  装配体-数字

📅  最后修改于: 2020-11-05 05:08:12        🧑  作者: Mango

数值数据通常用二进制表示。算术指令对二进制数据进行操作。当数字显示在屏幕上或从键盘输入时,它们是ASCII形式。到目前为止,我们已经将该输入数据以ASCII形式转换为二进制以进行算术计算,并将结果转换回二进制。以下代码显示了这一点-现场演示编译并执行上述代码后,将产生以下结果-但是,此类转换会产生开销,并且汇编语言编程允许以更有效的方式以二进制形式处理数字。小数可以两种形式表示-ASCII形式BC...