汇编语言列表文件说明(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

你可能感兴趣的:(汇编语言)