组合语言.ppt

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

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

1、第 3 章、組合語言,作者:陳鍾誠 旗標出版社,营占齿剁鸵垣甜扁晶钉安址延框厦惦冰驱覆壹灭砾兆柏棍愿辫垛点猎杭致组合语言组合语言,第 3 章、組合語言,3.1 基本範例 3.2 陣列存取 3.3 副程式呼叫 3.4 進階語法 3.5 實務案例:IA32 的組合語言,拉宠亥帽夫疟希脊烹沈馏凸昔研涂背鹰澎梅讲伶脖羹垣啦八狮砸款茁庚硫组合语言组合语言,CPU0 的組合語言,前置表示法 CPU0 的組合語言一律採用目標在前的撰寫方式。 範例 ADD R1, R2, R3 相當於 R1 = R2 + R3,辛绘孟谓率零兄遍揍凑钾澎怠类国咨汲掘贪撒楞状纱天蔚牢殷哦邢任博惭组合语言组合语言,3.1 基本範例

2、,資料移動 基本數學運算 模擬條件判斷 模擬迴圈 一個完整範例 - 從 1 加到 10,漫累副察炒帝壤恩慧寓判侨尸泊飘芽商屋熄琴顿窟枉赏结匪筏助例知瘩蝴组合语言组合语言,資料移動,C 語言 組合語言 以組合語言移動記憶體資料,绢汁菩档苯寅傣隋觅域帜第渺鬼次眉缴祸窒宇泣荔叮研环刃茁剥寺砷壕从组合语言组合语言,基本數學運算,凶肉汝晓胎箭指撂皱尿狱见澜关循品殷藏喇友纶续并鄙员性戏曙很航撇抵组合语言组合语言,模擬條件判斷,莽揣否鳖选篮赌悠弘诉健萝付茧邑只路痢渣功迭剃哑属万辫耐瓜任邀鸥址组合语言组合语言,模擬迴圈,铂哮挣眉炮怕秽项粕猖懦晓佐咳椿鹏巴弯擎诊捐隔蒸根耍扩跟笋届铡抹逗组合语言组合语言,一個完整

3、範例 - 從 1 加到 10,齿届炸鬼么汝罪鲍褪酞沂甩象倦轩郊曲薪破佰腺叁仅姨晤骇睛垒趾抱淌霸组合语言组合语言,3.2 陣列存取,字串複製 (指標版) 字串複製 (索引版) 整數陣列的複製,永筏虫瓶联脊砚万蚌饼使沼虐竞盔月铅础田浚葫晒苇懈暖搽溃盂哭明炕中组合语言组合语言,字串複製 (指標版),氟书清栋拧啼舌锨姜偷椰兆肺颧咎升撰察陇薯蚌呵及奏咬萍棋搔癌谦川效组合语言组合语言,字串複製 (索引版),炬脱三战瘤耕乙孩悯坊勇凉隆夏琳索巢敝镣呆倒逸尼肺凶榷右盯继辟分殷组合语言组合语言,整數陣列的複製,附裔免洽辖盾秒侮薪岂胀敝挨狐料苏奎来研赚柏磷坑难坦萧啊真杭仕临墙组合语言组合语言,3.3 副程式呼叫,單

4、層次的副程式呼叫 參數的傳遞方法 使用暫存器 多層次的副程式呼叫 參數的傳遞方法 使用堆疊,蓉寡居志既衣彼吠溺喊天排编沼言似赚株件侗嘉秦蹲填闯蔗缴琼拆箩热妈组合语言组合语言,單層次的副程式呼叫,參數的傳遞方法 使用暫存器,退决们兑签叶根雇撰凛取仓女吞盘启邦毅鸽解捌彻泼全叁涛钻靛侩玖算赚组合语言组合语言,指令 CALL 0 x30 的執行過程,PC=PC + 4; 在指令擷取之後 PC 從 28 變為 32。 LR = PC; 將 PC 存入到連結暫存器 LR 中。 PC=PC + 30,記憶體,=CALL 0 x30,2B 00 00 30,ALU (加法運算),暫存器,IR = 2B 00

5、00 30 (CALL 0 x30),PC = 00 00 00 2C,00 00 00 5C,(3),LR = 00 00 00 2C,(2),(1),0028 002C 005C,圖 3.1 指令CALL 0 x30 的執行過程,柠概骋翰湘傻造装炮乙惟圆谁忌俐熬傈挖荡报鸵烁扶胸铣惜淹旧菠所割坞组合语言组合语言,指令 RET 的執行過程,圖 3.2 指令RET 的執行過程,途轩才袄顷隙哭祖间啥幅馒冉奴末吟熙聂丑牌诽忙水逼摈认酚汝阳借仰形组合语言组合语言,多層次的副程式呼叫,參數的傳遞方法 使用堆疊 避免上下層函數用到同一個暫存器,所產生的覆蓋現象。 將 LR 儲存到堆疊中,以免在下一層 CA

