🔥橘希獨家優惠🔥【HABA 德國桌遊+迪士尼DISNEY桌遊+好品格養成繪本】
🌟獨家優惠 🌟分享禮 🔥購買獨家組即贈(狂)🎁文末有彩蛋
✅團購優惠:https://gbf.tw/4aom4 (9/13(一)結團)
超多爸媽、寶貝喜愛的東雨文化桌遊開團囉!這團絕對比團購優惠更超值!
為談到「超優惠」價格,為爭取更多而延時間,讓大家久等了!
婚前的橘希跟阿捲本來就非常喜歡玩桌遊,而帶著孩子玩桌遊是因為
小捲、小Q無論是職能、語言、心理亦或是感統各種課程,都在玩桌遊?!
→職能、語言治療師以桌遊帶著孩子學習「認知、視知覺、精細動作、秩序、規則性」
→心理諮商師以桌遊訓練「受挫、忍耐、衝動控制、情緒控制與同理心」
由以上可以發現,「玩桌遊」是一種很棒的「學習旅程」。透過遊戲的互動,能在玩樂中有效率且直接學習生活中很“抽象”的認知!
「玩中學」一直是橘希最認同與嚮往的學習方式!
在家自學這段時間,幾乎每天都會帶著孩子玩桌遊,來動動孩子小腦袋也訓練他們情緒能力
上面有說到桌遊帶給孩子的心理、社會上的訓練,若能再以搭配“繪本”輔助,更能讓孩子學習與感受到情緒的抽象,進而提升該能力
『使用方式範例』
選擇一個想帶孩子學習的「感受」繪本,用繪本導引孩子內心的想法與同理,並透過桌遊來實際練習與感受,剛剛學習的情緒感受的實際狀況。
這樣的使用方式,是在一個短時間遊戲中,可以直接明瞭且感受的有效練習。而不是懞懂抽象的了解,且實際演練的學習記憶更深刻!而不斷的遊戲,在輸贏中重覆地學習與磨練心志呀!
(我手機一堆孩子因遊戲崩潰的照片與影片紀錄😂)
這些學習方法、步驟與心得,是橘希不斷在專家課程中學習到的經驗!也希望能分享給你們!
我的盼望就是夥伴們在育兒過程中更輕鬆、省力,可以快樂的陪伴孩子❤️
當然,要達到這些,現實生活上的經濟能力當然也要考量,所以我不斷地位夥伴們爭取最好的價格,希望夥伴能感受到我的用心。
/
東雨文化是很多爸媽激推的品牌,他們家的桌遊真的很棒
在他們旗下有HABA 德國桌遊與自行研發迪士尼DISNEY桌遊,不是我在說,「迪士尼DISNEY桌遊」系列CP值高到爆表,裡面的內容物超精緻有質感!
我有反應裡面的內容這麼精緻高質感,為何外盒的品質不比內容物呢?廠商回饋說,為給消費者有平價、高品質的桌遊產品,無論是卡牌、配件、紙板都是比照國際規格的精緻度來做,所以成本高!而能控制的只剩外盒了,他們還是會不斷努力進步的!
所以,我跟夥伴們說!內容物真的精緻、扎實,完全不輸國外桌遊質感,是橘希可實證的!你打開會驚嘆的喔!能以平價價格買到國外的品質!
「HABA 德國桌遊」就不用說了,每一款都是經典!會讓你愛上的❤️
「好品格養成繪本」這系列也是我帶小捲去上心理團體課程時,用到的教材,裡面使用繪本故事第三者角度觀察來詮釋10種問題行為,讓孩子深入感受故事情境,並以正向行為改變來導引孩子感受與理解。
/
🌟獨家優惠套組(🔥比團購更優惠🔥):
🔥不來用滿額加贈,贈品直接送給你!
1️⃣蝸牛賽車場-獨家優惠價(52折+免運)
蝸牛賽車場+瘋狂柵欄+小狐狸醫生
▶︎原價$1890 🔥獨家優惠價$ 999‼️
2️⃣迪士尼系列桌遊(免運+獨家贈品)加贈瘋狂玩具箱$199
彈射遊樂場 +玩出專注力-超級快手3 in 1 互動驚喜桌遊+眼明手快搶玩具+數字心臟病 +玩具大搜查
▶︎原價$2093 🔥獨家優惠價$ 950 (加贈瘋狂玩具箱$199)‼️
3️⃣好品格繪本套書(免運+二款獨家贈品)瘋狂爆爆8($199)+1-10觀察對應 TSUM TSUM系列($399)
▶︎原價$3040 🔥獨家優惠價$ 1999 (加贈二盒桌遊)‼️
(瘋狂爆爆8($199)+1-10觀察對應 TSUM TSUM系列($399))
4️⃣進口HABA 德國桌遊組合(折扣+免運)
搖搖擺擺國王+轉轉迷宮
▶︎原價$1600 🔥獨家優惠價$ 1200‼️
▍團購時間 ▍9/6(一)~9/13(一)
▍贈品 ▍
1. 凡購買【迪士尼系列桌遊套組 】1組,即贈送【瘋狂玩具箱(售價199元) 】1盒。
2. 凡購買【好品格養成繪本套書 (10冊) 】即贈送【親子互動手冊+1-10觀察對應(售價399元) + 瘋狂爆爆8(售價199元)】。
以上優惠是橘希努力爭取而來的!大家要把握機會喔!
⏰團購時間 :9/6(一)~9/13(一)23:59止
https://gbf.tw/4aom4
-----------
🎁分享送好禮:9/14公佈幸運夥伴(送出3組瘋狂玩具箱)
遊戲方式:
-幫「醒醒吧女孩們」粉絲團按讚
-此篇文章按讚+分享(記得公開唷)
-留言桌遊的好處(可參考貼文)
祝大家都開心~橘希開心❤️
「組合語言範例」的推薦目錄:
- 關於組合語言範例 在 Facebook 的精選貼文
- 關於組合語言範例 在 Germany x Taiwan 阿哩沙與班傑明的奇幻旅程 Facebook 的最佳解答
- 關於組合語言範例 在 Hiroshi的日文教學(弘の日本語教室) Facebook 的最讚貼文
- 關於組合語言範例 在 [心得] 個人的x86 組合語言觀念筆記- 看板ASM - 批踢踢實業坊 的評價
- 關於組合語言範例 在 組合語言: 從一加到十--SpAsmSum10 - YouTube 的評價
- 關於組合語言範例 在 組合語言執行模擬器 - YouTube 的評價
- 關於組合語言範例 在 紀老師程式教學網- ARM 組合語言「小抄」(Cheatsheet)... 的評價
- 關於組合語言範例 在 AB102-詳細解析PIC 16F18857 / 77 原理與應用- 使用組合語言 ... 的評價
組合語言範例 在 Germany x Taiwan 阿哩沙與班傑明的奇幻旅程 Facebook 的最佳解答
#小小人類出版 #點點書
#開放海外訂購 #德國也能買
#居家防疫買什麼
因應居家防疫
即日起使用我的網址訂購小小人類出版社
的圖書都可以享有8折優惠!!
另外配合防疫在六月14號前
更是有六款圖書組合特價199元喔
價錢非常優惠喔喔喔!!
➡️購買傳送門在這
https://reurl.cc/pm1KGa
趕快手刀買起來!!!
💯推薦品項:
小小人類的『點點書』我還蠻推的
共有五個系列
🔺點點書1:
共有25 個主題、368 個生活常用的單字、140 題互動問答遊戲、12 首中英文兒歌,讓孩子快速學習知識。用筆或手指頭點一下,就可以聽到單字發音。共有國語、閩南語、英語三種語言,讓孩子用聽覺學認知。
➡️這本兩個小子都可以一起聽,可以玩你問我找的遊戲,重點裡面居然還有台語,非常棒,我自己聽著都覺得瞬間回到台灣了。
🔺點點書2:
🔸國語、英語兩種語言
不只有ㄅㄆㄇ還有ABC的讓小朋友輕鬆學習
🔹ㄅㄆㄇ:學語詞、認筆順
🔸ABC:認識大寫、認識小寫,單字練習及拼音,也有ABC兒歌好唱又好學
🔹數字:認識數字、練習數數、1個1個數、5個5個數
🔸加減法算數:學習5以內的加減法、讓孩子有多跟少的基本概念
🔹時間:認識長針與短針,練習看時鐘現在是幾點呢
🔸九九乘法:念讀式的乘法歌謠,輕鬆記住九九乘法讓您琅琅上口
🔹比一比:學習認識對比之間的關係
🔸世界地圖:認識世界的七大洲,有各國特色和可愛動物的介紹
🔹13首中、英文兒歌:讓孩子跟著音樂哼哼唱唱
➡️這本很適合年紀大一點,像是六歲的小班班玩,從玩中學習,還蠻有趣的。
🔺點點書3:
96則故事+96題問答+6首古典音樂晚安曲
✓專注力 ✓語文力 ✓品德力 ✓智慧力 ✓記憶力 ✓思考力 ✓反應力 ✓自信力 ✓情緒力 ✓節奏力
✦故事多元:經典童話+伊索寓言+好品格故事+好行為故事+好觀念故事+機智故事+成語故事
✦叮嚀啟示:每則故事皆有小叮嚀,讓孩子從故事中得到啟發
✦長度適中:每則故事3分鐘以內,最適合作為睡前故事
✦問答測驗:聽完故事後,可聆聽問答,訓練記憶力與思考力
✦舒眠歌曲:穩定情緒,孩子更好入睡,天天做好夢
✰附贈看圖說故事:
小朋友先看圖說故事,再點按啟動鈕圖示、點圖片聽故事,看看誰說得比較精彩!
➡️這本CP值很高,因為故事書是孩子們最喜歡聽的,不管在房間、客廳、飯桌、餐廳、車上或睡前都可以聽,故事多元加上音樂,是本大小孩都喜歡玩的點點書喔
🔺點點書4:這本是最新出的
1、常用詞語:共21類,包括:
●家庭 ●身體 ●情緒 ●人物 ●職業
●食物 ●蔬菜 ●水果 ●衣物 ●物品
●居住 ●交通 ●教育 ●娛樂 ●運動
●日常 ●時間 ●節日 ●顏色 ●自然
●動物
每個詞語皆觸及孩子在生活中經常遇到的人事物,能有效幫助孩子迅速學會認字!
2、多種語言:共四種語言(國語/台語/客家語/英語),可激發孩子學習各種語言的興趣。
3、搭配插圖:每個詞語搭配相對應的插圖,輔助孩子學習認字。
4、語句範例:孩子學會認字後,可聆聽語句,訓練表達能力。
5、問答遊戲:透過「找一找」遊戲,訓練孩子的記憶力與反應力。我們精心設計了十多種獎勵答對的音效(孩子答對時,會隨機播放),讓問答遊戲更有趣,強化孩子的學習興趣。
6、錄音比對:先聽標準發音,再錄下自己說的聲音,孩子可從播放聲音中,比較兩者的差異,再調整發音,不但能讓孩子多練習說話,還能讓孩子說得更標準,提升自我表達的自信。
➡️這本很特別除了台語還加上客家語,是本給小小孩的書籍,加強生活用字和認字,錄音功能也很有趣,可以自己玩自己錄,邊玩變聽喔。(國外媽媽必備)
🔺點點書5:
快樂學習E點就通˙唸唸唱唱,學會單字拼讀
● 英語、國語兩種語言:讓孩子輕鬆學雙語。
● 500個A∼Z主題單字、400首唸唱單字歌謠(CHANTS),跟讀與拼讀雙管齊下,學會唸單字、拼單字。
● 日常生活用語:幼兒能學會說自己的名字、年紀、 問安、道別、和打招呼。
● 八大認知主題:將記憶系統化,學習事半功倍。
● 英文兒歌:20首經典歌曲,一聽即能朗朗上口。
● 錄音播音設計:現學現錄,立馬驗收學習成效。
● 聽力遊戲:有趣雙語問答,可激發視聽觸三種感官
除了這五本點點書外,小湯包很愛非常喜歡這四個系列:
🔺媽媽問,寶寶答:
根據幼兒智力發育水平,讓孩子在問答中提升自然觀察能力、語言能力、運動能力、藝術能力、邏輯力和人際交往能力。每個問答都貼近幼兒生活,讓寶寶能快樂地開口說話,訓練寶寶的語言表達能力,並且得以輕鬆學習、增加日常生活的詞彙量。全書採用媽媽提問、寶寶回答的形式,適合親子互動,家長可以隨身攜帶本系列書籍,隨時隨地和孩子開始快樂的問答遊戲。
➡️這套湯包也很喜歡,因為裡面的圖案很多,自己就很喜歡拿出來唸他知道的單詞,但其實重點還是要媽媽在旁邊發問,我問你答才有趣。
🔺交通工具繪本(6冊)
內容以小朋友喜歡的小動物為主角,充滿童趣,可以認識各種動物的特徵,培養培養觀察力與想像力,經由故事培養孩子感恩的心,感謝給予我們幫助的人。
➡️這也是湯包的愛書,因為有各種車子,加上CD的故事和音效,現在幾乎每天都會拿出來翻一下喔。
🔺情景認知立體書(四冊)
1.全書共有10種立體設計,收入生活中常見形狀、對比、數字提高小讀者的學習興趣,鍛練孩子的注意力與集中力!
2.10個小機關集合翻翻書、推拉書、立體書,除了能夠學習到新的知識,也能夠達到小肌肉成長與訓練的效果。
3.用擬真又可愛的圖像,激發孩子的探索力,增進孩子的想像力與感知力!
4.無論是內容的說明或狀況的敘述,本書都用最淺顯易懂的文字來讓孩子輕鬆學習。先讓孩子有興趣,再來提升能力是最好的學習方法。
5.內容包含簡單的探索遊戲,透過尋找和對比來培養孩子的辨識力與耐心。
➡️這套真的是不敗首選,沒有孩子不喜歡立體書,這套內容豐富,主題包羅萬象,翻+推+拉+立體圖像,好玩得不得了,孩子自己在旁邊就可以玩很久喔,當然要先訓練孩子們不會破壞書才行😆
再來推薦
🔺嬰幼兒必備十件超值組
內容包含:(一)0歲拉拉書+1歲拉拉書
(二)2片拼圖認知卡四盒:「可愛動物、蔬菜水果、生活用品、交通工具」
(三)黏貼書四本套組:「可愛動物、認識顏色、趣味形狀、交通工具」+「四本認知塗色本」+「無毒大蠟筆」
也是非常優惠,推薦給0到2歲的寶寶喔
❤️看到這就知道有更多好書都在網站裡面,大家都可以上去慢慢看喔,人類文化的書團長期開放訂購,每個月都有不同的會員禮和優惠喔。
💯 來ig看瑣事分享和動態
https://www.instagram.com/alisang
組合語言範例 在 Hiroshi的日文教學(弘の日本語教室) Facebook 的最讚貼文
(募資達標) 非常感謝大家支持^^
課程頁面:
https://bit.ly/39u20eF
非常感謝大家的支持,這次的募資也很快就達標了。其實我這一兩年大部分的心力都放在製作教材及線上課程上,一方面藉此統整自己的文法教學系統,一方面在例句上力求創意及多樣性,讓同學可以有更多不同面向的詞彙,讀例句也不會太過單調乏味。
這次的課程主要鎖定的程度是初學者(N5左右),跟我之前N4N5的課程相比,又再簡化一些句構讓同學可以很快活用這些句型。除了幫大家整理常見的名詞、形容詞、動詞之外,也放了很多生活常用的動詞片語,這樣大家可以很容易地依樣畫葫蘆。每一個單元中都有充分多的例句,除了我會示範發音及做文法單字解說外,也會請日籍小編幫忙錄音,讓同學可以下載跟讀。
舉例來說好了。
動詞的名詞化當中,最常見的課本例句是:
"我的興趣是唱歌/我最喜歡爬山"之類的
但其實使用的時候可以把這個句構應用在很多面向
比如說"我的工作是寫程式"
或是"這次的任務是登陸火星"
又或者是"我們的願望是守護世界和平"等等。
儘管是這麼簡單的句構,
仍然非常具有創造性,
大家可以應用在自己想說的事情上。
我最近靠著學韓文來緩解一些工作壓力,
學韓文的時候,我也希望自己可以應用這個方法,
盡可能用自己學過的文法及句型,
套用不同的單字,設定不同的情境來寫作文。
我相信這樣子才能夠很快把這些文法句型內化。
當然,如果老師能夠整理夠多的實用單字,
造足夠多的範例這樣整個過程就更事倍功半了。
語言教科書中常常一個句子中含有非常多文法,
甚至很多文法根本也還沒學過。
這也無可厚非,因為平時說話時一個句子當中,
本來就有很多不同的句型組合在一起。
但為了真的能夠自由組合自然輸出,
必須每一個零件都用地駕輕就熟,
這時候造樣造句就顯得很重要了。
這堂課中我應用如此的思維模式,
讓簡單的句型搭配不同的單字片語,
組合出最多元的表達。
初學的同學也可以學到很豐富的生活詞彙,
希望同學可以藉此增進表達能力。
目前課程仍然處在早鳥階段,
若有興趣歡迎參考看看囉。
早鳥五折只到 4/19~ 越後面折扣會降低
課程頁面請參考此連結:
https://bit.ly/39u20eF
組合語言範例 在 組合語言: 從一加到十--SpAsmSum10 - YouTube 的美食出口停車場
101下系統程式. 組合語言 : 從一加到十--SpAsmSum10. 7,305 views7.3K views. Apr 1, 2013. 24. Dislike. Share. Save. 陳鍾誠. 陳鍾誠. ... <看更多>
組合語言範例 在 組合語言執行模擬器 - YouTube 的美食出口停車場
微算機原理及應用(I)_林淵翔_單元三8051的 組合語言 程式設計_PART C_ 組合語言 程式 範例 、程式產生步驟、8051的假指令和資料型態 . DeltaMOOCx. ... <看更多>
組合語言範例 在 [心得] 個人的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
... <看更多>