2020 12 04 Linux組合語言 二

2021-10-11 08:29:59 字數 2327 閱讀 9072

# 根據源**命令修改

as maximum.s -o maximum.o

ld maximum.o -o maximum

# 用於檢視程式返回給作業系統的狀態碼

# 狀態碼儲存在 %ebx 通用暫存器中

echo

$?

# 目的: 尋找一組給定資料項中的最大值

# 輸入: 無

# 輸出: 返回一組資料項中的最大值, 執行結束後使用 echo $? 檢視

# 變數:

# %edi 儲存正在檢測的資料項索引

# %eax 當前資料項

# %ebx 當前已經找到的最大資料項

# data_items 包含資料項, 0 表示資料結束

.section .data

data_items:

.long 3, 67, 34, 222, 45, 75, 54, 34, 44, 33, 22, 11, 66, 0

.section .text

.global _start

_start:

movl $0, %edi

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

int $0x80

# 目的: 尋找一組給定資料項中的最小值

# 輸入: 無

# 輸出: 返回一組資料項中的最小值, 執行結束後使用 echo $? 檢視

# 變數:

# %edi 儲存正在檢測的資料項索引

# %eax 當前資料項

# %ebx 當前已經找到的最小資料項

# data_items 包含資料項, 88 表示資料結束

.section .data

data_items:

.long 3, 67, 34, 222, 45, 75, 54, 34, 44, 33, 22, 11, 66, 88

.section .text

.global _start

_start:

movl $0, %edi

movl data_items(,%edi,4), %eax

movl %eax, %ebx

start_loop:

cmpl $88, %eax

je loop_exit

incl %edi

movl data_items(,%edi,4), %eax

cmpl %ebx, %eax

jge start_loop

movl %eax, %ebx

jmp start_loop

loop_exit:

movl $1, %eax

int $0x80

(%edi) 中存放資料項的索引, 從 0 開始(代表距離初始位置的偏移量)

(data_items(,%edi,4)) 從資料項中取出對應下標的資料;起始位置(, %索引暫存器, 字長)字長取決於資料項的資料型別(.long, 4個位元組)

跳轉指令分為無條件跳轉(jmp)和有條件跳轉(je, jle).

(jmp start_loop) 直接跳轉到 start_loop 符號標識的程式位置

(cmpl $0, %eax

je loop_exit) 有條件跳轉指令都需要跟在比較指令之後, 根據上一命令的結果進行跳轉; 此處判斷(%eax) 中的內容和 1 是否相等, 若相等則跳轉, 否則繼續執行下一條語句

兩個程式的不同之處

a. 資料項的最後乙個資料不同(目的是標識最後乙個元素); 在查詢最大值中, 應選擇較小的數值; 在查詢最小值中, 應選擇較大的數值

b. 判斷迴圈是否終止的有條件跳轉語句, 查詢最小值中, 使用 (jge) 替換 (jle)

c. (jge a, b) : if (b >= a) do…; (jle a, b) : if (b <= a) do…

深入理解程式設計 使用linux組合語言

2020-12-04-組合語言的主要型別

跳轉指令(待完成)

2020 12 04常用彙編指令認識

6.常用彙編指令的認識 軟體破解常用彙編指令 二 算術運算指令 add 加法.adc 帶進製加法.inc 加 1.aaa 加法的ascii碼調整.daa 加法的十進位制調整.sub 減法.sbb 帶借位減法.dec 減 1.nec 求反 以 0 減之 cmp 比較.兩運算元作減法,僅修改標誌位,不回...

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