第7部分-Linux x86 64位彙編 AT&T彙編示例二
示例——找出最大值
代碼max.s如下:
# %edi - 被檢查數據條目的索引
# %ebx – 最大數據條目
# %eax – 當前數據條目
# # The following memory locations are used:
# # data_items – 保持數據條目. 0用於接收數據條目
.section .data
data_items: #數據
.long 3,67,34,222,45,75,54,34,44,33,22,11,66,0
.section .text
.globl _start
_start:
movl $0, %edi #移動0到索引寄存器
movl data_items(,%edi,4), %eax #加載第一個數據
movl %eax, %ebx # 第一個數據爲最大
start_loop: # 啓動循環
cmpl $0, %eax # 確認是否到最後一個數據
je loop_exit
incl %edi # 加載到下一個值
movl data_items(,%edi,4), %eax
cmpl %ebx, %eax # 對比值
jle start_loop # 是否大於原最大值
movl %eax, %ebx # 更新最大值
jmp start_loop
loop_exit:
movl $1, %eax # exit() 系統調用
int $0x80
編譯:as max.s -o max.o
鏈接:ld -o max max.o
執行./max, 然後通過#echo $? 進行輸出結果。