汇编语言复习(二)

汇编语言基础

基本语言元素

整数常量

整数常量(又称为整形常量)由一个可选前置符号、一个或多个数字、以及一个指明其基数的可选基数字符构成 : [ { + | - } ] digite [ radix]
在这里插入图片描述
注意: 以字母开头的十六进制数必须加个前置0,以防汇编器将其解释为标识符

整形常量表达式

整形常量表达式是一种算术表达式,它包含了整数常量和算术运算符。每个表达式的计算结果必须是个整数,并可用32位来存放

实数常量

实数常量(又称为浮点数常量)用于表示十进制实数和编码(十六进制)实数。
十进制实数包含一个可选符号,其后跟随一个整数,一个十进制小数点,一个可选的表示小数部分的整数,和一个可选的指数
编码实数表示的是十六进制实数,用IEEE浮点数格式来表示短实数

字符常量

字符常量是指,用单引号或双引号包含的一个字符。汇编器在内存中保存的是该字符二进制ASCII码的数值

字符串常量

字符串常量是用单引号或双引号包含的一个字符(含空格符)序列
嵌套引号也是被允许的
和字符常量以整数形式一样,字符串常量在内存中的保存形式为整数字节数值序列

保留字

保留字有特殊意义并且只能在其正确的上下文中使用。默认情况下,保留字是没有大小写之分的。
保留字有以下的类型:

  • 指令助记符,如mov、add和mul
  • 寄存器名称
  • 伪指令,告诉汇编器如何汇编程序
  • 属性,提供变量与操作数的大小与使用信息。例如Byte和Word。
  • 运算符,在常量表达式中使用
  • 预定义符号,比如@data,它在汇编时返回常量的整数值
标识符

标识符是由程序员选择的名称,它用于标识变量、常数、子程序和代码标签

伪指令

伪指令是嵌入源代码中的命令,由汇编器识别和执行
伪指令不在运行时执行,但是他们可以定义变量、宏和子程序;为内存段分配名称执行许多其他与汇编器相关的日常任务。
默认情况下,伪指令不区分大小写
汇编器伪指令的一个重要功能是定义程序区段,也称为段,程序中的段具有不同的作用

指令

指令是一种语句,它在程序汇编编译时变得可执行。汇编器讲指令翻译为机器语言字节,并且在运行时由COU加载和执行
一条指令有四个部分:

  • 标号(可选)
  • 指令助记符(必需)
  • 操作数(通常是必需的)
  • 注释(可选)
标号

标号是一种标识符,是指令和数据的位置标记。
标号位于指令的前端,表示指令的地址
同样,标号位于变量的前端,表示变量的地址
标号有两种类型:数据标号和代码标号
数据标号标识变量的位置,它提供了一种方便的手段在代码中引用该变量。
汇编器为每个标号分配一个数字地址。可以在一个标号后面定义多个数据项。
程序代码区(指令所在区段)的标号必须使用冒号(:)结束。代码标号用作跳转和循环指令的目标

指令助记符

指令助记符是标记一条指令的短单词

在这里插入图片描述

操作数

操作数是指令输入输出的数值
操作数有固有顺序。当指令有多个操作数时,通常第一个操作数被称为目的操作数,第二个操作数被称为源操作数。一般情况下,目的操作数的内容由指令修改注意:

IMUL有3个操作数,第一个是目的操作数,第二个和第三个是进行乘法的源操作数

注释

注释是程序编写者与阅读者交流程序设计信息的重要途径。

NOP(空操作)指令

最安全(也是最无用)的指令是NOP(空操作),它在程序空间中占有一个字节,但是不做任何操作

一个简单的例子

; //AddTwo.asm - adds two 32-bit integers.


.386 ; //  .386伪指令  表示这是一个32位程序,能访问32位寄存器和地址
.model flat, stdcall;  //  程序的内存模式  flat ,子程序的调用规范(stdcall)
.stack 4096;//  堆栈保留4096字节的存储空间
ExitProcess proto, dwExitCode:dword;//  声明函数原型  原型:函数名,proto,逗号,输入参数列表

.code;//  标记一个程序代码区的起点
main proc;//  标号main  标记程序开始执行的地址 
mov	eax, 5
add	eax, 6

invoke ExitProcess, 0
main endp;//  endp  标记一个过程的结束
end main; //  end标识程序的入口(main)

在这里插入图片描述

列表文件
Microsoft (R) Macro Assembler Version 14.16.27034.0	    03/14/20 16:48:17
AddTwo.asm						     Page 1 - 1


				; //AddTwo.asm - adds two 32-bit integers.


				.386 ; //  .386伪指令  表示这是一个32位程序,能访问32位寄存器和地址
				.model flat, stdcall;  //  程序的内存模式  flat ,子程序的调用规范(stdcall)
				.stack 4096;//  堆栈保留4096字节的存储空间
				ExitProcess proto, dwExitCode:dword;//  声明函数原型  原型:函数名,proto,逗号,输入参数列表

 00000000			.code;//  标记一个程序代码区的起点
 00000000			main proc;//  标号main  标记程序开始执行的地址 
 00000000  B8 00000005		mov	eax, 5
 00000005  83 C0 06		add	eax, 6

				invoke ExitProcess, 0
 00000008  6A 00	   *	    push   +000000000h
 0000000A  E8 00000000 E   *	    call   ExitProcess
 0000000F			main endp;//  endp  标记一个过程的结束
				end main; //  end标识程序的入口(main)
Microsoft (R) Macro Assembler Version 14.16.27034.0	    03/14/20 16:48:17
AddTwo.asm						     Symbols 2 - 1




Segments and Groups:

                N a m e                 Size     Length   Align   Combine Class

FLAT . . . . . . . . . . . . . .	GROUP
STACK  . . . . . . . . . . . . .	32 Bit	 00001000 DWord	  Stack	  'STACK'	 
_DATA  . . . . . . . . . . . . .	32 Bit	 00000000 DWord	  Public  'DATA'	
_TEXT  . . . . . . . . . . . . .	32 Bit	 0000000F DWord	  Public  'CODE'	


Procedures, parameters, and locals:

                N a m e                 Type     Value    Attr

ExitProcess  . . . . . . . . . .	P Near	 00000000 FLAT	Length= 00000000 External STDCALL
main . . . . . . . . . . . . . .	P Near	 00000000 _TEXT	Length= 0000000F Public STDCALL


Symbols:

                N a m e                 Type     Value    Attr

@CodeSize  . . . . . . . . . . .	Number	 00000000h   
@DataSize  . . . . . . . . . . .	Number	 00000000h   
@Interface . . . . . . . . . . .	Number	 00000003h   
@Model . . . . . . . . . . . . .	Number	 00000007h   
@code  . . . . . . . . . . . . .	Text   	 _TEXT
@data  . . . . . . . . . . . . .	Text   	 FLAT
@fardata?  . . . . . . . . . . .	Text   	 FLAT
@fardata . . . . . . . . . . . .	Text   	 FLAT
@stack . . . . . . . . . . . . .	Text   	 FLAT

	   0 Warnings
	   0 Errors

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章