久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1985|回復: 1
打印 上一主題 下一主題
收起左側

Keil匯編進階指南(1) - 編譯與鏈接

[復制鏈接]
跳轉到指定樓層
樓主
作為大家接觸C51點燈用的語言(也可能不是),但看見身邊大多數人仍然沿用舊版的匯編寫法,故作此指南
首先,該文章所有的內容參照keil的相關文檔,強烈建議使用keil μvision4及以上版本,另外keil的官方文檔是以編譯器版本9.61編撰的,部分內容可能未在舊版更新(比如MPL)
指路:developer.arm.com/documentation/101655/0961

編譯與鏈接

在開始進一步匯編的編程之前,我們有必要重新溫習一下整個Keil C51編譯器的運作,在官方文檔中提供了這樣一個圖



可以看見,程序并不是直接從C編譯而來,首先C要編譯成object文件,需要注意的是在這個時候文件并沒有進行鏈接,也就是所有的函數跳轉都是標記而不是地址,然后經過BL51進行鏈接,BL51會將所有的函數塊還有內存變量之類的亂七八糟的東西進行妥善安置并確定好最終的地址,然后替換掉標簽(這個過程可以看到會生成MAP文件,里面記載著所有的函數段之類的位置),這個時候所有的標記就都被抹掉了,生成的OMF文件也就是最終文件,我們燒寫所用的HEX文件是經過OH51轉了一手,μvision的調試器使用的是omf文件
我在這里插一句,在Cx51也就是C編譯器那里實際上有一些更復雜的運作,一般來講,C語言首先會被編譯成匯編,然后再形成object文件,但是對于keil來說稍稍有些復雜,在此按下不表,在以下的指南中,我們都會認為C語言會被編譯成匯編然后再形成obj,這個過程同時造就了一些有趣的bug,比如同時定義兩個名字完全相同但是大小寫不一樣的變量,例如sec和SEC,keil會提示你multiple defination,也就是所謂的名字重復,主要原因就是keil的C編譯器分大小寫,匯編編譯器不分,C不報錯,因為它分大小寫,但匯編編譯器拿過來,他不管大小寫,一看倆一樣的名字,報ERROR吧
在明確了這一過程之后,我們開始進行下一步

評分

參與人數 2黑幣 +80 收起 理由
wpppmlah + 30 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:1152404 發表于 2025-6-2 11:15 | 只看該作者
感謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天综合久久 | 日韩中文一区 | 97久久精品人人澡人人爽 | 日韩一区二区三区视频 | 日韩精品久久久久久免费 | 中文字幕一区二区三区乱码 | 精品欧美一区二区三区久久久 | 中文字幕日本在线 | 精品日韩在线 | 成人毛片在线播放 | 白白色在线观看 | 日本亚洲欧美 | 国产一级免费视频 | av大片在线观看 | 永久黄网站色视频免费观看w | 久久久噜噜噜 | 久久精品一区二区三区不卡牛牛 | 黄色a一级片 | 免费黄色av | 久草资源站 | 国产成人91| 草久久| 91中文在线| 国产精品一二三区 | 国产精品欧美在线 | 日本在线天堂 | 日韩欧美国产精品 | 男男成人高潮片免费网站 | 欧美特黄 | 精品在线观看视频 | 欧美一区二区三 | 特级丰满少妇一级aaaa爱毛片 | 国产中文字幕一区二区 | 欧美日韩国产在线观看 | 午夜激情视频在线观看 | 国产综合亚洲精品一区二 | 欧美性猛交xxxx | 日韩1级片 | 国产免费黄色片 | 黄色片www | 国产小视频在线 |