Linux下彙編學習 4

2021-06-02 09:17:51 字數 1147 閱讀 2599

#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...