匯程式設計序 實現一維陣列求和(間接定址)

2021-09-18 03:00:42 字數 1315 閱讀 7966

我們在開始寫彙編**的時候,一般是先寫出c語言的實現,然後再翻譯成彙編的實現。

在這個過程中,我們還可以利用ide的反彙編功能檢視編譯器是如何幫我們生成彙編**的,以及思考編譯器為什麼這樣做,搞懂了這些,不論是對我們的c語言還是組合語言都有很大的提公升。

#include int array = ;

int main()

printf("the sum is : %d\n", sum);

return 0;

}

彙編中暫存器對應c中變數關係如下:

eax==sum

esi==p

ecx==陣列元素個數==迴圈次數

includelib kernel32.lib

includelib ucrt.lib

includelib legacy_stdio_definitions.lib

.386

.model flat,stdcall

exitprocess proto,

dwexitcode:dword

printf proto c : dword,:vararg

scanf proto c : dword,:vararg

.data

format byte 'the sum is : %d',10,0;這裡的10代表換行,0代表字串以0結尾

array dword 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h;定義一維陣列,並初始化賦值

.code

main proc

mov ecx,lengthof array;將陣列中元素個數放入ecx暫存器中

xor eax,eax;將eax暫存器清零,相當於int sum = 0

mov esi,offset array;將陣列的位址存入esi暫存器中,相當於int* p = array

again:

add eax,[esi];相當於sum = sum + *p

add esi,4;esi = esi + 4,相當於p++

loop again;ecx = ecx - 1,用於迴圈計數

invoke printf,offset format,eax;輸出計算結果,相當於printf("%d\n",sum)

匯程式設計序 實現一維陣列求和(相對定址)

我們在開始寫彙編 的時候,一般是先寫出c語言的實現,然後再翻譯成彙編的實現。在這個過程中,我們還可以利用ide的反彙編功能檢視編譯器是如何幫我們生成彙編 的,以及思考編譯器為什麼這樣做,搞懂了這些,不論是對我們的c語言還是組合語言都有很大的提公升。include int array int main...

匯程式設計序 實現1 100偶數求和

我們在開始寫彙編 的時候,一般是先寫出c語言的實現,然後再翻譯成彙編的實現。在這個過程中,我們還可以利用ide的反彙編功能檢視編譯器是如何幫我們生成彙編 的,以及思考編譯器為什麼這樣做,搞懂了這些,不論是對我們的c語言還是組合語言都有很大的提公升。include int main printf th...

用匯程式設計序實現電子時鐘

基本思想 當需要編寫程式實現較複雜的功能時,整個程式就如同乙個裝配體 總成 而子程式就如同裝配體中的零件,子程式與主程式的介面就如同機械中的連線件將不同零件裝配起來。使用子程式能使程式結構更清晰,且邏輯不易發生錯誤。實現電子時鐘需要的子程式 1.顯示子程式disp 2.顯示延時子程式dey1 3.中...