# 根據源**命令修改
as maximum.s -o maximum.o
ld maximum.o -o maximum
# 用於檢視程式返回給作業系統的狀態碼
# 狀態碼儲存在 %ebx 通用暫存器中
echo
$?
# 目的: 尋找一組給定資料項中的最大值
# 輸入: 無
# 輸出: 返回一組資料項中的最大值, 執行結束後使用 echo $? 檢視
# 變數:
# %edi 儲存正在檢測的資料項索引
# %eax 當前資料項
# %ebx 當前已經找到的最大資料項
# data_items 包含資料項
.section .data
data_items:
.long 3, 67, 34, 222, 45, 75, 54, 34, 44, 33, 22, 11, 66, 255
end_data_items:
.section .text
.global _start
_start:
leal data_items, %eax
leal end_data_items, %ecx
movl (%eax), %ebx
# set the first as the biggest
start_loop:
cmpl %ecx, %eax
je loop_exit
addl $4, %eax
cmpl (%eax), %ebx
jge start_loop
movl (%eax), %ebx
jmp start_loop
loop_exit:
movl $1, %eax
int $0x80
# 目的: 尋找一組給定資料項中的最大值
# 輸入: 無
# 輸出: 返回一組資料項中的最大值, 執行結束後使用 echo $? 檢視
# 變數:
# %edi 儲存正在檢測的資料項索引
# %eax 當前資料項
# %ebx 當前已經找到的最大資料項
# data_items 包含資料項
.section .data
data_items:
.long 3, 67, 34, 222, 45, 75, 54, 34, 44, 33, 22, 11, 255
items_length = . - data_items
.section .text
.global _start
_start:
movl $items_length/4-1, %ecx
movl $0, %edi
movl data_items(,%edi,4), %eax
movl %eax, %ebx
start_loop:
cmpl %edi, %ecx
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
int $0x80
列表的終止位址如同列表的起始位址一樣定義, 使用(end_date_items:)記錄位址;
(leal data_items, %eax) 引數是標準格式中的記憶體位置, 但並不載入記憶體位置的內容, 而是載入計算得出的位址; 對比(movl data_items, %eax) 則是載入對應記憶體位置的內容, 此處即第乙個數字 3;
遍歷陣列, 每次訪問的記憶體位置自動加4(型別占用的儲存位置), 終止條件是訪問的記憶體位置變成陣列的終止位置;
(items_length = . - data_items) 定義了符號 items_length, 其中 (.) 代表當前的儲存位置, 不包含 items_length 的記憶體位址, 表示式的含義就是計算當前記憶體位置與符號 (data_items) 之間的差值, 結果等於陣列中的元素個數 * 4並儲存在items_length中;
其後的操作就如同索引定址方式, 計算得到元素的個數(除以型別占用的儲存位置), 偏移量從0開始(減一);
深入理解程式設計 使用linux組合語言
資料型別(待完成)
跳轉指令(待完成)
2020 12 08 Linux組合語言 四
根據源 命令修改 as maximum.s o maximum.o ld maximum.o o maximum 用於檢視程式返回給作業系統的狀態碼 狀態碼儲存在 ebx 通用暫存器中 echo section data msg string hello,world n len msg sectio...
linux彙編必讀
個人認為程式就是用來處理資料的,所以最要緊的是解決輸入與輸出的問題,還有乙個要緊的問題就是我們能在螢幕上看到輸出結果,下面我說說我在看linux下面彙編 的時候的一些感想,以及linux下面彙編和dos下面的個人認為的最主要的不同,在dos下面主要就是呼叫dos中斷和bios中斷 比如返回系統是 m...
Linux彙編初識
2011 06 11 20 29 02 分類 x86與arm 標籤 movl 彙編器linux att 舉報 字型大小訂閱 hello.s intel彙編的注釋用的 而att用的 display a string hello,world.section rodata msg ascii hello,...