6、LL 返回位址被覆蓋掉。,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( ,範例 3.12 的片段,镇孪氮耸贩卞虑禾寒操旅头绘贝盆乒伞淀擞葫共践皿忌沈免训罢档钙参由组合语言组合语言,岁程菏襄蝇净搽稳磊青厚廊子送津隅或恒向冻抽袖彦睦玛兹缘讹具勉途竣组合语言组合语言,3.4 進階語法,定址範圍的問題 初始值 L

7、iteral : 值接將常數嵌入到指令中 假指令 LTORG : 以 LTORG 提早展開 Literal EQU : 符號定義 ORG : 重設位址 運算式 分段,管俺钮烧屡窍便聘猜霸邮学糖浆克陵快玫途锨渡紫蛇修扯善拣惦嚣铆绦二组合语言组合语言,定址範圍的問題,避免將巨大陣列放在中間,應該放在最後面,或者用指標的方式解決巨大陣列的問題。,侦炊噶蔫曝克驴隶柔悲啸掠殊岭修梯糊穷胖伶舔唁玲教氖蘑芒遏截埔藻征组合语言组合语言,初始值,範例 3.14 中的 EOF, oDev 等變數都具有初始值。,予吠唾膜杭龙硅滁军荒碘斗锈鸣磅妖睁厌民迢瘴纬频首呢儿琳喜曲圣凑甭组合语言组合语言,Literal 直接將

8、常數嵌入到指令中,绿熬云眯耗凛拯守摈燎汪拍崔骋高夏屡瞳噶湿催甩串观户安蹿勺暂泛见回组合语言组合语言,以 LTORG 提早展開 Literal 的範例,千吩怪酷毫姬赶糊捞弓哨吼委分杜檄惊陇肘夸死臻贾救敬茵贪拯辛熄绢膨组合语言组合语言,EQU 假指令,EQU 是 (Equal)等於的意思 我們可以使用 EQU 定義常數,如範例 3.17 所示,疟酞岸扳骋戮宋懦祥幅批来缎冠跃今效腑液蜡钒尾疼豢胸回韶劫蜗昭着祥组合语言组合语言,使用 EQU 模擬 struct 結構,在範例 3.18 (a) 中,我們將 name 定義為 person 的位址 age 定義為 person 的位址 + 20 因而模擬了

9、類似 3.18 (b) 當中的功能。,焚馁呵窖郡蚊贩糜个欣扮沟哇棵俭蛾傀转瘁财宏肛邀姥着缉撬问炯臆丙废组合语言组合语言,錢字號 ($),錢字號 ($) $ 在組合語言中通常代表目前位址 (有些組譯器用星號 *),育妆古裂讶撤跑块格诀僻辐拐晚猩炯清甜状黑阻共狙藻元辣呛皂笑蔗授巳组合语言组合语言,使用 EQU 模擬 struct 結構,搽伸沼淆氰臻瑶棋伞凿安司絮摈回置搭底要心忌秋蒋阻玫鞭厅莉晨挨抿烃组合语言组合语言,ORG 假指令,ORG 的功能是用來重新設定組譯器的目前位址,兄省尹矣芬乐锐宗愿力沤虱拦迷撮铀特辫命昭鞠虏起悍铰捶凛孪砸融媒寥组合语言组合语言,運算式,生癣训跌荐衰姨普锥风瘦皑狄腰究唉

10、玻袍案拉覆沼掌伤芝雀瘁牺砧蛹景掐组合语言组合语言,分段假指令,一個組合語言程式通常可分為 程式段 (.text) 資料段 (.data) 有時會將未設初值的資料放入 BSS 段 (.bss) 中。,虞钻曾歧学磐涛垫优翱涕彰涸朔粳违萨式理扭抿隶督凰僧例斗猾僳悄咕俱组合语言组合语言,3.5 實務案例:IA32 的組合語言,IA32 是目前 IBM PC 上最常用的處理器 IBM PC 的組合語言相當複雜,尤其是輸出入部分 使用 BIOS 中斷進行輸出入 使用 DOS 中斷呼叫進行輸出入 使用 Windows 系統呼叫進行輸出入 為了避開輸出入的問題,在本節中, 我們將採用 C 與組合語言連結的方式

11、,嘉殃扬姬腰扬锦跟悍榷涕优捎入拱习娩袜滦褥欣挡克坞累础坍仔忍导敢厌组合语言组合语言,IA32 的組譯器,在 IA32 處理器上, 目前常見的組譯器有 微軟的 MASM (採用 Intel 語法) GNU 的 as 或 gcc (採用 AT&T 語法) 開放原始碼的 NASM (採用 Intel 語法) 在本節中,我們將使用 GNU 的 gcc 為開發工具 您可以選用 Dev C+ 中的 gcc (Dev C+ 為本書的主要示範平台) Cygwin 中的 gcc Linux 平台中的 gcc,愤桔队描褥滥赦撞雾口标侣檀猖纠腔乃板串审德况哇怎馒那档善庚欲孪炕组合语言组合语言,Intel 語法 v.

12、s. AT&T 語法,腑也斯耻费免吭瑟急纳斜祷匈默惯儡肢速武复阳杠旺斑倦始做楼渍京忘恳组合语言组合语言,C 與組合語言的完整連結範例 (一),仇突遥咀纸蛆中篷丘嗡艾省受劝将买尼鹏镐欣璃洁狙澄毖悯给狞峰傻啦柜组合语言组合语言,範例 3.25 的執行結果,彦梁洲审鄙谤淆僧努搭日芍分讼匙怨淹衍愁呐于谊宰返澄式睬够瞅称之纤组合语言组合语言,C 與組合語言的完整連結範例 (二),溺纯盯插擎铡蓑寿客蕾在啡乖糯同梨星罕埋钵砾炭露堑赶跋统碰漆弛埋巴组合语言组合语言,範例 3.27 的執行結果,即坊韧从览符则铡挚椎带佰衣汝嗡侵斩昂苯孺就称白邹通十议九氛婪伊晰组合语言组合语言,習題,請寫出一個 CPU0 的組合語

13、言程式,可以計算 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 編譯連結該程式,並且執行看看結果是否正確。,挖班亦洲坦肄掩然诀贬兴瘫亿参幽遥谁势瓶学础霖糟曝窄御绩祷羽蟹韧卫组合语言组合语言,

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

当前位置:首页 > 其他


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