第7部分-Linux x86 64位彙編 AT&T彙編示例二

第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 $? 進行輸出結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章