組合語言和程式範例.

Slides:



Advertisements
Similar presentations
定 格 入 格 破 格 —— 新诗仿写复习训练 仿照下列句子,再把 “ 人生 ” 比喻成 “ 大海 ”“ 天空 ” , 造两个句子。 如果说人生是一首优美的乐曲,那么痛苦则 是其中一个不可或缺的音符。 参考答案: 1 、如果说人生是一望无际的大海,那么挫折则 是其中一个骤然翻起的浪花。 2 、如果说人生是一片湛蓝的天空,那么失意则.
Advertisements

喜迎 G20 中国 CONTENTS 目 录目 录 1 中国美食 2 中国守护神 美食美食,顾名思义就是美味的食 物,贵的有山珍海味,便宜的 有街边小吃。但是不是所有人 对美食的标准都是一样的,其 实美食是不分贵贱的,只要是 自己喜欢的,就可以称之为美 食。吃前有期待、吃后有回味 的东西。美食遭遇心情的时候,
庄子思想 天地与我并生 万物与我为一 形而上的本体观念 法则、规范、不可思议之事. 庄子作品 极富想象力和浪漫色彩,擅用寓(寄托)言,《史 记》载: “ 其著书十余万言,大抵率寓言也 ” 。 又称《南华经》、《南华真经》 内篇 7 ,外篇 15 ,杂篇 11 《庄子》内容 《逍遥游》《齐物论》《养生主》《人间世》
学分制改革为大学英语教学带来的 挑战与机遇 —— 武汉科技大学交流报告. Contents 武汉科技大学外国语学院简介 一 四 我校学分制改革后大学英语教学改革探索 二 学分制改革为大学英语教学带来的挑战 三 学分制改革为大学英语教学带来的机遇.
我的未来不是梦 攀枝花市经贸旅游学校. 1. 文中案例王萍苦恼的原因是 什么? 2. 你有哪些办法可以帮助王萍? 导入 思考  谁来帮帮她?
2012江苏历史高考 重点与热点考点分析与复习.
因为爱,我们让研修果实更香甜 ——阜阳市临泉县小语1班第三期简报 编辑 葛泽付.
两汉文学及汉代诗歌.
甘肃小吃 文产二班 陶方 羊肉泡 牛肉面 暖锅.
第十課 第九味目錄 徐國能 課文 注釋 問題與討論.
近现代文学概说.
励行“三严三实” 争做新时期“好干部” 专题教育党课 国电内蒙古东胜热电有限公司张殿福 2015年6月.
市直单位财务明细信息表 填报说明 珠海市财政局 2013年12月 1.
目 录 探索社会力量参与矛盾化解新模式 创新背景 主要做法 创新亮点 取得成效 杭州市信访局(“12345”)
企业涉税业务基本知识宣传 郑州航空港区国家税务局机场税务分局 王 磊.
说课课件 感悟工业革命力量,闪耀科技创新光辉 ----《走向整体的世界》教学设计及反思 爱迪生 西门子 卡尔·本茨 诺贝尔 学军中学 颜先辉.
第5章 排版的高级应用.
周刊 总第38期 2013年6月1日 本期编辑:翁茜茜 温州滨海学校教科室主办
先秦诸子的性情人生 “语文教材微专题系列研究”之一 复旦附中 李郦.
電腦組合語言 光啟高中96學年度第2學期 第一篇 組合語言開發流程與指令格式.
Memory Pool ACM Yanqing Peng.
通用技术教学与实践 常德市鼎城区第八中学 刘启红.
美国史 美利坚合众国创造了一个人类建国史的奇迹,在短短230年的时间从一个被英帝国奴役的殖民地到成为驾驭全世界的“超级大国”、“世界警察”,美国的探索为人类的发展提供了很宝贵的经验。
计算机组成原理 北京理工大学计算机科学工程系 赵清杰 北京理工大学计算机科学工程系.
生物化学与养生 化学三班 张震.
创业计划书的编写 白城师范学院创业教育 与文化研究中心 陆东辉.
深入贯彻党的十七届四中全会精神 切实提高全区组织工作科学化水平
生物学 新课标.
——奧科特公開及內部培訓 系列課程(三)之十一
漢 字 簡 化.
关注教师、学生的应用体验 营造实用、高效的数字校园生态环境
經濟部文書作業實務 報告人:何國金.
2010年高考语文《考试大纲》对本考点的要求是:“正确使用标点符号。”能力层级为D(表达应用)。
2016年6月.
崇右技術學院 電子公文線上簽核系統教育訓練
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
经 络 学.
解读《全国文化市场技术与服务平台应用规范》
心理的力量 --兼谈教师心理压力的调适
实践 课题 周围环境对当代大学生成长的影响 指导老师:王永章 小组成员:陈荣、刘若楠、张红艳、吕雪丹、樊金芳、李惠芬、黄婧
项目办公室.
寫 作 教 學 6 電腦與我 時代改變,科技進步,電腦成為日常生活不可或缺的設備。我是二十一世紀的E世代少年,一隻滑鼠在手,樂趣無窮。
28 唯一的听众 九年制义务教育课本第十册 Contents 作者:落雪.
契約 課程:文書實務與應用 教師:黃湃翔老師.
注重物理基本思想和方法教学 讲究实效 ——2012年高考物理复习备考建议
經國管理學院 電子公文線上簽核系統教育訓練
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
第4章 处理器(CPU) 4.1 引言 4.2 逻辑设计的一般方法 4.3 建立数据通路 4.4 一个简单的实现机制 4.5 多周期实现机制.
指令集架構 計算機也跟人類一樣,需要提供一套完整的語言讓人們跟它充分溝通,以完成正確的計算工作。
College of Computer Science & Technology
一个非常简单的CPU的设计 1、组合逻辑控制器 2、微程序控制器.
奢侈稅成效分析與房市未來發展 吳中書 中華經濟研究院 第十九屆亞太財務經濟會計及管理會議 ~07.09.
习题课 第1-2次作业 孙凡.
第五章 C/C++及汇编语言的混合编程 5.1 ARM C/C++编译器 5.2 在C/C++程序中内嵌汇编指令
如何赢一个机械键盘
建国以来,大陆对台政策 金亚丽 周莎 黄运娜.
國有公用財產管理簡介 總 務 處 保管組 104年04月07日.
新个人所得税 相关政策解读.
计算机系统结构(2012年春) ----存储层次: Cache基本概念
汕头大学医学院附属肿瘤医院 医务科 药学部 2014年12月
機器語言, 組合語言, 與編譯器 參考: β 文件; 實驗 #5B; C 語言講議 當我在我的程式碼中發現一堆 麻煩時, 朋友和同事跟我說了
開放電腦計劃 報告人:陳鍾誠 2011 年 8 月 20 日 台灣開源人年會 COSCUP 2011 – 中研院
微處理機 Microprocessor (100上)
音乐1 工作坊 学习简报 (第1期) 音乐1坊主: 胡真真 2016年5月.
大学计算机基础——周口师范学院 第3章 Word字处理软件 3.8页眉与页脚.
清华大学计算机科学与技术系高性能计算研究所 郑纬民 教授 2005年5月
第三章 系統與資料庫檔案設計.
李元金 计算机与信息工程学院 第 17 讲 设备管理(1) 李元金 计算机与信息工程学院 1/
直方圖 與 折線圖.
走讀台灣旅遊計畫範本.
Presentation transcript:

