2020 12 08 Linux組合語言 三

2021-10-11 15:42:54 字數 2321 閱讀 1015

# 根據源**命令修改

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,...