![post-title](https://i.ytimg.com/vi/_RsaNzZFuUU/hqdefault.jpg)
8051 組合語言 範例 在 コバにゃんチャンネル Youtube 的最佳貼文
![post-title](https://i.ytimg.com/vi/_RsaNzZFuUU/hqdefault.jpg)
Search
至於為何會出現Illegal instruction,根據Scott Tsai大大的提示,當你的程式碼跑完後,接下來記憶體有啥CPU就跑啥,跑到不認識的opcode當然就GG了。 範例:版本三 .text . ... <看更多>
#1. Chap-4_8051Assembly language 1002 v1.pdf - ISCI LAB 智慧 ...
Principle of Microcomputer. 8051 Assembly Language. 3. Assembly Language Program Format. 1. 組合語言程式之編撰,通常有四個欄位(Fields).
#2. 8051單晶片實作
工具篇. 第3章Keil u Vision投影片. -範例ch3A: Keil工具程式的一個完整操作練習. 第4章8051指令集投影片 ... 組合語言程式. C51語言程式. -範例:ch6A_1:動態廣告燈 ...
#3. Page 5 -
... 附錄二8051 組合語言程式範例(1) ..................................................174 附錄三8051 組合語言程式範例(2) .
#4. 組合語言Assembly $符號與跳轉指令的運用(以MCS-51為例)
組合語言 中經常會用到跳轉指令 這時候就要想一個合理的lable名稱但有些 ... 關於rel的解釋(節錄自Atmel 8051 Microcontrollers Hardware Manual):.
#5. 林淵翔_微算機原理及應用_Unit 3-3_組合語言程式範例
DeltaMOOCx 台灣科技大學微算機原理及應用(林淵翔老師) 組合語言程式範例、程式產生步驟、8051的假指令和資料型態.
#6. 計時器控制
組合語言 的設定較複雜,在先前的組合語言範例中,不需引用8051暫存器定義檔的原因,是因為在Keil的專案(project)操作環境中,已經事先將Define 8051 SFR Names的選項中 ...
請留意上課所舉的指令範例說明。 6. ... 介紹組合語言指令(Assembly Language Instruction)與機器語言(Machine Language, machine code or hex code)的關係。前者為 ..
學習者只要發揮自己的巧思,再結合本書的範例程式模組,就能完成有趣又實用的專題。
#9. 8051單晶片設計實務:組合語言版(附範例程式) - 金石堂
書名:8051單晶片設計實務:組合語言版(附範例程式),語言:中文繁體,ISBN:9789864213214,出版社:碁峰資訊,作者:楊明豐,出版日期:2003/4/18,類別:電腦資訊.
#10. 組合語言程式問題?? - 10401
即10000+60 = 10060、然後把10060 存入BX 暫存器內。 組合語言指令,組合語言程式,組合語言教學,8051組合語言,組合語言範例,組合 ...
#11. 3-2-1 組合語言格式為了縮短程式驗證與產品發展的時問
行時之效率,仍是得使用組合語言(Assembly Language),做為微控制器發展的主要工具。因此在編寫. HT66Fx0 系列MCU 程式時,必須先暸解組合語言的格式,那麼剩下的,便 ...
#12. 新增網頁0
假指令:所謂假指令即組譯程式所提供的指令,並不是組合語言指令,因此假指令不佔記憶體位址,使用假指令可以使程式撰寫更為方便有效率。 2500 A.D. 8051 Macro ...
#13. 8051 組合語言 - Ifty
8051組合語言範例8051 c語言範例精采文章c語言thread範例,c語言範例,8051 c語言 ... 8051組合語言必修啟蒙書: 一本完全以初學者角度進行設計的8051入門指引,使用目前 ...
#14. 第一章單晶片微電腦簡介
8051 組合語言 程式是由一列一列的敘述(statement)所組成,而程式的執行則須先經8051. 組譯器編譯後,並經燒錄器燒錄至8051 單晶片中方可執行。而8051 組合語言的格式則 ...
#15. 1 微處理機原理
可執行指述:組合語言指令,可由組譯程式轉譯為對應之機械碼. – 不可執行指述:組譯程式假指令 ... 程式範例. • 範例(Exchange two words in memory) ... 8051指令集.
#16. 偉克多微電腦工作室......IO51 相關開發工具、軟硬體範例下載
執行X LED 便可以直接快速組譯+連結+轉換+下載程式到IO51板子上來執行程式在DOS 下自動產生8051 的組合語言執行檔並作測試,開發程式效率最高!!!! 相關檔案如下:
#17. [Day10] 循環指令- loop - iT 邦幫忙
組合語言 有乘法指令,不過還沒有介紹就當不知道,先用加法來模擬,哈哈哈。 assume cs:code code segment start: mov ax, 2 add ax, 2 add ax, 2 mov ax, 4c00h int 21h ...
#18. 8051指令@ 世哲的部落格 - 隨意窩
算數運算指令指令說明週期ADD A,Rn A←A+Rn 12 ADD A,direct A←A+direct 12 ADD A,@Ri A←A+Ri 12 ADD A,#data A←A+data 12 ADDC A,Rn A←A+Rn+C 12 ADDC A,direct ...
#19. 組合語言- 優惠推薦- 2022年4月| 蝦皮購物台灣
買組合語言立即上蝦皮台灣商品專區享超低折扣優惠與運費補助,搭配賣家評價安心網購超簡單! ... <姆斯>8051入門:組合語言輕鬆學(第三版) 楊明豐碁峰9789862768716.
#20. 【8051組合語言範例】資訊整理& 8051計算機組合語言相關消息
8051組合語言範例,8051 4x4計算機- 軟體兄弟,8051 4x4計算機· 軟體兄弟· 8051-組合語言-4X4按鍵掃描; 文章資訊. 4×4矩陣式鍵盤,藉由矩陣式鍵盤,可以明確的表示.
#21. 8051除法組合語言加減乘除assembly (1)
8051 除法 (1). 組合語言教學 組合語言加減乘除 組合語言rcr 組合語言lea 8051除法程式 8051除法 8051組合語言範例 8051乘法 16位元除法 · assembly - 我怎樣才能乘以兩 ...
#22. 系統程式-- 第3 章組合語言 - SlideShare
然而,在範例3.10 中,由於先宣告了int i,然後才在for 迴圈中指定i=0 的值。因此,組合語言在宣告i 時以i RESW 1 指令保留一個字組空間給i,然後才利用ST R0, i 指令將 ...
#23. 8051 入門-- 組合語言輕鬆學, 3/e | 天瓏網路書店
書名:8051 入門-- 組合語言輕鬆學, 3/e,ISBN:9862768711,作者:楊明豐,出版社:碁峰,出版日期:2013-10-20,分類:8051、Assembly.
#24. 8051單晶片實作-使用C語言| 博碩文化股份有限公司
本書使用目前最常用的8051開發工具keil C 來撰寫C語言,並同時提供8051組合語言(A51)與C語言(C51)兩套程式語言教材與應用範例。透過組合語言與C語言的相互對照以及各類 ...
#25. 常用指令排行榜(五) - 旗威科技網站
改用程式範例的方式來介紹,讓您對JMP 的指令能更容易上手。還記得我們這一連串文章 ... 我們先跳開組合語言的思考模式,. 探討一下8051 的硬體架構,接下來的文章要為 ...
#26. 8051 組合語言– 組合語言範例– Kklkkl
8051組合語言 、Arduino程式、C語言,,專題製作客服:06-7891833 Email: tn,uhf@msa ... 簡單連結範例—NASM 組合語言、跟法國人講法文; 跟x86 家族的處理器講話,就要 ...
#27. 8051入門--組合語言輕鬆學(第三版)(電子書) - Google Play
E-kniha 8051入門--組合語言輕鬆學(第三版)(電子書) od autorů 楊明豐. ... 學習者只要發揮自己的巧思,再結合本書的範例程式模組,就能完成有趣又實用的專題。
#28. 內容簡介 以電機、電子與機械等相關科系之單晶片、微處理器 ...
採用組合語言程式設計, 希望由低階單晶片原理和控制技巧,以實作為主、理論為輔,講授MCS-8051內部構造、指令執行,與輸入/輸出控制之基本知識,
#29. 8051微控制器(第4版) | 誠品線上
8051 微控制器(第4版):,全書共14章,包含微控制器簡介、硬體概要、指令集概要、計時器操作、串列埠操作、岔斷、組合語言程式設計、8051C程式設計、程式結構與設計、 ...
#30. 8051組合語言知識摘要 - 紅頁工商名錄大全
【8051組合語言知識摘要】免費登錄台灣地區的公司資料,工商指南,市場推廣,商品與服務的詢價,外包,買賣等生活資訊_上台灣大紅頁網,上網就紅。
#31. 8051組合語言 - 雅瑪黃頁網
課程名稱組合語言英文課程名稱Assembly Language 中文課程概要80x86 暫存器及其定址法,除錯程式Debug及Code View用法,指令集,副程式,巨集指令,假指令(組譯指示),鍵盤 ...
#32. x86組合語言- 第一章| 組合語言觀念
你跟美國人講話就要講英文、跟法國人講法文;跟x86 家族的處理器講話,就要講「x86 機器語言」;跟Intel 8051 單晶片處理器溝通,就講「8051 機器 ...
#33. 8051 單晶片實習教學範本
8051 是一種8 位元的單晶片微電腦,屬於MCS-51 單晶片的一種,由英特爾公司於1981 年. 製造。到現在,有更多的IC 設計商, ... 8051 組合語言程式是由一列一列的敘述.
#34. 8051組合語言程式碼美化工具全自動美化ASM51原始碼
SourceFormatX 8051組合語言程式碼美化工具(8051 Assembly / ASM51 Source Code Beautifier) 能根據8051組合語言的語法規則和用戶自定義的程式碼風格對8051組合語言 ...
#35. 我想買8051的實驗板,哪裡買得到呢? - 遊戲酒吧《秦美人》
我是8051組合語言的初學者我想買一塊實驗板來練習請問要去哪裡買呢價位大概多少 ... 8051組合語言指令,8051組合語言程式設計,8051組合語言教學,8051組合語言範例,8051 ...
#36. C:\GUIDE51.SAM -.:: GEOCITIES.ws ::.
所以學習8051的關鍵有二:一為組合語言,一為硬體(LED顯示器,DIP SWITCH等)。換句話說,軟體的目的即在推動硬 ... 本軟體磁片所附的範例程式,都是利用EP51所編譯的。
#37. 全華科技圖書公司第2章電腦結構與組合語言
第2章電腦結構與組合語言. 2.1. 本章目標. • 了解電腦的基本功能與原理. • 了解組譯程式與組合語言程式. • 了解組合語言程式的建立與執行. • 了解基本的組譯程式假指令.
#38. 8051單晶片設計實務:組合語言版 - 電腦研究員
程式模組化設計,且附有全書完整的實習原始程式檔,擴充功能設計容易,讀者可以利用書中範例組合完成各種8051控制電路。 階段式學習編排 ...
#39. 【8051組合語言】與【8051組合語言】【求助..simlab_8051問題 ...
最新的內容寄信給站長2008/05/24 高諧語言增加Java Script 與HTML 程式碼介紹2006/07/30 新增貪食蛇遊戲程式原始碼之範例高階語言教學80x86組合語言教學8051組合語言 ...
#40. 組合語言- 維基百科,自由的百科全書
組合語言 (英語:assembly language:組合語言)是任何一種用於電腦、微處理器、微控制器,或其他可程式化器件的低階語言。在不同的裝置中,組合語言對應著不同的機器 ...
#41. 8051指令表
8051 指令. 暫存器-1. 累積器:ACC,簡稱A; 乘法暫存器: B; 程式計數暫存器: PC; 堆疊指標:SP. 5 資料指標暫存器:DPTR (DPH, DPL). 1. 由一個高位元組(DPH)以及一個 ...
#42. 微算機原理與實驗
(ISBN13:9789572161210) 組合語言程式技巧與範例: 3. 鍾富昭, 8051基本原理與軟、硬體設計大全, 全華圖書, 2003. (ISBN:9789572141977) C 語言語法與範例: 4.
#43. 8051 組合語言
一、程式碼的構成. 8051編譯器有很多種,我以keil 8051 編譯器為例。 8051的程式碼可以用c語言和組合語言寫成,藉由編譯器將其編譯為機械碼以供微處理器執行。
#44. 「8051蜂鳴器組合語言」懶人包資訊整理 (1) | 蘋果健康咬一口
8051 蜂鳴器組合語言資訊懶人包(1),以計時器做蜂鳴器控制練習...組合語言的設定較複雜,在先前的組合語言範例中,不需引用8051暫存器定義檔的原因,是因為在Keil的 ...
#45. 組合語言期末報告
一、目的:開啟一個記錄著簡譜的檔案,並將該資料轉換為音樂撥放出來。 二、原理:. (一) 基本樂理:. 音樂構成的兩大要素為音符及節拍。以下分別討論:. 1. 音符:.
#46. 電子書〉8051入門--組合語言輕鬆學(第三版) - udn讀書吧
學習者只要發揮自己的巧思,再結合本書的範例程式模組,就能完成有趣又實用的專題。 全新改版自暢銷教材「8051入門輕鬆學」一書,以組合語言切入,組合語言是製造商依 ...
#47. 8051 範例
組合語言 程式. C51語言程式. -範例: ch6A_1: 動態廣告燈左旋. -範例: ch6A_2: 使用建表法做動態廣告燈展示. -範例: ch6A_3: 指撥開關輸入控制LED輸出.
#48. 8051 c 語言8051
8051 (Keil C語言(Keil C的基本架構, 前置處理器, 程式區, C語言的變數, C語言的資料型 ... 8051組合語言範例::c語言thread範例::8051 c語言範例::c語言範例::c …
#49. 8051入門--組合語言輕鬆學(第三版) 線上程式課程 - HiSKIO
8051組合語言 必修啟蒙書:一本完全以初學者角度進行設計的8051入門指引, ... 學習者只要發揮自己的巧思,再結合本書的範例程式模組,就能完成有趣又實用的專題。
#50. 8051單晶片設計實務:組合語言版(附範例程式) - Book 今年最 ...
程式模組化設計,且附有全書完整的實習原始程式檔,擴充功能設計容易,讀者可以利用書中範例組合完成各種8051控制電路。 階段式學習編排 ...
#51. 8051 c語言範例 - 資訊書籤
了解8051 c語言知識都與8051 c語言教學,8051 c語言教學找阿謙,8051 c語言實作寶典密切關係,單晶片8051 組合語言.... 9 專題製作範例99_1 影片檔. 項目符號.
#52. 組合語言課程
是組合語言程式組譯過後,可以執行的敘述。其可對應. 出機器語言位元組。 ▻ 指令包含四部分: ... 應用範例. ◦ 定義一個用於計算在10x10的整數矩陣中的單元數量的符.
#53. 8051 與AndesCore™ 的軟體差異與移植
它通常用C 來實現,可以參考後面5.2 章節的AndesCore™中斷處理函數範例。 在上面用組合語言設置AndesCore™的中斷向量表的例子中,我們需要將中斷向量表 ...
#54. 組合語言教學 - Dcog
學組合語言,再結合本書的範例程式模組,ISBN:9862768711,延伸無限想像力。 ... 受歡迎的8051開發工具,自由的教學讀本跳至導覽跳至搜尋此書是6502組合語言的指引。
#55. 組合語言實務的價格推薦- 2022年3月| 比價比個夠BigGo
HT66Fxx Flash MCU原理與實務:組合語言篇(附範例光碟). bigcoin white 2.4% ... bigcoin white 0.5%. 【二手書R2YB】e 2004~2007年二版《8051單晶片設計實務組合語言.
#56. 請教8051組合語言如何將0xff,0xff,0xff轉為16777215 - 自動控制
引用: ysc 發表於2012-9-15 08:12 PM 這是16進位轉換成十進位,既然有三位數或四位數範例可看,只要將轉換演算法搞清楚,自己拓展為6位數應該不.
#57. 組合語言語法進階 - 陳鍾誠的網站
當然,對於CPU0,雖然記憶體存取指令的定址範圍較大,但是仍有可能會不足。例如,範例一的程式表面上看起來並沒有甚麼問題,但實際上已經發生錯誤了。
#58. 8051 指令碼
再了解8051 組合語言指令及定址模式之定義,可由指令表得知: 8051 Instruction ... 紅綠燈電路圖,8051七段顯示器電路圖,8051 rs232程式[網路當紅],8051 uart範例,8051 ...
#59. 【組合語言】除法指令div和乘法指令mul | 程式前沿
【組合語言】除法指令div和乘法指令mul · 2018.07.29; 程式語言 · 《組合 · 2018.07.29; 程式語言 · 《組合 · 《組合語言》, Assembly Languge, at組合語言, 組合 ...
#60. DIP包裝40支腳位不需燒錄器(和AT89C51不同) 用ISP電路進行 ...
跑馬燈範例程式(組合語言):. LED亮燈數(2進制8位數,0為亮). 8051接線位置,P0~P3(埠0~埠3). 速度控制(10進制,1~255). 程式撰寫(編輯). 組(編)譯. 功能模擬. 組譯成功.
#61. 8051好玩專題製作--組合語言篇 - Pubu
8051 是顆歷史悠久的單晶片,很多控制器都還可以看到它的蹤影。它是硬體、韌體工程師必須學會的基本相關知識。一般學會8051 程式設計後,在學學生可能 ...
#62. Hello Linux ARM 組合語言| Jason note
至於為何會出現Illegal instruction,根據Scott Tsai大大的提示,當你的程式碼跑完後,接下來記憶體有啥CPU就跑啥,跑到不認識的opcode當然就GG了。 範例:版本三 .text .
#63. 專題報告 8051實作
大略了解如何用組合語言模擬程式執行. 3. 實作燒錄程式碼到AT89S51 的過程. 4. 研究酒精及瓦斯感測器的特性. 5. LCD 顯示方法. 6. 電話撥號電路實作.
#64. 專題製作- 8051單晶片篇(組合語言版)《台科大圖書》
本書特色☆ 》提供僅需按部就班,即可順利完成專題的PIPE-A流程與模組。 》說明PIPE-A每個模組的核心目標,提供實際範例,以迅速掌握關鍵點。
#65. 8051可以用組合語言的巨集 - Delphi K.Top 討論區
一般都可以。 給你個建議,去書局找書看看。看書上的範例。 然後決定用那一本書附的。^_^.
#66. 137 附錄一專題製作教學大綱
利用SimLab 8051 編輯組合語言的程序其步驟為何? ANS: ➢ 從基本型實習板或功能型專題板中選取任一項實習板。 ➢ 從實習板中選取範例說明,再以滑鼠左鍵點選任一個範例 ...
#67. {5}、Ch5 實作- 科技群單晶片微電腦 - Google Sites
學習組合語言 · LED變化與延遲設計 · 程式架構1 · 程式架構2 · 程式架構3 · 程式架構4 · 程式架構5 · 8051的指令集 ... 參考上面程式範例設計.
#68. Ch07 低階程式語言目標---研讀完本章後,你應該可以: 列出 ...
將一簡單的演算法則轉換成機器語言程式。 分辨出機器語言(machine language)及組合語言(assembly language) 的不同。 將一簡單的演算法則轉換成組合語言程式。
#69. 8051單晶片實作-使用C語言_百度百科
... 月19日博碩出版的一部作品,作者是林振漢。本書使用最常用的8051開發工具keil C 來撰寫C語言,並同時提供8051組合語言(A51)與C語言(C51)兩套程式語言教材與應用範例。
#70. 建立8051 與Arduino 間的串列埠通訊 - RAPOT
8051 端$ 程式可由組合語言(assembly) 或是C 語言撰寫,若是組合語言,用最陽春的記事本就可以開始寫程式了,不過比較主流的方式還是透過Keil C 的 ...
#71. 8051微控制器(第四版) - PChome 24h書店
Ch 6 岔斷. Ch 7 組合語言程式設計. Ch 8 8051 C程式設計. Ch 9 程式結構與設計. Ch 10 程式發展的工具與技術. Ch 11 設計與界面範例. Ch 12 以C語言之設計與界面範例
#72. 8051 組合語言
學習者只要發揮自己的巧思,再結合本書的範例程式模組,就能完成有趣又實用的專題。. 全新改版自暢銷教材「8051入門輕鬆學」一書,以組合語言切入,組合語言是製造商依 ...
#73. 8051 c語言8051入門 C語言輕鬆學 - FPGAB
8051組合語言範例 ::c語言thread範例::8051 c語言範例::c語言範例::c語言範例::8051 c語言教學::C語言… 8051單晶片C語言設計實務–使用Keil C(附範例程式)吵架,我想大多數的 ...
#74. 8051 c語言
8051 C語言必修啟蒙書: 本書是以從未學習過任何單晶片的入門初學者角度,來設計 ... 8051組合語言範例8051 c語言範例精采文章c語言thread範例,c語言範例,8051 c語言 ...
#75. 工研院產業學院-公開課程
課程名稱:8051單晶片C語言進階實作班. 課程大綱: ... 8051 組合語言設計發展流程。 ... 範例單元包括多個常用易懂週邊介面,學員在很短時間即可了解其軟硬體原理。
#76. 組合語言中的JMP指令[論壇存檔] - PCZONE 討論區
[論壇存檔] 組合語言中的JMP指令-- 其他軟體討論版. ... 程式範例如下: ... 此指令與8085之“ JMP address “相同,8051需要2個機械週期,8085需要3個 ...
#77. 微處理機
範例 : 將SFR 中位址90H (P1) 內的資料存入A 累加器MOV A,90H ; 讀取P1 資料至累加器A ... 高階語言(C C++ Java) 組合語言(8051 或是80x86) 機器語言(8051 或是80x86) ...
#78. 組合語言的大問題請高手來幫我 - 11001
11023 組合語言的大問題~~~~~~~~~請高手來幫我~~~~ 先說不會叫你們全部都回答**把你們會的都回答我想要知道算法跟原因(課本有答案沒解釋)1.以2個位.
#79. 組合語言常用指令 - Vfjopt
3天學會單晶片8051,保證學會,教師甄試,指令,專題,C語言,教學,燒錄器,timer,組合語言… ASM(組合語言):熟悉DJNZ指令的用法。 C51(C語言):熟悉迴圈for語法的使用。
#80. 組合語言的相關問題
1234 組合語言的相關問題這是我們老師出的作業因為剛加選所以沒上到課好像要用附屬 ... 組合語言指令 組合語言程式 組合語言教學 8051組合語言 組合語言範例 組合語言 ...
#81. 好書推薦-8051單晶片設計實務:組合語言版(附範例程式)
8051 單晶片設計實務:組合語言版(附範例程式)限量搶購網友評鑑4顆星,還在猶豫要不要買嗎?再不買就來不及了博客來電腦-電腦硬體/組織/結構分類網友推薦想看更多 ...
#82. [心得] 個人的x86 組合語言觀念筆記- 看板ASM - 批踢踢實業坊
二、[觀念] 組合語言—Intel Style 與AT&T Style、MASM 與NASM 機器語言因為 ... 三、[教學] 簡單連結範例—NASM 組合語言與C/C++ (Windows 平台) 存成 ...
#83. [8051單晶片設計實務:組合語言版(附範例程式)]評測
8051 單晶片設計實務:組合語言版(附範例程式)物超所值網友評鑑4.5顆星,點擊圖片即可前往購買博客來電腦-電腦硬體/組織/結構分類促銷商品想看更多有關[8051單晶片設計 ...
#84. 實作8051 外部中斷(組合語言)
程式範例:. ORG00H. JMPMAIN_ROUTING. ORG03H. JMPINT0_HANDLING. MAIN_ROUTING: SETBEA;打開中斷總開關. SETBEX0;致能INT0.
#85. 組合語言範例– 組合語言指令集 - Af088
8051 單晶片實作. 課程並以開發實例為主軸,並緊密結合範例,呈現出有別於以往Android應用程式的速度與反應,創造增值效果。 有鑑於市面上Android組合語言的技術資料 ...
#86. 8051 c 語言電子書
書名:單晶片微電腦8051/8951原理與應用(c語言)(第三版)(附範例、系統光碟), ... 本書中以c語言及組合語言做編寫,學習完整且有效率。
#87. 8051入門:組合語言輕鬆學(第三版) - 美安
8051 入門:組合語言輕鬆學(第三版) from TAAZE讀冊生活網路書店- 暢銷經典, ... 學習者只要發揮自己的巧思,再結合本書的範例程式模組,就能完成有趣又實用的專題。
#88. [MASM學習筆記]第一課:數字系統與暫存器 - 電腦不難
Word:16 bits(2 bytes),在組合語言中的語法為「DW」(Define Word)。 ... 範例一:10001011(2) + 01011001(2) = 01100100(2),最高位元沒有進位, ...
#89. 8051 指令
8051組合語言範例8051 c語言範例精采文章c語言thread範例,c語言範例,8051 c語言教學,8051 c語言教學找阿謙[網路當紅],組合語言教學,1) 使用目前最受歡迎的8051開發 ...
#90. 組合語言範例 - Hostlid
組合語言 的優點,, 1, 使用助憶指令,比機器語較易學習。, 2, 低階語言程式執行效率 ... 組合語言商品優惠選擇滿足您的需求與選擇,也提供有80×86組合語言、8051 組合 ...
#91. Keil C基本操作
8051 單晶片引用C51語言,做為程式開發工具, ... 基本函式範例-延遲副程式 ... 在C語言裡,常數(constant)與變數(variables)都是為某.
#92. Keil uVision2 基本操作教學 - clementyan 筆記分享
是否要複製8051標準預設程式碼到您的專案資料夾並加到您的專案? NO ... 說明:.asm為assembly組合語言之副檔名,.c為C語言副檔名 ...
#93. 8051/8052定址法 - 呆呆的看世界
定址法(Address Mode)是組合語言中,運算碼找運算元的方法, 8051的 ... 就是運算元位址的指標(POINTER),8051/8052內部具有這種 ... 範例:MOV AX,BX
#94. 組合語言入門教程- IT閱讀
它處理的文字,自然就叫做aseembly code。標準化以後,稱為assembly language,縮寫為asm,中文譯為組合語言。 每一種CPU 的機器指令都是不 ...
#95. 8051入門--組合語言輕鬆學(第三版)(電子書)
範例 :MOV P1,#FFH CLR P1.0 結果:P1 = FEH 80. SETB C 功能:設定進位旗標 C。範例: SETB C 結果: C=1 81. CLR bit 功能:設定位元定址之位元。範例: MOV P1,#00H SETB ...
8051 組合語言 範例 在 [心得] 個人的x86 組合語言觀念筆記- 看板ASM - 批踢踢實業坊 的推薦與評價
※ [本文轉錄自 C_and_CPP 看板 #1Cis6A7c ]
作者: purpose (purpose) 看板: C_and_CPP
標題: Re: [問題] C/C++ 中的 asm 該如何學起?
時間: Tue Oct 12 03:12:07 2010
發篇筆記
一、[簡介] 機器語言與80x86
二、[觀念] 組合語言—Intel Style 與 AT&T Style、MASM 與 NASM
三、[教學] 簡單連結範例—NASM 組合語言 與 C/C++ (Windows 平台)
-------------------------------------------------------------
一、[簡介] 機器語言與80x86
大家家裡用的計算機器叫做個人電腦 (PC)。
可以拿來安裝 Windows、Linux,甚至 Mac OS X...等作業系統。
個人電腦的 CPU 演變歷史,可以說就是 Intel 的歷史。從最早的16位元CPU:
「8088/8086 -> 80286」,再演化到32位元的 80386、80486...
後來因為商標不能用數字註冊,Intel 不使用 80586 命名,從586開始,
改名為歷史上的 Pentium CPU。
AMD 也差不多是在 Pentium 時代開始慢慢成為 Intel 在個人電腦處理器上的
競爭者。
可以想見 Intel 就是個人電腦處理器的「唯一制定者」,Intel自己做新的 CPU
也要向後相容以前的東西,就像 Windows 7 也得要能執行 Windows XP 的程式一般。
你在 286 寫的程式,拿去給 486 的 CPU 也要能跑。
所以「個人電腦 CPU = x86 家族」...好啦,可能有人不認同這句話。
你跟美國人講話就要講英文、跟法國人講法文;
跟 x86 家族的處理器講話,就要講「x86 機器語言」;
跟 Intel 8051 單晶片處理器溝通,就講「8051 機器語言」;
在算盤本裡面介紹的處理器是「MIPS」家族,就用「MIPS 機器語言」跟其溝通。
所有處理器裡面,x86家族功能當然是最強,每一代都有增加新功能,又要向後相容,
所以其實該語言最複雜、不規則、不好學。但只用些基本的功能的話,還是過得去的。
二、[觀念] 組合語言—Intel Style 與 AT&T Style、MASM 與 NASM
機器語言因為電路關係,原始形式就是 010101 這種二進位形式,但你喜歡也可以
轉成十六進位寫出來給別人看。
下面這是一個 x86 機器語言指令 (instruction):
05 0A 00 00 00 (十六進位表示)
用人類說法就是你告訴某顆 x86 家族的 CPU:
「把你的 eax 暫存器內容取出,將其跟10相加,再把結果寫回 eax 暫存器」
用C語言表示法就是:
「eax += 10;」
機器語言形式顯然太麻煩了。
於是發明了「助憶符號」,比如用 add 代表「相加這個運算動作」;
減法動作,用符號 sub 標記;
將資料從A處複製過去B處的動作,就用 mov 助憶符號標記。
add, sub, mov...等是運算子,而 eax 暫存器跟 10 是運算參與單元 (運算元)。
如果綜合以上講的運算子跟運算元,想要寫出完整指令時,還會有一個問題!
若有 eax, ecx 兩個運算元,想要把 eax 的值取出,複製到 ecx 去
到底該寫 mov eax, ecx 還是 mov ecx, eax ?
哪邊來源?哪邊目的?
AT&T、Intel 各自有一套語法慣例。
詳細資料參考這裡:
https://www.ibm.com/developerworks/library/l-gas-nasm.html
C語言 Intel AT&T
指派運算子的 靠最左邊的運算元 靠最右邊的運算元
左邊是目的地 是目的地。 是運算結果放置處。
int eax = 4; mov eax, 4 movl $4, %eax
(暫存器名稱前,需加 % 符號;
而且4這個立即數值前,需加 $ 符號;
且用 movl 表示 move long 這麼長)
西瓜靠大邊,跟大家一起用 Intel 慣例的寫法就好。
像上面 mov eax, 4 這樣子的指令形式,都叫「組合語言」,說穿了只是把當初
的「x86 機器語言」寫成比較容易看懂的形式而已。
既然這樣,那 x86 機器語言就一套,助憶符號跟暫存器也固定那幾個。
為什麼最後卻搞出 MASM、TASM、NASM、FASM...這麼多種組合語言呢?
MASM,軟體界霸主微軟推行的組合語言 (雖然微軟最近變心去搞 MSIL 的樣子?)
NASM,在台灣是僅次於微軟的選擇方案,而且跨多個作業系統平台。文件完整、
有中文書籍在講它,而且狀態穩定。
※ FASM,較新,類似於NASM,聽說比較快?
※ TASM,老牌子,現在很少人用了,但是有 Turbo Debugger 很強大,可以
對 16 位元執行檔做偵錯,偶爾也值得一用。
上面提到的組合語言都是 Intel Style,而 AT&T 會看到的地方,就是使用「gcc -S」
功能時會出現。但是可以用 objdump 去看 Intel Style 的組語。
如果是 gdb 偵錯則直接就有選項 disassembly-flavor intel 可以切換到
Intel 風格組語。
分別用 VC 跟 GCC ,一樣寫個 C 語言動態函式庫,把某個函數輸出,
我用 VC 時,可以在函數前面加上 __declspec(dllexport) 告知 VC 將該函數輸出。
也可以寫個「模組定義檔」(*.def) 去記載哪些函數要輸出。
但是這兩個方法都是 VC 特有,不是 C 語言規定的。
同樣狀況在組合語言亦同,MASM 也有一些組譯器指令是其專有,而 NASM 沒有。
甚至在語法上,兩者也有差異。
詳細資料:https://www.nasm.us/doc/nasmdoc2.html#section-2.2
NASM 對於「LABEL 符號」是有分大小寫的,MASM 沒有分。
(這不包含暫存器名稱,沒必要非寫 eax 而不寫 EAX,
也不包含 NASM 的假指令,比如 SECTION 大小寫都可以。)
而且 MASM 有些遭詬病的語法規範,NASM 有對其改進之。
對於 MASM
「某符號」要拿來「當成記憶體位址」用時,需加上 offset 修飾。
對於 NASM
覺得微軟這樣太麻煩,直接寫就一定是當位址用,不用加 offset。
MASM 的毛病是
如果寫組譯器指令如下,去定義兩個符號: (MASM、NASM 都支援這兩個假指令)
foo equ 1
bar dw 2
equ 指令很類似 #define pi 3.141421356 (...偷用別人的梗)
dw 這個假指令,是告訴組譯器把現在這個地方,所對應的記憶體位址,
取別名叫 bar,並且寫入 double-word (4位元組) 到此處,
存放值為 0x 00 00 00 02。
此時,如果 MASM 有兩個指令如下:
mov eax, foo ; foo 因為是 equ 設定出來的值,所以 eax 會得到 1
mov eax, bar ; bar 因為是「組合語言變數」,故 eax 得到值是 2
上面兩個指令,語法格式看起來完全一致,
但如果沒去觀看 foo 跟 eax 的假指令定義,就不能判定機器碼該翻成哪個。
如果是用 NASM,因為他強制規定只要是「間接取值」者,一律需加上中括號 []。
這個間接取值,意思是第一次取到的值,不是我要的,第二次取到的值才是我要的。
可以想成「間接取值 = 二次取值」。
換言之
mov eax, foo
mov eax, bar
對於 NASM 來說,不需要去看假指令定義,
因為 bar 跟 foo 都沒有用中括號,所以兩個都做一次取值就好。
亦即 mov eax, bar 會得到 bar 對應的記憶體位址,而不是 bar 的存放內容 2。
可是 MASM 很沒規律,因為 foo 是 equ 所定義,所以 eax 得到 1 (沒間接取值);
因為 bar 是一個 dw 定義的「組合語言變數」,所以將會做「間接取值」,先取得
bar 所對應的記憶體位址後,再到該位址再取一次值。
抓4位元組得到 2 來傳給 eax。
三、[教學] 簡單連結範例—NASM 組合語言 與 C/C++ (Windows 平台)
存成檔案 xx.c
---------------------------------------
#include <stdio.h>
int plusTen(int val);
int plusEleven(int x) {
return x+11;
}
int main() {
printf("return = %d\n", plusEleven(1));
printf("return = %d\n", plusTen(0x00123456));
return 0;
}
---------------------------------------
用 VC 編譯器的話,執行指令 cl /c xx.c 可以獲得對應的目的檔「xx.obj」
從 Visual Studio 200X 命令提示字元,去下這個 cl 指令,以省略環境變數的設定
存成檔案 fun.asm
---------------------------------------
section .text
global _plusTen
_plusTen:
push ebp ;函數初始化工作
mov ebp, esp ;函數初始化工作
mov eax, 0
mov ax, word [ebp+8]
add eax, 10
pop ebp ;函數結尾工作
ret ;返回呼叫函數 (caller),eax 是存放返回值用
---------------------------------------
去下載 NASM
https://www.nasm.us/pub/nasm/releasebuilds/2.09.02/win32/nasm-2.09.02-win32.zip
解壓縮後,執行指令 nasm -f win32 D:\Desktop\fun.asm
就能獲得一樣是 COFF 格式的目的檔 fun.obj。
簡單來說就是這個目的檔跟 cl /c 得到的目的檔有一樣格式。
最後再去「Visual Studio 200X 命令提示字元」下指令 link xx.obj fun.obj
就能得到 xx.exe 完成 C/C++ 跟 NASM 函數的連結了。
※對原理有興趣可以參考《程式設計師的自我修養》一書。
section .text
是 NASM 假指令,表示從這行指令以下的內容,翻譯成機器碼後
都要放到 .text 區去。每個 *.obj、*.exe 內部都有 .text 區段。
global
是 NASM 假指令,在這裡表示要把 _function 標籤包括的機器碼
視為全域函數。
在 C/C++ 你預設寫個函數,像上面的 plusEleven() 就自然會是
這裡說的這種「全域函數」。
使用 dumpbinGUI 工具,跳去 xx.obj、fun.obj 查看符號表,就可
看到 external 字眼。表示 xx.obj 可以調用 fun.obj 裡面寫
external 的符號,反之則反。
mov ax, word [ebp+8]
這個 ebp+8 是代表 plusTen() 函數的「參數1」
查一下 stack frame 的觀念,再用偵錯軟體觀察「函數呼叫」
進入前後的堆疊、暫存器變化,應該就能理解。
要說明的是,[ebp+8] 是「二次取值」,當第一次取值得到
ebp+8 位址假設是 0x0012FF74,接著要在這個地方做二次取值,在
C/C++ 要取幾個位元組的值是看該指標的資料型態。
如果是在 MASM,則是在中括號前寫 word ptr [ebp+8] 代表 2位元組;
若寫 byte ptr [ebp+8] 則代表 1位元組。
而 NASM 跟 MASM 差不多,但必須拿掉 ptr 字眼,否則會組譯錯誤。
因C語言還沒公開前,就已經留下一堆目的檔、一堆函數,他們都用正常的命名,
一些好記的名字都被用過了,所以 C 語言在使用函數時,其實一律自動加 _ 來命名。
因此原本的 C 函數呼叫雖然是 plusTen,但在 fun.asm 裡輸出的全域函數要寫成
_plusTen 才能讓 xx.c 可以連結到。
------------------------------------
關於「目的檔」,參考這篇:
https://en.wikipedia.org/wiki/Object_file
都只講微軟平台
在 DOS 時代目的檔名稱也都是 *.obj;執行檔名稱也都是 *.exe,
但這裡的 *.obj 其實是 OMF 格式 (Relocatable Object Module Format)。
跟你在 Windows 用 VC 編譯出來的目的檔 *.obj 不同。
用 nasm -f obj fun.asm 應該就是產生 OMF 格式的目的檔?
用 nasm -f win32 fun.asm 則是產生 COFF 格式的目的檔。
更精確來說這個 COFF 格式是微軟修改過的變種 COFF 格式。
你也可以叫它 PE/COFF 格式,甚至叫他 PE 格式也行,要解讀 PE 格式,其
第一選擇當然也是微軟提供 dumpbin,而軟體 dumpbinGUI 是圖形介面的前端。
真要說的話 dumpbin 也是一個前端,其實是呼叫 VC 的 link.exe,給隱藏選項
link /DUMP /ALL xx.obj。
https://en.wikipedia.org/wiki/Portable_Executable
PE 格式不一定是 *.exe 執行檔,也可以是 *.dll 也可以是 *.obj...等。
因為 VC 編譯出的目的檔都是 PE 格式,而 VC 的 link.exe 不能處理古早的
目的檔 OMF 格式,所以上面需要叫 nasm 用 -f win32 選項去產生 PE 目的檔。
也許會有某個很強的連結器,可以把 OMF 跟 PE 目的檔連結成 PE 執行檔吧?
甚至把 gcc 編出來的目的檔跟 PE 目的檔 link 成 PE 執行檔?
看有沒有人知道囉
------------------------------------
MASM 組譯器指令清單 https://msdn.microsoft.com/en-us/library/8t163bt0.aspx
剛好看到,補充上來。
------------------------------------
(怕以後忘記,再寫篇記錄,上文不變動,新增內容於下)
16位元記憶體模型—Segment:Offset (分段記憶體模型)
32位元記憶體模型—Flat Memory Model 加 Paging
( https://en.wikipedia.org/wiki/X86_architecture )
個人電腦 x86 家族的 CPU,在 16 位元時代是 8088/8086/80286 這三位;
而 x86 家族第一個 32 位元始祖是劃時代的 80386。
8088跟8086的位址匯流排都有20條線,每條線都是一端連接記憶體,一端連接
處理器,在高低電位變化下 (0、1),總共可有 2^20 種控制變化。
換言之,依照每個記憶體位址對應一個位元組的慣例,可以定位 2^20 大小的
記憶體位址;
80286 則進化到 24 條位址線,定址能力達 2^24,即 16M 記憶體。
省麻煩,把它當成跟 8088/8086 一樣,只能定址到 1M 記憶體就好。
※ 在 x86 的術語中,記憶體位址可以分成三種:
邏輯位址、線性位址、真實位址(物理位址)
必須先「邏輯位址→線性位址」,然後接著才是「線性位址→真實位址」。
自從32位元 CPU 出現 (自 80386 後),記憶體 Model 變成 Flat Memory,
邏輯位址就已經等於線性位址了。
然後是因為有「分頁機制」武力介入,所以需要先透過分頁機制轉換,線性位址
才會變成真正的物理位址。
而分頁機制是從 80386 開始使用 (保護模式的完整版也是從 80386 開始)。
那為什麼 16 位元處理器,不使用 Flat Memory Model?為什麼當初的邏輯位址
要先經過轉換才會變成線性位址?
因為16位元CPU內部,參與運算的暫存器當時都還停留在16位元
(如:ax, bx, cx, dx),甚至最重要的指令暫存器 (IP) 也是 16 位元,
故只有定位到 0~65535 也就是 64K 記憶體的能力。
Intel 用額外提供的四個「分段暫存器」(CS、DS、ES、SS),搭配其他暫存器後
,使得每次記憶體定址方式其實是 Segment:Offset,此時這種位址表達法叫
邏輯位址。
CS 是 Code Segment、DS 是 Data Segment、SS 是 Stack Segment ...
邏輯位址→線性位址,公式是:「Segment Register * 0x10 + Offset」
假設我們有個程式,裡面的「全域變數」(不是放在堆疊的那種區域變數),
有個很大的整數陣列,總共有 128K。當程式執行時,這些資料區段假設放在
「線性位址=物理位址」的 0x0 ~ 0x1FFFF 這段連續的記憶體空間裡。
在邏輯位址(以寫程式的角度去觀看的位址),這 128K 資料會被分成兩段,
第一段是 DS=0 且 offset = 0x0000~0xFFFF,第二段是 DS=1 且 offset
= 0x0000~0xFFFF。
換言之,如果我要把某陣列元素移到 ax 暫存器,指令可能長這樣
mov ax, word ptr[0x1234]
如果執行這行時 DS=0,則會取到物理記憶體位址 0x01234 處 (第一段);
如果執行這行時 DS=1,則會取道物理記憶體位址 1*0x10 + 0x1234 = 0x11234。
若要讀取最後一個位元組到ax,只要執行以下指令即可:
mov ds, 1
mov al, byte ptr[0xFFFF]
因為不知道當時的 DS 值為多少,所以保險點,先設定 DS,然後因為 ax 是
16 位元,不必用到這麼大。所以用 al 存放即可。 al 就是 ax 暫存器
低 8 位元別名。
(ax 在 32 位元以上的 CPU 時,其實也是 eax 暫存器的低16位元處別名)
現今的執行檔,比如 PE 執行檔,往往內部都有分 .text (.code)、.data,
可能就是承襲當初的記憶體分段機制?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.140.240
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.8.128.171
... <看更多>