組合語言和程式範例

程式規劃語言 高階語言 低階語言

高階語言特點 多對一翻譯 硬體獨立性 應用導向 通用 階層概念

低階語言特點 一對一翻譯 硬體相依性 系統導向 專用 無階層概念

階層概念 低階語言沒有明顯的階層概念。 低階語言想要建立階層概念,必須逐步地建構自己的階層機制。 電腦科學家Alan Perlis曾經說過: 因為大多數的應用程式無法直接控制底層硬體,所以某些程式規劃若涉及硬體細節時,就表示:使用的程式語言必須是低階語言,但低階語言會增加整體程式規劃的複雜度。

專用術語 組合語言 低階語言 專用於特定的處理器 組譯器 將組合語言翻譯成電腦硬體所認識的二進位碼 可與編譯器作一下比較

重要觀念 組合語言是低階語言,可以指出各種不同處理器的特點,比如:指令集、運算元定址、暫存器、…等,因此存在多少種處理器,就會存在多少種組合語言。

組合語言 想要把組合語言的程式,從某個處理器移植到另一個處理器時,必須改寫成另一種組合語言。 還好!大部分的組合語言都遵循著電腦結構的基本圖像,因此可以在最短的時間內,快速地學會其它的組合語言。

敘述格式 組譯器要求一行只能輸入一個指令,指令格式如下: 標記:運算子 運算元1, 運算元2, … 標記(選項)用來標示敘述的位置 標記:運算子 運算元1, 運算元2, … 標記(選項)用來標示敘述的位置 運算子指出該指令想要執行的運算 運算元則指出參與運算的數值

