日本人が間違って使いやすい英単語
”和製英語” 是日本人通過組合英文單字所製作出來的,有許多片假名單詞聽起來像英語,也有許多不是來自英語而是來自其他語言。
如果在英語中使用這些片假名詞語,在大多數的情況下,不是日本人將無法理解這些詞語。
簡單來說就是翻譯成英文後外國人也未必能懂喔!🤣
【日】ノートパソコン
【英】laptop、notebook
【中】筆記型電腦、筆電
這是和製英語中最常見的一個詞語,它的正確英文應該是「laptop」。
「lap」是「膝蓋」的意思,像把電腦放在腿上一樣。
日語中「ノートパソコン」中的「ノート」可能源自於書寫的「ノート」。
然後日語中的「ノート」卻被當作英文中的「notebook」,而「note」因為有不同的意思而無法被理解。
「デスクトップパソコン」的英文是「desktop」,為什麼只有「ノートパソコン」被製成了和製英語,真的很不可思議啊!
❤日語學習平台Study Cube ⬇ ⬇
https://academy.shuwoon.com.tw/bookshelf
❤訂閱YouTube頻道持續學習 ⬇ ⬇
https://www.youtube.com/user/ShuWoon2013
#和製英語 #生活日語 #旭文日本語學院 #趣味
同時也有2部Youtube影片,追蹤數超過20萬的網紅A力地方媽媽,也在其Youtube影片中提到,就是喜歡追劇看戲, 好像我這地方媽媽沒有遁入別人的故事, 人生就不會完整一樣! 這種步驟少「放乎它滾」的煮食, 就是我的最愛,可以偷空看兩集劇! 牛肉我很久沒吃了, 因為家人不吃牛, 但是最近這個煮法,煮起來的牛, 可以融合各種口味, 煮好家人的,不管什麼今晚熱湯, 從冰箱拿牛切幾片給自己都可以淋...
「組合語言筆記」的推薦目錄:
- 關於組合語言筆記 在 旭文日本語學院 Facebook 的精選貼文
- 關於組合語言筆記 在 今周刊 Facebook 的最佳解答
- 關於組合語言筆記 在 Sherry周能萱-主持人能萱 Facebook 的精選貼文
- 關於組合語言筆記 在 A力地方媽媽 Youtube 的最佳貼文
- 關於組合語言筆記 在 A力地方媽媽 Youtube 的最佳解答
- 關於組合語言筆記 在 [心得] 個人的x86 組合語言觀念筆記- 看板ASM - 批踢踢實業坊 的評價
- 關於組合語言筆記 在 AssemblyLanguageTest/《汇编语言》第三版阅读笔记.md 的評價
- 關於組合語言筆記 在 Using as 手冊筆記 的評價
- 關於組合語言筆記 在 [好站] 想學組合語言嗎?這邊有個不錯的免費中文網站喔! (附上 的評價
組合語言筆記 在 今周刊 Facebook 的最佳解答
◤如果突然獲得六千萬元,你會怎麼做?◢
存起來?省著用?很遺憾,這正是一般人的普通思維。
真正的成功者,會選擇 #投入現在的能量 ,#並在未來獲得更多報酬 。
因為他們都知道:「光有錢,其實救不了你的未來!」
我們常常把儲蓄、發財當成人生的終極目標,
卻忽略了金錢的意義不在於讓你「贏過別人」;而在於幫助你「不輸給未來的風險」。
闖蕩投資界30年的日本傳奇基金經理人,#藤野英人 告訴你,面對漲跌起伏的不安穩時代,你可以不必成為專業投資家,但你必須 #像投資家一樣思考 #像投資家一樣設計你的人生 。
那麼,該怎麼做?
💡本書帶你快速掌握像投資家的思維模式💡
🔺投資不是只有錢,而是由五大要素構成:「自主性」「時間」「金錢」「決斷」「運氣」
💡本書為你指引成功者的的日常生活提案💡
🔺做出任何行動前,先問自己「這是投資,還是浪費?」
🔺積極趕流行的人,更容易在生活中找出致勝機會!
🔺別再浪費時間跟同溫層取暖!人際關係是一種投資組合,越多元越有利
🔺傳奇基金經理人的投資心法:小額、緩慢、長期
讓我們從思維開始建立習慣;從習慣開始改變一生。做出更傑出的決策,活得更快樂!
《關於人生,我這樣投資》>> https://bit.ly/3jeAWW5
#今周刊出版 #關於人生我這樣投資
真心推薦——#Ada筆記女王 #雷浩斯 #楊斯棓 #愛瑞克 #蔡至誠(#PG財經筆記) #歐馬克 #歐陽立中
組合語言筆記 在 Sherry周能萱-主持人能萱 Facebook 的精選貼文
我一直很喜歡看動畫跟日劇,
也非常想去日本玩,
雖然到目前為止還沒有去過!!
但想要在日本暢行無阻,當然還是會說日語最方便啦~
我可是打算疫情舒緩之後,要去怒玩一個月欸XD
趁現在待在家的時間比較多,決定好好自學日文。
老字號出版社 大新書局除了多年的專業出版經驗,
推出了無數的日語教材,涵蓋初學入門到N1檢定、各個等級之外,
-
甚至還有這個超酷的東西!!「My Voice藍牙點讀智慧筆」
欸這太酷了,一隻小小的筆裡面存了無數本的教材啊!
平常我們學語言,都要聽老師說,或者自己播放光碟/檔案,
需要自己一段段去筆記或者重播,其實不太方便
-
「My Voice藍牙點讀智慧筆」,只要在書封上點一下,
馬上就可以整本自由播放!不管是單字、單獨一句,還是整個題目,
甚至整段課文,全部都幫你設想到了,
而且大新書局 還有跟其他的英語教材合作,
所以不用擔心學了日語忘了英語,這隻筆可以讓你兩個願望一次滿足XD
-
我挑的教材是「日中英超特急說日語+日中英超特急說日語中上級」
因為平時真的看了非~~常多動畫,基本對話其實我都大概懂了,
日中英超特急說日語的「中上級」就已經達到N1的難度囉!
目標是把這兩本讀到爛熟,希望能練到能夠信手拈來,
這樣到時候去日本玩,不管買東西、問路、寒暄,
甚至簡單的日常小聊天,一定都可以流利順暢~
-
大新書局 「日中英超特急說日語」兩冊當中,都是採用例句的方式,
來讓我們可以快速上手,學起來毫無壓力,也不會覺得枯燥,
果然學習語言,用自然「跟讀」的方式練習,
才能把內容內化成自己的,
就像學游泳、學騎腳踏車一樣,只要放手去做去練習,
最後它是記憶在你的身體裡面,
聽見日文的時候,不用再思考「噢這句話的中文是什麼」,
而是可以直接理解它的意思,
甚至腦海中也會立刻出現回答的句子,
-
我真的覺得超酷,難怪小時候那麼多人要去上英語會話班,
開口說,就是學語言最快最輕鬆的方式!
沒有日本朋友可以練習,或者跟真人練習會害羞的話,
一定要試試看
大新書局「日中英超特急說日語」+「My Voice藍牙點讀智慧筆」的組合,
完美解決了沒有人練習、害羞、沒時間出門上課等各種現代忙碌生活的問題,
讓你在家也能輕輕鬆鬆練出超高日語水準!
-
不說了我要繼續念書了,真的是史上最輕鬆最快樂的念書方式欸XD
-
日中英超特急說日語My VOICE Pro藍牙智慧筆學習套組
傳送門→ https://dahhsin.1shop.tw/dh06
#日中英超特急說日語點讀套組 #大新書局 #大新點讀筆 #學日語 #智慧筆
-
還有很多方便的旅遊、日常會話書,跟學習小道具欸!
大新書局真的把學日文變簡單好多好多XD
組合語言筆記 在 A力地方媽媽 Youtube 的最佳貼文
就是喜歡追劇看戲,
好像我這地方媽媽沒有遁入別人的故事,
人生就不會完整一樣!
這種步驟少「放乎它滾」的煮食,
就是我的最愛,可以偷空看兩集劇!
牛肉我很久沒吃了,
因為家人不吃牛,
但是最近這個煮法,煮起來的牛,
可以融合各種口味,
煮好家人的,不管什麼今晚熱湯,
從冰箱拿牛切幾片給自己都可以淋!
以形補形,吃個幾片,覺得腿壯!
古早古早的電影,
古早古早的灶咖,
我的血液裡流著逼情的台味腳勤,
古早味的台電影就是,
沒有月台也要追火車,
走個路也要去撞汽車,
傷心要先哭乎枕頭知,
走失了要翻衣認胎記!
講台語還是很燒腦,
但這是伴我成長的語言啊,
怎麼搞的長大用台語都不會吵架了!
好吧!至少打架可以用台語!
來!腱基肉嘎滾落企!
揉!麵粉堆嘎揉落企!
材料:
牛腱兩三條(看鍋子空間)
奶油一小塊(爆香用)
胡椒顆粒一把(可以用香料袋裝,或不裝)
月桂葉一片(拍幾下或揉碎)
薑拇指般大(拍裂可順便洩憤)
洋蔥半顆(切半剝皮直接投因為懶)
蔥一把(綁成小人節結順便施法祈禱老公脾氣好)
辣椒五六七八根(看跟老公有沒有隔夜仇)
蘿蔔要不要都可以(看鍋子空間)
作法:
牛腱泡一下清水,冷水下鍋大滾個三分鐘,洗淨。
(它會從長長的一條,嚇抽成一坨)
鐵鍋下一小塊奶油,將所有香料丟下去煎,
也煎一下肉的表面提個牛味。
加入水還有那個要加不加的蘿蔔慢慢燉。
就醬紫!結束!沒有了!!!超簡單484.....
我牙口不好文文啊火滾了兩小時啊有夠軟爛的。
最好含著湯汁浸泡一晚(是牛不是自己嘴巴含)。
再忍耐一下下放冷藏冰凝了再拿出來切,
沒有冷處理刀一切,那牛會整個崩潰喔!
我另外用醬油滷一鍋迴旋叉燒給我老公(他不吃牛)
紅蘿蔔放在豬那一鍋滷,兩人都可以吃也比較有味道,
迴旋叉燒主要就是豬五花用棉線綁一綁,煎一煎,
香料差不多蔥薑蒜洋蔥,一起煎,
再加入醬汁用日式醬油、味醂、一點冰糖,
燉煮一小時左右就完成!
滷豬醬汁(母湯)可以再拿來滷香菇、木耳、泡溏心蛋...
這樣滷兩鍋,要上菜只要加熱組合,快速又方便!
各吃各的好料,我可以撈過界吃他的,他不能覬覦我的!
迴旋叉燒去年有分享過影片,有興趣的朋友可以回頭閱!
影片資訊:
引用小片段音樂:
資料來源:開放博物館
1962年的台語片
送君情綿綿
未婚懷孕,分離綿綿此恨無絕期,
情人死而復活的激烈情史!
1962年的台語片
龍山寺之戀
外省本省有恩有情都是自己人的,
有人救時當需救勸世情史!
1969年的台語片
星夜離別
養子與歌女遭心機女與渣男命運之捉弄,
含冤操獵槍濺血洗白最終還是分離的悲情!
背景音樂:
Title: Baltic Levity - Thatched Villagers
Artist: Kevin MacLeod
--------------------------------------------------------------------------
我是A力,運動是我的日常,廚房是我的療癒室,
我曾經是個圓噸噸的地方媽媽,也在九彎十八拐的減脂路上迷過路,
如果妳也在學習,我會很開心在這裡見到妳~
這裡有我老公幫我記錄的生活,我也很歡迎妳到粉專上跟我聊天,
生活是一場接力賽,我們一起陰溝裡賞星星!
粉專:地方媽媽 健身筆記 Ellie
https://www.facebook.com/ellielocalmom
IG:local_mom_ellie
https://www.instagram.com/local_mom_ellie
攝影-導演 我先森/周琨瑾火野攝影
剪輯-文字 苔苔我/彭佳琳 A力地方媽媽
組合語言筆記 在 A力地方媽媽 Youtube 的最佳解答
我們今年老夫老妻的情人節怎麼過呢?嘿嘿!
暗黑的心情,適合暗黑的料理,
曾經在菜單中看過“肉球“巧克力”組合的字樣,
因為是不熟悉的語言,無法想像就不敢貿然嘗試,
突然在暗黑的心情中想到這喔嚕嚕的料理組合,
心是黑的!心是苦的!心是氣入的(乳酪台語)....
那今天就這樣丸起來吧!!!
怕麻煩的我那個肉丸,
明明知道傳統口味最對老人味,
但是就是不想瓶瓶罐罐,
生活麻醉劑買到不合口味的,
直接喂肉喝也沒什麼不對!!
懶得切高麗菜韭菜薑末...
一罐雞肉調味粉萬用!
內餡如果無法巧克力,
包入乳酪絲保証好吃不暗黑,
100%的巧克力真的苦,
苦到我老公狠受驚,
我自己倒是很喜歡!
巴薩米克醋加橄欖油與胡椒,
配任何生菜熟菜半生不熟菜都好吃,
是我減脂期的最大愛!
有冒險精神嗎?
還是就簡單來個夜市人生...
人生無常“大腸包小腸吧”!
🧆爆漿巧克力肉丸•••••••
* 絞肉 400g(豬牛雞均可)
* 紅酒 一杯
* 蒜頭 五瓣
* 黑巧克力 隨意
* 乳酪絲 一抓
* 綜合香料粉(含橙皮.蒜粒.胡椒.鹽巴...)
* 乾辣椒
香料粉有鹹的就不要加鹽囉
乾辣椒一起煎有仇多放一點
🥗拌蔬菜的油醋沙拉醬•••••••
* 2湯匙特級初榨橄欖油
* 1湯匙巴薩米克醋
* 1湯匙檸檬汁
* 1茶匙蒜碎
* 少量海鹽或鹽巴
* 一小撮黑胡椒
•••••••
忍不住還是奇怪的苔苔音樂取向:
想要瞬間穿越:快聽這一首“尤雅-給嘸良心的人”
歌詞笑到我腹肌有六塊!(咦!是幻想...
想要鼻酸洗眼:快聽這一首滅火器-長途夜車!
曲末突然好想夜奔!
想要流氓豬哥認真浪漫,
john-mayer 的 gravity-瞬間掉入五里霧!
脖子有點僵硬想要轉一轉,
Guns N' Roses 的 Welcome To The Jungle
聽完保證僵直!!
--------------------------------------------------------------------------
我是A力,運動是我的日常,廚房是我的療癒室,
我曾經是個圓噸噸的地方媽媽,也在九彎十八拐的減脂路上迷過路,
如果妳也在學習,我會很開心在這裡見到妳~
這裡有我老公幫我記錄的生活,我也很歡迎妳到粉專上跟我聊天,
生活是一場接力賽,我們一起陰溝裡賞星星!
粉專:地方媽媽 健身筆記 Ellie
https://www.facebook.com/ellielocalmom
IG:local_mom_ellie
https://www.instagram.com/local_mom_ellie
攝影-導演 我先森/周琨瑾火野攝影
剪輯-文字 苔苔我/彭佳琳 A力地方媽媽
音樂資訊-
♫Music♫
Creepy -Tricky by Redafs.com, Licensed under Creative Commons: By Attribution 3.0 License
Édith Piaf - La Vie en Rose (DeliFB Lofi Remix) [No Copyright Music]
Cjbeards - Falling Down | ♫ Copyright Free Music
♫推薦歌單♫
滅火器 長途夜車 Southbound Night Bus
john-mayer-gravity-grammys-on-cbs
尤雅-給嘸良心的人
組合語言筆記 在 AssemblyLanguageTest/《汇编语言》第三版阅读笔记.md 的推薦與評價
《汇编语言》第三版阅读笔记. 第一章基础知识. 汇编课程研究重点放在如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作。 1.1 机器语言. ... <看更多>
組合語言筆記 在 Using as 手冊筆記 的推薦與評價
.print "字串" :組譯的時候stdout會印出字串。 .end :表示組合語言程式結束. 巨集. 跳過,自行看手冊. ELF相關. ... <看更多>
組合語言筆記 在 [心得] 個人的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
... <看更多>