彙編語言列表文件說明(MASM宏彙編器)

1. 編譯時產生彙編譯列表文件

在VS2017中,編譯時生成彙編列表文件的步驟如下:

1.1 項目右鍵->屬性->Microsoft Macro Assembler->

Enable Assembly Generated Code Listing 選是(/Sg)

1.2 Assembled Code Listing File

寫入生成文件名稱,比如

$(ProjectName).list

2. 彙編譯列表文件說明

2.1 格式爲

offset      [code]

offset:自本段首開始的偏移。

code:生成的二進制機器碼。

例如(2.2介紹的符號也參看這個例子):

00000000 .data    ;這裏數據段開始,其後面的數據段內的偏移相對於這裏爲0開始增長。

00000000 74 68 69 73 20      str_Caption BYTE "this is a caption", 0

          69 73 20 61 20

          63 61 70 74 69

          6F 6E 00

 00000012 74 68 69 73 20    str_Output BYTE "this is a message", 0

              69 73 20 61 20

             6D 65 73 73 61

             67 65 00

 00000024 0002                value1 word 2

 00000026 FFFFFFFB        value2 sdword - 5

 0000002A 00000000             mulvalue dword 0

 0000002E  0000000A [              array1 real8 10 dup(? )

           0000000000000000

          ]

 0000007E 000A 0014 001E num word 10, 20, 30

 00000084 8001                sum1 sword - 32767

 00000086 7FFF                 sum2  sword 32767

 00000088 0000                total sword 0

 0000008A 00000000             shang sdword 0

 0000008E 00000000             yu  sdword 0

 00000092 00                     var1 sbyte 0

 00000000 .code   ; ;這裏代碼段開始,其後面的數據段內的偏移相對於這裏爲0開始增長。

 00000000                    AddMethod proc uses ebx edx

                            ; PUSHAD

 00000000  53             *         push   ebx

 00000001  52             *         push   edx

 00000002  03 C3           ADD EAX, EBX

 00000004  03 C2           ADD EAX, EDX

                            ; POPAD

                            RET

 00000006  5A             *         pop    edx

 00000007  5B             *         pop    ebx

 00000008  C3             *         ret    00000h

 00000009                    AddMethod endp

 00000009                    _start PROC

 00000009  A0 00000092 R       MOV AL,var1

                     ; invoke MessageBox, NULL, offset str_Output, offset str_Caption, MB_OK

 0000000E  E8 00000000 E call ExitProcess

 00000013                    _start endp

                            ;end the _start proc,it is not the part of the main.

                            end _start

2.2 列表中的符號和縮寫的含義

C   表示此行來自於包含文件

=   EQU或者相當於賦值的號(=)的指令

nn[xx]  DUP 表示達: nn次xx值的副本

----   段/組地址(鏈接器必段解決)

R   重定位表地址 (鏈接器必須解決)

*   由彙編器產生的代碼

E   外部地址 (鏈接器必須解決)

n   宏擴展的嵌入層次 (如果超過9層)

|    運算符大小重寫

&   地址大小重寫

nn:   表達式中的段重寫

nn/  REP LOCK 前綴指令

2.3 順便說一下過程後面的end main

常常在main過程後面跟一句end main,其實這個end main不是main過程的一部分,只是告訴程序函數執行,以main結束,因常寫在main後面,以爲是main的一部分。

_start PROC

MOV AL,var1

call ExitProcess

_start endp

;end _start不是過程_start的一部分,只是必段放在文件尾,告訴彙編程序從這裏結束運行,很多時間恰好放在了入口過程後面。

end _start

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