Win32汇编数组编程图解
生活随笔
收集整理的這篇文章主要介紹了
Win32汇编数组编程图解
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 聲明并初始化數(shù)組
.386 .model flat, stdcall option casemap :noneinclude S:\masm32\include\windows.inc include S:\masm32\include\user32.inc include S:\masm32\include\kernel32.inc include S:\masm32\include\gdi32.inc includelib S:\masm32\lib\user32.lib includelib S:\masm32\lib\kernel32.lib includelib S:\masm32\lib\gdi32.lib include S:\masm32\include\masm32.inc include S:\masm32\include\debug.inc includelib S:\masm32\lib\masm32.lib includelib S:\masm32\lib\debug.lib.data;聲明并初始化有五個元素的 DWORD 數(shù)組; 該數(shù)組每個元素是 4 字節(jié)val dd 11,22,33,67,93 .code start:mov eax, valPrintDec eax ;11mov eax, val[4]PrintDec eax ;22mov eax, val[8]PrintDec eax ;33mov eax, val[12]PrintDec eax ;33mov eax, val[16]PrintDec eax ;33ret end start運行如下;
2 使用dup偽指令
.386 .model flat, stdcall option casemap :noneinclude S:\masm32\include\windows.inc include S:\masm32\include\user32.inc include S:\masm32\include\kernel32.inc include S:\masm32\include\gdi32.inc includelib S:\masm32\lib\user32.lib includelib S:\masm32\lib\kernel32.lib includelib S:\masm32\lib\gdi32.lib include S:\masm32\include\masm32.inc include S:\masm32\include\debug.inc includelib S:\masm32\lib\masm32.lib includelib S:\masm32\lib\debug.lib.data;聲明有三個元素的 DWORD 數(shù)組, 并把每個元素初始化為 7arr1 dd 3 dup(7);聲明有三個元素的 DWORD 數(shù)組, 無初始化; 對全局變量, 沒有初始化的將用 0 填充arr2 dd 3 dup(?) .data?;聲明有三個元素的 DWORD 數(shù)組arr3 dd 3 dup(?).code start:DumpMem offset arr1, 12 ;07 00 00 00 - 07 00 00 00 - 07 00 00 00DumpMem offset arr2, 12 ;00 00 00 00 - 00 00 00 00 - 00 00 00 00DumpMem offset arr3, 12 ;00 00 00 00 - 00 00 00 00 - 00 00 00 00ret end start?運行如下;
3?未初始化的變量在 .data 段和 .data? 的區(qū)別
.386 .model flat, stdcall option casemap :noneinclude S:\masm32\include\windows.inc include S:\masm32\include\user32.inc include S:\masm32\include\kernel32.inc include S:\masm32\include\gdi32.inc includelib S:\masm32\lib\user32.lib includelib S:\masm32\lib\kernel32.lib includelib S:\masm32\lib\gdi32.lib include S:\masm32\include\masm32.inc include S:\masm32\include\debug.inc includelib S:\masm32\lib\masm32.lib includelib S:\masm32\lib\debug.lib.datav1 dd 4096 dup(?) ;未初始化變量在 .data 段, 生成的 exe 文件會根據(jù)大小分配內(nèi)存 .code start:PrintText '.data dup(?) !!! 'ret end start .386 .model flat, stdcall option casemap :noneinclude S:\masm32\include\windows.inc include S:\masm32\include\user32.inc include S:\masm32\include\kernel32.inc include S:\masm32\include\gdi32.inc includelib S:\masm32\lib\user32.lib includelib S:\masm32\lib\kernel32.lib includelib S:\masm32\lib\gdi32.lib include S:\masm32\include\masm32.inc include S:\masm32\include\debug.inc includelib S:\masm32\lib\masm32.lib includelib S:\masm32\lib\debug.lib.data?v1 dd 4096 dup(?) ;未初始化變量在 .data? 段 .code start:PrintText '.data? dup(?) !!!'ret end start此二程序運行如下;
主要看一下exe大小的區(qū)別;?
c10和c11的exe大小相差16k,4096*4 個字節(jié);
結(jié)論:不需要初始化的變量應(yīng)該聲明在 .data? 段;
4 嵌套數(shù)組
.386 .model flat, stdcall option casemap :noneinclude S:\masm32\include\windows.inc include S:\masm32\include\user32.inc include S:\masm32\include\kernel32.inc include S:\masm32\include\gdi32.inc includelib S:\masm32\lib\user32.lib includelib S:\masm32\lib\kernel32.lib includelib S:\masm32\lib\gdi32.lib include S:\masm32\include\masm32.inc include S:\masm32\include\debug.inc includelib S:\masm32\lib\masm32.lib includelib S:\masm32\lib\debug.lib.dataval dd 2 dup(3 dup(7,9)) .code start:DumpMem offset val, 48 ;7 9 7 9 7 9 7 9 7 9 7 9ret end start運行如下;?
手工構(gòu)建過程如下;
?
總結(jié)
以上是生活随笔為你收集整理的Win32汇编数组编程图解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab画三维曲线入门
- 下一篇: 超图桌面版加载obj 3D模型