日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Win32汇编数组编程图解

發布時間:2025/4/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Win32汇编数组编程图解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 聲明并初始化數組

.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 數組; 該數組每個元素是 4 字節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 數組, 并把每個元素初始化為 7arr1 dd 3 dup(7);聲明有三個元素的 DWORD 數組, 無初始化; 對全局變量, 沒有初始化的將用 0 填充arr2 dd 3 dup(?) .data?;聲明有三個元素的 DWORD 數組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? 的區別

.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 文件會根據大小分配內存 .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大小的區別;?

c10和c11的exe大小相差16k,4096*4 個字節;

結論:不需要初始化的變量應該聲明在 .data? 段;

4 嵌套數組

.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

運行如下;?

手工構建過程如下;

?

總結

以上是生活随笔為你收集整理的Win32汇编数组编程图解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。