組合語言之指令行 標籤欄: 運算子欄 運算元欄 基本組合語言指令行為四欄式 ;註解欄 標籤(選用, 視情況需要使用) 運算子:指令助憶符號(必要) 運算元(通常需要) 註解(選用, 最好養成說明程式習慣) 標籤欄: 運算子欄 運算元欄 ;註解欄 10 10

運算子 指定CPU之動作, 以指令助憶符號(instruction Mnemonic)表示。 依指令用途運算元有0~3個。 標籤欄: 運算子欄 運算元欄 ;註解欄 指定CPU之動作, 以指令助憶符號(instruction Mnemonic)表示。 依指令用途運算元有0~3個。 CPU指令集格式:學習指令功能與用法。 11

指令助憶符號 指令助憶符號(instruction Mnemonic) :CPU指令集, 用簡短之英文字幫助記憶。 以MASM為例,如: mov(move 搬移、複製) 、sub(substration減)、mul( multply乘)、jmp(jump跳至位址) 、call(call呼叫程序) 加法指令,英文全名為addition,組合語言簡寫為add。 分支指令,英文全名為branch,組合語言簡寫為b或br。 副程式呼叫指令,英文全名為jump to a subroutine,組合語言簡寫為jsr。 12

CPU指令集指令說明格式與要點 指令說明格式與要點 學組合語言要件 瞭解指令集 指令集:MASM指令集、指引指令 指令名稱:簡單說明 影響旗標(狀態暫存器) 功能與用途 指令格式 學組合語言要件 瞭解指令集 指令集:MASM指令集、指引指令 13

