Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
系統程式 第 3 章 -- 組合語言
Search
陳鍾誠
April 14, 2022
Education
520
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
系統程式 第 3 章 -- 組合語言
陳鍾誠
April 14, 2022
More Decks by 陳鍾誠
See All by 陳鍾誠
第 6 章、巨集處理器
ccckmit
0
180
第 7 章、高階語言
ccckmit
0
260
第 9 章、虛擬機器
ccckmit
0
180
第 8 章、編譯器
ccckmit
0
310
數學、程式和機器
ccckmit
2
910
語言處理技術
ccckmit
0
270
微積分
ccckmit
1
610
系統程式 第 1 章 -- 系統軟體
ccckmit
0
650
系統程式 第 2 章 -- 電腦的硬體結構
ccckmit
0
620
Other Decks in Education
See All in Education
Geografía y Fútbol: Chattanooga Geografía del Búnker de La Roja.
juanmartin2026
1
12k
Introduction - Lecture 1 - Web Technologies (1019888BNR)
signer
PRO
0
6.5k
中小規模私大の教学IRを支えるデータマネジメント ― データ基盤構築の取り組みと実務の現在地 ―
terazawa
0
200
Beyond the Prompt: Programming as a Pathway to Statistical Thinking
minecr
0
410
Requirements Analysis and Prototyping - Lecture 3 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
1.8k
生成AIとの付き合い方/ How to work with AI
kaityo256
PRO
3
740
武藤の処世術を書いてみた
mutomasa
0
130
生成AI時代に身につけるべき力を学ぶ/opcam2026
okana2ki
0
100
【新規入学者様】ainiチャット操作ガイド
ainischool
0
170
チームの鏡になるー自分の癖を知ると、チームのパターンが見えてくる@スクフェス仙台
saorimurooka
0
220
データマネジメント試験対策教材1〜データマネジメント基礎〜
yoshimura_datam
1
790
FA26 CLU MS Clinical Psychology New Student Orientation
jdbedics
0
170
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
530
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
310
Building Adaptive Systems
keathley
44
3.2k
GitHub's CSS Performance
jonrohan
1033
470k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
440
Un-Boring Meetings
codingconduct
0
440
Are puppies a ranking factor?
jonoalderson
2
4k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
Into the Great Unknown - MozCon
thekraken
41
2.7k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
36k
Tell your own story through comics
letsgokoyo
1
1.1k
Transcript
第 3 章、組合語言 作者:陳鍾誠 旗標出版社
第 3 章、組合語言 3.1 基本範例 3.2 陣列存取
3.3 副程式呼叫 3.4 進階語法 3.5 實務案例:IA32 的組合語言
CPU0 的組合語言 前置表示法 CPU0 的組合語言一律採用目標在前的撰寫方式。 範例
ADD R1, R2, R3 相當於 R1 = R2 + R3
3.1 基本範例 資料移動 基本數學運算 模擬條件判斷 模擬迴圈
一個完整範例 -- 從 1 加到 10
資料移動 C 語言 組合語言 以組合語言移動記憶體資料
基本數學運算
模擬條件判斷
模擬迴圈
一個完整範例 - 從 1 加到 10
3.2 陣列存取 字串複製 (指標版) 字串複製 (索引版) 整數陣列的複製
字串複製 (指標版)
字串複製 (索引版)
整數陣列的複製
3.3 副程式呼叫 單層次的副程式呼叫 參數的傳遞方法 – 使用暫存器 多層次的副程式呼叫
參數的傳遞方法– 使用堆疊
單層次的副程式呼叫 參數的傳遞方法 – 使用暫存器
指令 CALL [0x30] 的執行過程 (1) PC=PC + 4; 在指令擷取之後 PC
從 28 變為 2C。 (2) LR = PC; 將 PC 存入到連結暫存器 LR 中。 (3) PC=PC + 30 記憶體 =CALL [0x30] 2B 00 00 30 ALU (加法運算) 暫存器 IR = 2B 00 00 30 (CALL [0x30]) PC = 00 00 00 2C 00 00 00 5C (3) LR = 00 00 00 2C (2) (1) 0028 002C 005C 圖 3.1 指令CALL [0x30] 的執行過程
指令 RET 的執行過程 記憶體 0028 CALL [0x30] 2B 00 00
30 PC=0070 ALU (加法器…) 暫存器 IR = 2C 00 00 00 (RET) PC =00 00 00 70 LR = 00 00 00 2C 將 LR 放回 PC 2C 00 00 00 PC=002C … RET … 圖 3.2 指令RET 的執行過程
多層次的副程式呼叫 參數的傳遞方法– 使用堆疊 避免上下層函數用到同一個暫存器,所產生的覆蓋現象。 將 LR 儲存到堆疊中,以免在下一層
CALL 返回位址被覆蓋掉。 f1: POP R2 取得堆疊中的參數 PUSH LR 保存 LR ST R2, t LD R3, pt PUSH R3 CALL f2 ST R1, b ADD R1, R1, R1 POP LR 恢復 LR RET 返回 t: RESW 1 b: RESW 1 pt: WORD t int f1(int t) { int b = f2(&t); return b+b; } 範例 3.12 的片段
None
3.4 進階語法 定址範圍的問題 初始值 Literal : 值接將常數嵌入到指令中
假指令 LTORG : 以 LTORG 提早展開 Literal EQU : 符號定義 ORG : 重設位址 運算式 分段
定址範圍的問題 避免將巨大陣列放在中間,應該放在最後面,或者 用指標的方式解決巨大陣列的問題。
初始值 範例 3.14 中的 EOF, oDev 等變數都具有初始值。
Literal – 直接將常數嵌入到指令中
以 LTORG 提早展開 Literal 的範例
EQU 假指令 EQU 是 (Equal)『等於』的意思 我們可以使用 EQU
定義常數,如範例 3.17 所示
使用 EQU 模擬 struct 結構 在範例 3.18 (a) 中,我們將
name 定義為 person 的位址 age 定義為 person 的位址 + 20 因而模擬了類似 3.18 (b) 當中的功能。
錢字號 ($) 錢字號 ($) $ 在組合語言中通常代表目前位址 (有些組譯器用星號
*)
使用 EQU 模擬 struct 結構
ORG 假指令 ORG 的功能是用來重新設定組譯器的目前位址
運算式
分段假指令 一個組合語言程式通常可分為 程式段 (.text) 資料段 (.data)
有時會將未設初值的資料放入 BSS 段 (.bss) 中。
3.5 實務案例:IA32 的組合語言 IA32 是目前 IBM PC 上最常用的處理器
IBM PC 的組合語言相當複雜,尤其是輸出入部分 使用 BIOS 中斷進行輸出入 使用 DOS 中斷呼叫進行輸出入 使用 Windows 系統呼叫進行輸出入 為了避開輸出入的問題,在本節中, 我們將採用 C 與組合語言連結的方式
IA32 的組譯器 在 IA32 處理器上, 目前常見的組譯器有 微軟的 MASM
(採用 Intel 語法) GNU 的 as 或 gcc (採用 AT&T 語法) 開放原始碼的 NASM (採用 Intel 語法) 在本節中,我們將使用 GNU 的 gcc 為開發工具 您可以選用 Dev C++ 中的 gcc – (Dev C++ 為本書的主要示範平台) Cygwin 中的 gcc Linux 平台中的 gcc
Intel 語法 v.s. AT&T 語法
C 與組合語言的完整連結範例 (一)
範例 3.25 的執行結果
C 與組合語言的完整連結範例 (二)
範例 3.27 的執行結果
習題 1. 請寫出一個 CPU0 的組合語言程式,可以計算 a=b*3+c-d 的算式。 2. 請寫出一個 CPU0
的組合語言副程式 swap,可以將暫存器 R1 與 R2 的內容 交換。 3. 請寫出一個 CPU0 的組合語言副程式 isPrime,可以判斷暫存器 R2當中的值 是否為質數,如果是就將 R1 設為 1 傳回,否則就將 R1 設為 0。 4. 請寫出一個 CPU0 的組合語言程式,可以計算出 2*2+4*4…+100*100 的結果, 並將結果儲存在變數 sum 當中。 5. 請以圖解的方式,說明在IA32處理器的 eax 暫存器中,為何會有 eax, ax, ah, al 等不同名稱,這些名稱代表的是哪個部分? 6. 請寫出一個 IA32 的組合語言副程式 swap,可以將暫存器 R1 與 R2 的內容交 換。 7. 請寫出一個 IA32 的組合語言副程式 isPrime,可以判斷暫存器 R2當中的值是 否為質數,如果是就將 R1 設為 1 傳回,否則就將 R1 設為 0。 8. 請撰寫一個 IA32 的組合語言程式,可以計算 2*2+4*4…+100*100 的結果後 傳回,然後仿照3.5.1節的作法,使用 GNU 的 gcc 編譯連結該程式,並且執 行看看結果是否正確。