Linux下組合語言 計算n的階乘

2021-07-03 20:40:15 字數 1409 閱讀 8476

用高階語言比如c語言寫個階乘很簡單,那現在就來熟悉下linux使用at&t彙編格式寫乙個程式來計算階乘吧

寫法一是 使用跳轉指令實現,寫法二是使用函式來實現

約定:本程式沒有將結果列印在標準輸出上。需要使用gdb除錯檢視

#as filename.s -o filename.o

#ld filename.o -o filename

# gdb filename

.section .data

.section .text

.globl _start

_start:

movl $1, %eax #result = 1

movl $6, %ecx # n = 5

cmpl $1, %ecx

jle .loop_exit

.start_loop:

imull %ecx, %eax

subl $1, %ecx

cmpl $1, %ecx

jge .start_loop

movl %eax, %ebx

movl $1, %eax

int $0x80

.loop_exit:

movl $1, %eax

int $0x80

--------------------函式寫法待更新-------------------------

.section .data

.section .text

.globl _start

_start:

pushl $5

call .jc

movl %eax, %ebx

movl $1, %eax

int $0x80

.jc:

pushl %ebp

movl %esp, %ebp

pushl %ebx

subl $4, %esp

movl 8(%ebp), %ebx #get n = 5;

movl $1, %eax #result = 1;

cmpl $1, %ebx

jle .l1

leal -1(%ebx), %eax

movl %eax, (%esp)

call .jc

imull %ebx, %eax

.l1:

addl $4, %esp

popl %ebx

popl %ebp

ret

檢視結果:echo $?

當然使用gdb來檢視,會更明白。

使用 echo $? 來檢視的話,貌似n超過6了結果就顯示不正確,所以還是用gdb保險

linux下的C語言開發(AT T 組合語言)

同樣是x86的cpu,但是卻可以用不同形式的組合語言來表示。在window上面我們使用的更多是intel格式的組合語言,而在linux系統上面使用的更多的常常是at t格式的組合語言。那什麼是at t格式的彙編 呢?我們可以寫乙個試試看。data message string hello n len...

linux下的C語言開發 AT T 組合語言

同樣是x86的cpu,但是卻可以用不同形式的組合語言來表示。在window上面我們使用的更多是intel格式的組合語言,而在linux系統上面使用的更多的常常是at t格式的組合語言。那什麼是at t格式的彙編 呢?我們可以寫乙個試試看。data message string hello n len...

linux下的C語言開發(AT T 組合語言)

同樣是x86的cpu,但是卻可以用不同形式的組合語言來表示。在window上面我們使用的更多是intel格式的組合語言,而在linux系統上面使用的更多的常常是at t格式的組合語言。那什麼是at t格式的彙編 呢?我們可以寫乙個試試看。data message string hello n len...