- 1、本文档被系统程序自动判定探测到侵权嫌疑,本站暂时做下架处理。
- 2、如果您确认为侵权,可联系本站左侧在线QQ客服请求删除。我们会保证在24小时内做出处理,应急电话:400-050-0827。
- 3、此文档由网友上传,因疑似侵权的原因,本站不提供该文档下载,只提供部分内容试读。如果您是出版社/作者,看到后可认领文档,您也可以联系本站进行批量认领。
查看更多
教科书系统程式-组合语言
第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 記憶體
0028 2B 00 00 30 =CALL [0x30]
ALU (1)
暫存器 002C
(加法運算)
00 00 00 5C
(3)
PC = 00 00 00 2C 005C
IR = 2B 00 00 30
(CALL [0x30]) (2)
LR = 00 00 00 2C
圖3.1 指令CALL [0x30] 的執行過程
指令 RET 的執行過程
記憶體
ALU
0028 2B 00 00 30 CALL [0x30]
(加法器…) 暫存器
PC=002C … …
PC =00 00 00 70 PC=0070 2C 00 00 00 RET
IR = 2C 00 00 00
(RET) 將LR 放回 PC
LR = 00 00 00 2C
圖3.2 指令RET 的執行過程
多層次的副程式呼叫
參數的傳遞方法– 使用堆疊
避免上下層函數用到同一個暫存器,所產生的覆蓋現象。
將 LR 儲存到堆疊中,以免在下一層 CALL 返回位址被覆蓋掉。
範例3.12 的片段
f1: i
原创力文档


文档评论(0)