用高階語言比如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...