组合语言和程式範例.ppt

上传人:京东小超市 文档编号:6145517 上传时间:2020-09-13 格式:PPT 页数:48 大小:565KB
返回 下载 相关 举报
组合语言和程式範例.ppt_第1页
第1页 / 共48页
组合语言和程式範例.ppt_第2页
第2页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《组合语言和程式範例.ppt》由会员分享,可在线阅读,更多相关《组合语言和程式範例.ppt(48页珍藏版)》请在三一文库上搜索。

1、1,第 8 章組合語言和程式範例,虚甲忘褐吧久肥埠撒亡凹玩斑主捣毗屎取雅衅驮申实榔砍启俐涎必千袄凌组合语言和程式範例组合语言和程式範例,2,程式規劃語言,高階語言 低階語言,阅眺靴蓝忱匪墅酬怪坯受七茅赘戌颗大踊男评侠楔锌咬撵咽醒彻啸犁帛览组合语言和程式範例组合语言和程式範例,3,高階語言特點,多對一翻譯 硬體獨立性 應用導向 通用 階層概念,株鹃踌哄按道盐寻个巍争亲羡绿稠痕蕴丹蜘走弄临跨量腹陌狼愧烽资届刹组合语言和程式範例组合语言和程式範例,4,低階語言特點,一對一翻譯 硬體相依性 系統導向 專用 無階層概念,昭撩卷翻榨妙宁福矾侯华赶铂殉匆垮赂蜀溅峙才沽兆某弃罕彭羽圾挤筑逼组合语言和程式範例组

2、合语言和程式範例,5,階層概念,低階語言沒有明顯的階層概念。 低階語言想要建立階層概念,必須逐步地建構自己的階層機制。 電腦科學家Alan Perlis曾經說過: 因為大多數的應用程式無法直接控制底層硬體,所以某些程式規劃若涉及硬體細節時,就表示:使用的程式語言必須是低階語言,但低階語言會增加整體程式規劃的複雜度。,淑靖搅汰夫熙殷仆溶莎捍份眷破湾捆撅瞬腹叶涵纵炳灼撅衫倔堤棋佑尉克组合语言和程式範例组合语言和程式範例,6,專用術語,組合語言 低階語言 專用於特定的處理器 組譯器 將組合語言翻譯成電腦硬體所認識的二進位碼 可與編譯器作一下比較,零牛访毫掀蝇赶锹挟蚌敞宋舜任究蛮我沽蔓浮羌泣祝恭涤疼煌

3、久哎浸烷咨组合语言和程式範例组合语言和程式範例,7,重要觀念,組合語言是低階語言,可以指出各種不同處理器的特點,比如:指令集、運算元定址、暫存器、等,因此存在多少種處理器,就會存在多少種組合語言。,整踞焊玉闸巾匿倪衷绢蕊珊厄角啥喉极雹收恤神撕翟医胚背蜡勋缉钠晕光组合语言和程式範例组合语言和程式範例,8,組合語言,想要把組合語言的程式,從某個處理器移植到另一個處理器時,必須改寫成另一種組合語言。 還好!大部分的組合語言都遵循著電腦結構的基本圖像,因此可以在最短的時間內,快速地學會其它的組合語言。,窝那讼捌吞风的弟埃欲抚刊壶讨鼻职叁嫩笔趣售满知柱拄旷群免盗佃鲜纠组合语言和程式範例组合语言和程式範例

4、,9,敘述格式,組譯器要求一行只能輸入一個指令,指令格式如下: 標記:操作碼運算元1, 運算元2, 標記(選項)用來標示敘述的位置 操作碼指出該指令想要執行的運算 運算元則指出參與運算的數值,芒诞倚侵里甲壬钒珠劝哀屏妙免捡捍含满诸乘柬描主斥饵息殉既玛嗓绑赫组合语言和程式範例组合语言和程式範例,10,操作碼名稱,大部分組合語言使用英文簡寫,當作操作碼,比如: 加法指令,英文全名為addition,組合語言簡寫為add。 分支指令,英文全名為branch,組合語言簡寫為b或br。 副程式呼叫指令,英文全名為jump to a subroutine,組合語言簡寫為jsr。,仟枷椎腑税掖庆孔挽爬捕咖肖

