#purpose:this program will compute the value of
# 2^3 + 5^2
.section .data
.section .text
.globl _start
_start:
pushl $3
pushl $2
call power
addl $8, %esp
pushl %eax
pushl $2
pushl $5
call power
addl $8, %esp
popl %ebx
addl %eax, %ebx
movl $1, %eax
int $0x80
.type power, @function
power:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl 8(%ebp), %ebx
movl 12(%ebp), %ecx
movl %ebx, -4(%ebp)
power_loop_start:
cmpl $1, %ecx
je end_power
movl -4(%ebp), %eax
imull %ebx, %eax
movl %eax, -4(%ebp)
decl %ecx
jmp power_loop_start
end_power:
movl -4(%ebp), %eax
movl %ebp, %esp
popl %ebp
ret 使用
.type funname @function
去定義乙個函式 使用
call
指令去呼叫乙個子函式,在呼叫子函式我們要明確,函式引數放在什麼地方,返回返回值放在什麼地方,函式返回位址在什麼地方以及函式內的區域性變數放在什麼地方。我們知道,呼叫
call
指令時會做如下工作,將當前
pc指標壓入棧中,跳轉到標號處執行程式。那麼在子函式中,我們要使用
ret指令,使得子函式執行完後能夠跳到主函式處繼續執行。
Linux 下彙編學習
linux下彙編學習 在ubuntu下用學習組合語言程式設計,在使用ld鏈結時有碰到ld i386 architecture of input file eatsyscall.o is incompatible with i386 x86 64 output的問題。很明顯,root cause 是我...
Linux下彙編學習 1
教材 programming from the ground up.pdf 直接看 purpose program that exits and returns a status code back to the linux kernel input none output returns a st...
Linux下彙編學習 1
教材 programming from the ground up 第乙個程式 section data section text globl start start movl 1,eax movl 0,ebx int 0x80 我們給這個名字取名為exit.s,這個程式什麼也沒有做,只是呼叫了li...