組合語言學習系列 函式實現

2021-09-02 09:58:00 字數 1176 閱讀 9952

以下**示範交換a和b兩個整數的函式,編譯環境ubuntu14.04(32位)

假如要實現以下c**

#include void swap(int *xp, int *yp)

intmain()

.section .data

a: .int

534b: .int

1057

format: .asciz "

%d\n

".section .text

.global _start

_start:

pushl %ebp

movl %esp, %ebp

subl $

24, %esp  #給棧分配記憶體24位元組儲存區域性變數

movl $a, %eax

movl %eax,

4(%esp)

movl $b, %eax

movl %eax, (%esp)

call

swap  #呼叫swap函式

pushl a  #列印a

pushl $format

call

printf

pushl b  #列印b

pushl $format

call

printf

movl $

0, (%esp)

call

exit

swap:

pushl %ebp  #儲存呼叫前棧幀位址

movl %esp, %ebp  

pushl %ebx  #根據習慣,儲存暫存器ebx

movl

8(%ebp), %edx #get xp

movl

12(%ebp), %ecx #get yp

movl (%edx), %ebx #get x

movl (%ecx), %eax #get y

movl %eax, (%edx)

movl %ebx, (%ecx)

popl %ebx

popl %ebp

ret

as swap.s -o swap.o

ld -lc -i /lib/ld-linux.so.2 swap.o -oswap

./swap

組合語言學習系列 函式實現

以下 示範交換a和b兩個整數的函式,編譯環境ubuntu14.04 32位 假如要實現以下c include void swap int xp,int yp intmain section data a int 534b int 1057 format asciz d n section text ...

組合語言學習

參考書籍 組合語言 王爽 著 清華大學出版社 選單導航 一 彙編基礎知識 二 暫存器和常見彙編指令演示 一 基礎知識 1 彙編指令是機器指令的助記符,同機器指令一一對應 2 每一種cpu都有自己的彙編指令集 3 cpu可以直接使用的資訊在儲存器中存放 4 在儲存器中指令和資料沒有任何區別,都是二進位...

組合語言學習

持續更新 彙編指令 1.mov指令 mov是乙個傳送指令,可以實現以下操作 有一點需要注意,資料不能直接傳給段暫存器,比如mov ds,100h就是錯誤的。但是可以將其他暫存器中的值賦給段暫存器。段暫存器有cs,ds,ss,es等。如果你想知道為什麼,那就可以去了解一下關於每條指令的硬體實現。後面還...