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

2021-09-18 02:52:58 字數 1407 閱讀 9992

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

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

#include int main()

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

return 0;

}

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

ecx==sum

esi==i

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結尾

.code

main proc

xor ecx,ecx;將ecx暫存器的值清零,相當與int sum = 0

mov esi,1;給esi暫存器賦初值1,相當於int i = 1

jmp testing;跳轉到條件測試

body:

mov eax,esi;將esi的值賦給eax,eax為被除數

mov ebx,2;將2賦值給ebx,ebx為除數

cdqdiv ebx;eax / ebx ,edx存有結果的餘數

cmp edx,0;edx的值和0進行比較

jne next;不為0則跳轉到next

add ecx,esi;為0則代表為偶數,這裡進行累加,相當於sum = sum + i

next:

inc esi;esi = esi + 1,相當於i++

testing:

cmp esi,100;將esi和100的值進行比較,相當於 i <= 100

jle body;跳轉到body

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

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

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

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

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

匯程式設計序 退出

作為第乙個匯程式設計序,本程式除了退出以外,並沒有執行其他的功能。目的 退出並向linux核心返回乙個狀態碼的簡單程式 輸入 無 輸出 返回乙個狀態碼.在執行程式後可通過輸入echo 來讀取狀態碼 變數 eax儲存系統呼叫號 ebx儲存返回狀態 section data section text g...