註解方式 為了增加這些指令的可讀性,設計師會適當地加入註解,來加以說明。 註解符號比如: 井字號( # ) 分號(;) 雙斜線(//)

註解類型 註解可以是中文,也可以是英文。 通常有兩種類型: 區塊註解說明每一段程式碼的目的; 行註解則在每一行指令後,註記該行的細節。

區塊註解 #################################################### # Search linked list of free memory blocks to find a block # # of size N bytes or greater. Pointer to list must be in # # register 3, and N must be in register 4. The code also # # destroys the contents of register 5, which is used to # # walk the list #

行註解 loop_1: cmp r5,r0 # 測試表單是否已經達末端 bz notfnd # 如果確實到達末端,則前往notfnd標記處 ld r5,r3 # 載入表單位址到r5 loop_1: cmp r5,r0 # 測試表單是否已經達末端 bz notfnd # 如果確實到達末端,則前往notfnd標記處

運算元 可以是常數、記憶體變數、暫存器。 暫存器可直接使用。 常數分常數符號與數字 記憶體變數,需使用資料定義指引指令定義後,才可使用。 標籤欄: 運算子欄 運算元欄 ;註解欄 可以是常數、記憶體變數、暫存器。 暫存器可直接使用。 常數分常數符號與數字 常數符號需以指引指令先定義 記憶體變數,需使用資料定義指引指令定義後,才可使用。 18

運算元定義 定義運算元 定義記憶體變數運算元變數之MASM範例。 定義常數符號運算元常數符號之MASM範例。 定義暫存器運算元使用CPU內建之暫存器保留字。 19

運算元順序 不同的組合語言可能有不同的排列順序 範例如下: load把r3內容複製到r5,可能有二種排列: ld r5,r3 #右到左排列 程式設計師往往必須看過組合語言手冊,才能瞭解某些指令的運算元順序。

運算元直譯 組譯器會把組合語言翻譯成二進位碼。 本質上,”左至右”直譯法和”右到左”直譯法並沒有什麼差別,因為在翻譯期間,再重新排序運算元,即可。

暫存器名稱 暫存器名稱並沒有通用的標準。 常見的方式是使用r(或$ )字母開頭,隨後加上數字,來編號暫存器,比如,暫存器10的表示法: reg10 r10 R10 $10

自行定義暫存器名稱 有些更彈性,組譯器可以讓程式設計師自行選擇暫存器名稱 範例: # # 自行定義暫存器名稱 # 自行定義暫存器名稱 r1 register 1 #定義r1等於暫存器1 r2 register 2 #定義r2等於暫存器2 r3 register 3 #定義r3等於暫存器3 r4 register 4 #定義r4等於暫存器4

有意義的暫存器名稱 程式設計師不一定使用制式名稱(像是r6),可以自行命名對自己程式更有意義的暫存器名稱,如下: # # 自行定義連結串列程式的暫存器名稱 listhd register 6 #定義listhd等於暫存器6 listptr register 7 #定義listptr等於暫存器7

運算元型態 大部分的處理器會提供多重運算元型態,比如:暫存器內容、立即值、記憶體參考、間接記憶體參考。 運算元型態可以使用特定的字元或符號,來指定記憶體或常數。 mov r2,r1 #複製r1的內容到r2 mov r2,(r1) #把r1當作記憶體指標,並且把其指向 #的記憶體內容複製到r2

程式範例和習慣用語 大部分高階語言具有明顯的型式要求 但低階的組合語言沒有任何的限制 組合語言空間廣泛,卻存有幾許繁瑣的枝微細節。 有經驗的程式設計師瞭解:一致性和清晰度的重要性。

條件指令

另一種條件指令

有限迴圈指令

無限迴圈指令

程序呼叫指令

引數傳輸 在組合語言中,引數如何傳輸給程序呢? 組合語言通常依靠硬體,來傳輸引數。 比如,下列三種常見的硬體策略: 使用堆疊(記憶體內部),來傳輸引數。 使用暫存器視窗,來傳輸引數。 使用專用的引數暫存器,來傳輸引數。

對程式設計師的影響 由於組合語言在傳輸參數時,並沒有一種共同的標準,因此不同處理器可能使用各自發展的引數傳輸硬體,必要時,程式設計師甚至於可以使用不同於原先硬體機制的參數傳輸策略,來最佳化效能(比如:暫存器傳輸參數)。

參數程序呼叫 呼叫程序使用r1到r8,來傳輸引數。

函數呼叫指令 函數和程序有些相似 傳回值有多種建構的觀念,比如: 函數會有傳回值 程序不會有傳回值 傳回值有多種建構的觀念,比如: 運用堆疊 建立專用暫存器 使用通用暫存器 當函數執行ret指令,函數會把傳回值放到以上所指定的位置,等到結束函數後,呼叫程式才能取回該傳回值。

組合語言和高階語言的互動 高階程式可以直接呼叫組合語言所撰寫的程序或函數;組合語言程式也可以呼叫高階語言所撰寫的程序或函數。 為什麼要混合組合語言碼和高階程式碼呢?可能的原因: 底層電路硬體無法使用高階語言進行規劃 改善效能瓶頸 常見的情況就是:使用組合語言撰寫程序或函數,其它大部分程式則保留高階語言撰寫,最後由高階程式直接呼叫該組合語言所撰寫的程序或函數。

實作取捨 因為使用組合語言來撰寫應用程式,實在非常沒有開發效率,過程也相當複雜,因此大部分的情況下,組合語言只是輔助高階語言,局部強化某些不足的功能或進行效能的改善。

變數儲存指令 大部分的組合語言能讓程式設計師自行定義資料項目。 比如:宣告啟始變數或非啟始變數: .word .byte 或 .char .long

等效宣告範例

寫入初始值 .word和.long並非一般傳統的指令 這種變數儲存指令可以控制組譯器保留變數的儲存位置,寫入初始值,比如: x: .word 949

組譯器 組譯器是一種軟體 組譯器用來翻譯組合語言的程式,並將其轉譯成可執行的二進位碼。 一般組譯器使用兩階段組譯法 輸入為組合語言的原始程式 輸出則變成可執行的二進位碼 一般組譯器使用兩階段組譯法

組譯器和編譯器的差別 儘管,編譯器和組譯器兩者都把原始程式翻譯成等效的二進位碼,然而編譯器有更多的自由可以:選擇置放在暫存器的數值、等效解釋敘述(通常一個敘述多個二進位碼)、以及配置變數給記憶體;至於,組譯器則只是提供一對一的直接翻譯,一個原始程式的敘述會被翻譯成一個等效的二進位碼。

兩階段組譯法 組譯器的翻譯觀念遵循兩階段組譯法 為什麼需要兩階段組譯? 第一組譯階段(first pass) 第二組譯階段(second pass) 為什麼需要兩階段組譯? 程式內有許多指令涉及分支參考的標記 組譯器必須標明敘述的相關位址

組譯範例

組譯的一般觀念 組譯器通常會使用兩階段組譯法,來翻譯組合語言程式的二進位碼:在第一組譯階段,組譯器會指定每一個敘述的位置,等到第二組譯階段時,組譯器才能使用這些位置,來產生二進位執行碼。

組合語言的巨集指令 某些程式碼不斷地重複,程式設計師如果採用剪貼策略,將讓程式看起來更瑣碎、更煩心、更難規劃,容易發生錯誤。 避開程式碼重複規劃的方法,可以使用參數化巨集功能。 巨集功能必須先在原始程式上,加入兩個項目: 巨集定義(definitions) 巨集展開(expansions)

巨集關鍵字 大部分組合語言的巨集規劃細節雖然並不相同,但觀念相通。 比如,巨集使用特定的關鍵字來加以定義: marco endmacro 在這兩個關鍵字的中間,加入本文指令。

巨集範例

巨集展開範例

巨集展開的置換動作 巨集展開的置換動作和一般的程序(或副程式)呼叫不同,下列三點: 巨集宣告不同於程序(或副程式)的二進位執行檔 巨集展開會把完整的巨集本文指令,一個一個地插入程式內部。 巨集引數會被當作字串,取代對應的參數。

不正常的巨集展開

結論 組合語言是低階語言,融合處理器的硬體特性。 一個處理器至少會有一種組合語言;多種處理器有多種組合語言。 大部分組合語言遵循相似的基本結構 。 條件執行、條件分支; 有限迴圈、無限迴圈; 副程式呼叫、副程式返回; 引數傳數、返回位址儲存; 函數的傳回值。

結論(Cont.) 組譯器是一種翻譯軟體,對原始程式通常有兩個組譯階段: 組譯器使用巨集,幫助程式設計師避免重複程式碼的困擾。 第一階段是指定位址 第二階段則是產生執行碼 組譯器使用巨集,幫助程式設計師避免重複程式碼的困擾。 巨集展開器會使用本文置換法,重整原始程式,建立另外一個新的原始延伸程式,然而展開過程並不偵錯,因此有可能出現不正常的原始延伸程式。