彙編語言複習(二)

彙編語言基礎

基本語言元素

整數常量

整數常量(又稱爲整形常量)由一個可選前置符號、一個或多個數字、以及一個指明其基數的可選基數字符構成 : [ { + | - } ] 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

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