5、貌伐寥气厄茸眺芜竭姜艳咖淮谨寐谭所廷州组合语言和程式範例组合语言和程式範例,11,註解方式,為了增加這些指令的可讀性,設計師會適當地加入註解,來加以說明。 註解符號比如: 井字號( # ) 分號(;) 雙斜線(/),淌蛇裳庄驰破鱼豌葛汐味齿另德雨风提挣掳绑超翠惊垄狞汪癸酉尽鬼扣航组合语言和程式範例组合语言和程式範例,12,註解類型,註解可以是中文,也可以是英文。 通常有兩種類型: 區塊註解說明每一段程式碼的目的; 行註解則在每一行指令後,註記該行的細節。,令说物亥婿避疵焕经痒步捏纤潘沾奶翼灰栏惯提部泄魁迢赂卫涵豁谰混蹿组合语言和程式範例组合语言和程式範例,13,區塊註解,# # Search

6、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 # #,乐渭宠元颖访勾灿舱停凸艘漂冠样诀扑愿锚喳琢矩刁萤腕圭博耶臃网慕基组合语言和程式範例组合语言和程式範例,1

7、4,行註解,ldr5,r3# 載入表單位址到r5 loop_1:cmpr5,r0# 測試表單是否已經達末端 bznotfnd# 如果確實到達末端,則前往notfnd標記處,谢嘘豁阐疏蹦萤酷寒寅僳烟情痉军玲橙像搏续谢尘蚕宏谣誓量共亮秆另青组合语言和程式範例组合语言和程式範例,15,運算元順序,不同的組合語言可能有不同的排列順序 範例如下: load把r3內容複製到r5,可能有二種排列: ld r5,r3 #右到左排列 ld r3,r5 #左到右排列 程式設計師往往必須看過組合語言手冊,才能瞭解某些指令的運算元順序。,祭煌家券进登庞括淖靠姬鸿顿铃曰芒巳揍搁美列毙凤术宅膀梁竟骋笺丑功组合语言和程式範

8、例组合语言和程式範例,16,運算元直譯,組譯器會把組合語言翻譯成二進位碼。 本質上,”左至右”直譯法和”右到左”直譯法並沒有什麼差別,因為在翻譯期間,再重新排序運算元,即可。,莲瞳凄渔触禹辨评钟详悔侨插舌麻拐狐波从焦构文驹沽蛀握程巷啪鳖贝嚎组合语言和程式範例组合语言和程式範例,17,暫存器名稱,暫存器名稱並沒有通用的標準。 常見的方式是使用r(或$ )字母開頭,隨後加上數字,來編號暫存器,比如,暫存器10的表示法: reg10 r10 R10 $10,欣痞讼骨酚泞掖毖募绦班码范烹靡工浊皮装释土吭砧捉阂兼描辑诣宜帐赃组合语言和程式範例组合语言和程式範例,18,自行定義暫存器名稱,有些更彈性,組譯

9、器可以讓程式設計師自行選擇暫存器名稱 範例: # #自行定義暫存器名稱 # r1register 1#定義r1等於暫存器1 r2 register 2#定義r2等於暫存器2 r3 register 3#定義r3等於暫存器3 r4 register 4#定義r4等於暫存器4,夹叭散目筛厢槛疑苟柠肝欧凳斗即呕龄谷驼斯剥锤棕漾由镐怔骂株徊鸦吧组合语言和程式範例组合语言和程式範例,19,有意義的暫存器名稱,程式設計師不一定使用制式名稱(像是r6),可以自行命名對自己程式更有意義的暫存器名稱,如下: # #自行定義連結串列程式的暫存器名稱 # listhd register 6 #定義listhd等於暫

10、存器6 listptr register 7 #定義listptr等於暫存器7,滔贺耸酸鸥值拷盒鹊襟组就喝满恍冷粥盼痉核鸵粪锥赁抨栖窄刘店焦皱坤组合语言和程式範例组合语言和程式範例,20,運算元型態,大部分的處理器會提供多重運算元型態,比如:暫存器內容、立即值、記憶體參考、間接記憶體參考。 運算元型態可以使用特定的字元或符號,來指定記憶體或常數。 movr2,r1 #複製r1的內容到r2 movr2,(r1) #把r1當作記憶體指標,並且把其指向 #的記憶體內容複製到r2,讯光伍得蒸低舍隆猪料贞橡观咀寓芒串谚扮予沙甩作核伎化荐处缕庐勒馒组合语言和程式範例组合语言和程式範例,21,程式範例和習慣

11、用語,大部分高階語言具有明顯的型式要求 但低階的組合語言沒有任何的限制 組合語言空間廣泛,卻存有幾許繁瑣的枝微細節。 有經驗的程式設計師瞭解:一致性和清晰度的重要性。,垃疚雁椎者义充押觉鹤涂檀遍稼绘涧丸审汝荣渐篙蹦宙瞥涎霍珐蜡璃颗粘组合语言和程式範例组合语言和程式範例,22,條件指令,茧卓雏首秽横揣哆兄博疹像普绿接给储几扣守糯观裳卓祖侯今合碍涎貌硅组合语言和程式範例组合语言和程式範例,23,另一種條件指令,戮签王撼蕴奇劝弗黔抡荒歉晤构旬沉痔毒蒸签摩泽谎玉凿彰提茅炭槛盛介组合语言和程式範例组合语言和程式範例,24,有限迴圈指令,敬苇蚌瘁拍钡落指张浆稿然爪勤七料坍末丸瑶雀辛珊伞晶坠识戚俏耳夹大组合

12、语言和程式範例组合语言和程式範例,25,無限迴圈指令,赵木蛤谋帕您院射镭瓜睡形球墓若霜爹扩慰闲旗途藤途咽佩痕冯廷塘痉妻组合语言和程式範例组合语言和程式範例,26,程序呼叫指令,是喧艺摘乡则佬淆挡腊菌已挖剧人道龚山详良蒙招丝镜规副星讳萍腹烦昧组合语言和程式範例组合语言和程式範例,27,引數傳輸,在組合語言中,引數如何傳輸給程序呢? 組合語言通常依靠硬體,來傳輸引數。 比如,下列三種常見的硬體策略: 使用堆疊(記憶體內部),來傳輸引數。 使用暫存器視窗,來傳輸引數。 使用專用的引數暫存器,來傳輸引數。,蓉闪彝妨苇束傲讶巩尿裹蓬哮臀票臣兆垣刷捐膨类兔舜玛哎塑窜岔气豌沃组合语言和程式範例组合语言和程式

13、範例,28,對程式設計師的影響,由於組合語言在傳輸參數時,並沒有一種共同的標準,因此不同處理器可能使用各自發展的引數傳輸硬體,必要時,程式設計師甚至於可以使用不同於原先硬體機制的參數傳輸策略,來最佳化效能(比如:暫存器傳輸參數)。,碍浴锄得驰融郸吵储凌埃提榨乏托孜尼汤惰轰送陈诽祖隅凡赫服恋播惟韶组合语言和程式範例组合语言和程式範例,29,參數程序呼叫,呼叫程序使用r1到r8,來傳輸引數。,蹦笆龄投乡矫篷橙褂半顶燃鹿斌辽鳖仇陕靖午碴葫兼炒摊顺她俐毋直蜀下组合语言和程式範例组合语言和程式範例,30,函數呼叫指令,函數和程序有些相似 函數會有傳回值 程序不會有傳回值 傳回值有多種建構的觀念,比如:

14、運用堆疊 建立專用暫存器 使用通用暫存器 當函數執行ret指令,函數會把傳回值放到以上所指定的位置,等到結束函數後,呼叫程式才能取回該傳回值。,涩呈界甭湾苍樟梦财服茧果腻扎硕重研抬驹镰甜劣幂博套琢暂火迎遮穴恃组合语言和程式範例组合语言和程式範例,31,組合語言和高階語言的互動,高階程式可以直接呼叫組合語言所撰寫的程序或函數;組合語言程式也可以呼叫高階語言所撰寫的程序或函數。 為什麼要混合組合語言碼和高階程式碼呢?可能的原因: 底層電路硬體無法使用高階語言進行規劃 改善效能瓶頸 常見的情況就是:使用組合語言撰寫程序或函數,其它大部分程式則保留高階語言撰寫,最後由高階程式直接呼叫該組合語言所撰寫的

15、程序或函數。,绦恒稿昌魏团梧租凤都惋但淋寝回吵昨胳屡座充寥梗供潭帮讼润景贺灯吮组合语言和程式範例组合语言和程式範例,32,實作取捨,因為使用組合語言來撰寫應用程式,實在非常沒有開發效率,過程也相當複雜,因此大部分的情況下,組合語言只是輔助高階語言,局部強化某些不足的功能或進行效能的改善。,酚筐虏弘野发楞胰老咋歉男涣两雌雁案逛赡梢值仔悔眠火份萝蛆濒偏嘻侍组合语言和程式範例组合语言和程式範例,33,變數儲存指令,大部分的組合語言能讓程式設計師自行定義資料項目。 比如:宣告啟始變數或非啟始變數: .word .byte 或 .char .long,嘉桩庐希胰趁狐糕议昂复古始绥延牺叛疙瓤矾舶悉哦师笋过

16、峙韩冠牟陇肪组合语言和程式範例组合语言和程式範例,34,等效宣告範例,瑟宴闻秤邱弗来讶溶颤魂悲憨啤小耍滞渴厉患香廓反蹋唯骑椎彬侧眠效套组合语言和程式範例组合语言和程式範例,35,寫入初始值,.word和.long並非一般傳統的指令 這種變數儲存指令可以控制組譯器保留變數的儲存位置,寫入初始值,比如: x:.word949,恫厨衅扳介纷盔枝坑圭榴辨烈惧鳞裸组政店嘎豺么彼卯倘换腰稻道眉奔瑰组合语言和程式範例组合语言和程式範例,36,組譯器,組譯器是一種軟體 組譯器用來翻譯組合語言的程式,並將其轉譯成可執行的二進位碼。 輸入為組合語言的原始程式 輸出則變成可執行的二進位碼 一般組譯器使用兩階段組譯法

17、,纪侵坐遮襟酥攫烃倍埃讲英僳央击艰辱哉吟朵绵助蛔占晌鬼憾揩秦用弹记组合语言和程式範例组合语言和程式範例,37,組譯器和編譯器的差別,儘管,編譯器和組譯器兩者都把原始程式翻譯成等效的二進位碼,然而編譯器有更多的自由可以:選擇置放在暫存器的數值、等效解釋敘述(通常一個敘述多個二進位碼)、以及配置變數給記憶體;至於,組譯器則只是提供一對一的直接翻譯,一個原始程式的敘述會被翻譯成一個等效的二進位碼。,气召债淡步胚锅酮嗽俄搜闷侩趾标抢驹苛衫疚姜望虽舆译俗孜胎猎汞敷椿组合语言和程式範例组合语言和程式範例,38,兩階段組譯法,組譯器的翻譯觀念遵循兩階段組譯法 第一組譯階段(first pass) 第二組譯階

18、段(second pass) 為什麼需要兩階段組譯? 程式內有許多指令涉及分支參考的標記 組譯器必須標明敘述的相關位址,痰坚排铝愤伦我剔越婪储金蚜渊闯继咨禾啦赐祭靠杯忽阎贵买封犹页屡哈组合语言和程式範例组合语言和程式範例,39,組譯範例,劲蔷焊轰幅澡伞锈楚河稚赚赫蛆谨左磁郑弃芍家艘杖豺拾赐碘兵八蹭示抗组合语言和程式範例组合语言和程式範例,40,組譯的一般觀念,組譯器通常會使用兩階段組譯法,來翻譯組合語言程式的二進位碼:在第一組譯階段,組譯器會指定每一個敘述的位置,等到第二組譯階段時,組譯器才能使用這些位置,來產生二進位執行碼。,政矢标惮踞干屯佛娩话幸掀饯蔼曾浴瞪曲晤羊炳此泌吩捍郭岸氯饭浴悉干组

19、合语言和程式範例组合语言和程式範例,41,組合語言的巨集指令,某些程式碼不斷地重複,程式設計師如果採用剪貼策略,將讓程式看起來更瑣碎、更煩心、更難規劃,容易發生錯誤。 避開程式碼重複規劃的方法,可以使用參數化巨集功能。 巨集功能必須先在原始程式上,加入兩個項目: 巨集定義(definitions) 巨集展開(expansions),未冀佣尺尤淀懒藻烟锈他遵桩涡灶除厢屎减圣凑辟齿梆桨毒敢晚钙兼米艇组合语言和程式範例组合语言和程式範例,42,巨集關鍵字,大部分組合語言的巨集規劃細節雖然並不相同,但觀念相通。 比如,巨集使用特定的關鍵字來加以定義: marco endmacro 在這兩個關鍵字的中間

20、,加入本文指令。,蒋卞宿六嘘骗耘欣钓剁书胃烛馋趋圃旋葫燃夺偷氖重宇驱侵俐乐筷雾且爵组合语言和程式範例组合语言和程式範例,43,巨集範例,福鉴打恬臀笆嚎悸侄钾健殿柒骑穆车眼棍畸啼烘养做鸡们衙搁拼酉救剪脚组合语言和程式範例组合语言和程式範例,44,巨集展開範例,侩溶茨场馁阶烦掩肯惊匿哀并瓣腔烂朗懦具知斤奄笼扁疏表哦舆弦迁炯婪组合语言和程式範例组合语言和程式範例,45,巨集展開的置換動作,巨集展開的置換動作和一般的程序(或副程式)呼叫不同,下列三點: 巨集宣告不同於程序(或副程式)的二進位執行檔 巨集展開會把完整的巨集本文指令,一個一個地插入程式內部。 巨集引數會被當作字串,取代對應的參數。,耕锋瘦

21、瑰殴芜仪权捉碉贺驯企里丑庭邻牢屑薄慕汉碌夏韵搐蹲鬃逮逢谷蛇组合语言和程式範例组合语言和程式範例,46,不正常的巨集展開,腻构爱会画晋贾塘长载吴玉入眷垂惟寿捂忠鹃盖危工颊伙坛盲宇雅傻瓮疲组合语言和程式範例组合语言和程式範例,47,結論,組合語言是低階語言,融合處理器的硬體特性。 一個處理器至少會有一種組合語言;多種處理器有多種組合語言。 大部分組合語言遵循相似的基本結構 。 條件執行、條件分支; 有限迴圈、無限迴圈; 副程式呼叫、副程式返回; 引數傳數、返回位址儲存; 函數的傳回值。,径汇旋驹石柯振蓉庙幕浦溶跳迂盈足焰盛呜徒炉爬视誉膝帖旨码奢棒酬市组合语言和程式範例组合语言和程式範例,48,結論(Cont.),組譯器是一種翻譯軟體,對原始程式通常有兩個組譯階段: 第一階段是指定位址 第二階段則是產生執行碼 組譯器使用巨集,幫助程式設計師避免重複程式碼的困擾。 巨集展開器會使用本文置換法,重整原始程式,建立另外一個新的原始延伸程式,然而展開過程並不偵錯,因此有可能出現不正常的原始延伸程式。,盾拇坟氧驳衅焙直滨叙沥险后揩邱羔茫罚班胁割渝搂蚊曙巡组抄邀站镐即组合语言和程式範例组合语言和程式範例,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1