第3章、组合语言.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用 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 (採用 ATT 語法) 開放原始碼的 NASM (採用 Intel 語法) 在本節中,我們將使用 GNU 的 gcc 為開發工具 您可以選用 Dev C++ 中的 gcc – (Dev C++ 為本書的主要示範平台) Cygwin 中的 gcc Linux 平台中的 gcc Intel 語法 v.s. ATT 語法 C 與組合語言的完整連結範例 (一) 範例 3.25 的執行結果 C 與組合語言的完整連結範例 (二) 範例 3.27 的執行結果 習題 請寫出一個 CPU0 的組合語言程式,可以計算 a=b*3+c-d 的算式。 請寫出一個 CPU0 的組合語言副程式 swap,可以將暫存器 R1 與 R2 的內容交換。 請寫出一個 CPU0 的組合語言副程式 isPrime,可以判斷暫存器 R2當中的值是否為質數,如果是就將 R1 設為 1 傳回,否則就將 R1 設為 0。 請寫出一個 CPU0 的組合語言程式,可以計算出 2*2+4*4…+100*100 的結果,並將結果儲存在變數 sum 當中。 請以圖解的方式,說明在IA32處理器的 eax 暫存器中,為何會有 eax, ax, ah, al 等不同名稱,這些名稱代表的是哪個部分? 請寫出一個 IA32 的組合語言副程式 swap,可以將暫存器 R1 與 R2 的內容交換。 請寫出一個 IA32 的組合語言副程式 isPrime,可以判斷暫存器 R2當中的值是否為質數,如果是就將 R1 設為 1 傳回,否則就將 R1 設為 0。 請撰寫一個 IA32 的組合語言程式,可以計算 2*2+4*4…+100*100 的結果後傳回,然後仿照3.5.1節的作法,使用 GNU 的 gcc 編譯連結該程式,並且執行看看結果是否正確。 * * 系統程式 – 理論與實務 第 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] 的執行過程 PC=PC + 4; 在指令擷取之後 PC 從 28 變為 32。 LR = PC; 將 PC 存入到連結暫存器 LR 中。 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

文档评论(0)

1234554321 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档