以下**示範交換a和b兩個整數的函式,編譯環境ubuntu14.04(32位)
假如要實現以下c**
#include void swap(int *xp, int *yp)intmain()
.section .dataas swap.s -o swap.oa: .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
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等。如果你想知道為什麼,那就可以去了解一下關於每條指令的硬體實現。後面還...