<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3574663204983450629</id><updated>2012-02-01T16:02:16.594+08:00</updated><category term='carryme'/><category term='birdy [off road]'/><category term='新竹後山之美'/><category term='幹意滿滿之東邪西毒 ... 啥? 嗯 ... 是 ... 東進西出武嶺行'/><category term='閒聊 birdy'/><category term='write_os'/><category term='北海岸 X 北橫公路'/><category term='latex'/><category term='computer book'/><category term='小而美的外島-小琉球'/><category term='將 birdy 旅行車化'/><category term='好詞好句'/><category term='日文'/><category term='gps 軌跡地圖'/><category term='沖繩輕鬆騎'/><category term='qt terminal'/><category term='assembly'/><category term='moulton 配件'/><category term='old pc game'/><category term='台鐵 20080701 自行車規定'/><category term='其它單車文章'/><category term='日文歌詞'/><category term='簽書會'/><category term='travel'/><category term='廢鐵號單車遊記'/><category term='book_list'/><category term='其它書籍'/><category term='git'/><category term='python'/><category term='latex VS ms word'/><category term='rabbitmq'/><category term='pentax e60'/><category term='單車零組件'/><category term='二手書店'/><category term='單車店家'/><category term='午騎系列'/><category term='電腦相關'/><category term='單車書籍'/><category term='c++'/><category term='將 moulton tsr 旅行車化'/><category term='影片'/><category term='野炊求生用品'/><category term='美少女電腦遊戲'/><category term='無路可騎的地獄 - 阿朗一古道'/><category term='mysql'/><category term='english'/><category term='linux 相關'/><category term='問卷調查'/><category term='programming'/><category term='投資理財'/><category term='單車遊記'/><category term='moulton off road'/><category term='政治'/><category term='苗栗「遊山觀海、挑戰100」'/><category term='gps'/><category term='三橫系列'/><category term='moulton books'/><category term='birdy 單車遊記'/><category term='eee pc'/><category term='2/3 的單車環島 - 2/3 的台灣驚豔'/><category term='c_runtime'/><category term='雜七雜八'/><category term='mac'/><category term='moulton 單車遊記'/><category term='e-coupon'/><category term='成語'/><category term='單車改裝'/><category term='日語學習書'/><category term='1/3 的單車還台-1/30 的驚艷[一不小心就環島]'/><category term='qt'/><category term='老電腦遊戲'/><category term='棒壘球'/><category term='moulton'/><category term='google'/><title type='text'>人體汽肛 - 風馳電掣, 人車一體</title><subtitle type='html'>Firefox Only. If you cannot understand Chinese, please use left select box (google translate) to translate.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default?start-index=101&amp;max-results=100'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>667</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-8436312989927156994</id><published>2012-02-01T10:39:00.001+08:00</published><updated>2012-02-01T10:39:05.369+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜七雜八'/><title type='text'>Pioneer XC-IS21T</title><content type='html'>這是很久很久以前在 yahoo 拍賣買的二手音響。我還記得托朋友從木柵賣家住中載回。花了 7500。&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/DCyvWYELeCGpbZs98dmXPdMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-BXZtReyatDo/Tyic8YwCrvI/AAAAAAAAZH0/UbHjRntFErQ/s640/P1310158.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="https://picasaweb.google.com/105103177642172932400/PioneerXCIS21T?authuser=0&amp;feat=embedwebsite"&gt;pioneer XC-IS21T&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;因為很喜歡它的外型, 全新的那時候應該要 10000 左右, 也有 md 的版本 (pioneer XC-IS21MD):&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/cCdv6IdaiBrkSSkaO5ZT-dMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh6.googleusercontent.com/-i7u2PnPyYIc/TyifINJlXmI/AAAAAAAAZJk/6yzxfKtxGSA/s800/6319974752.jpg" height="478" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;記得在家樂福看到應該要 13000 左右。我本來要買新的, 不過找來找去似乎只剩下 md 版本, 我想要的是 tape 版本, 最後才尋求拍賣網站購得。&lt;br /&gt;&lt;br /&gt;兩種版本類型很雷同, 連中間的 md/tape 都是一樣的操作方式。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/1ZiEnnf8sAufqXBVKfJDB9MTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-BlvoJ87Ve2M/TyidFQLh9PI/AAAAAAAAZIk/VC69_FTOs9g/s640/P1310164.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;不過 md 版本裝的是 md, 不是 tape。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/5ERnqmTa79caPU4OeX1YbNMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-fyNOwT8JYZ8/TyidAnm9PEI/AAAAAAAAZIM/aVNRjPDhz34/s288/P1310161.JPG" height="240" width="200" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/xWd-r1F9vRinMbVRhCGzdtMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-DAcT03aFpyI/TyidBzrXDRI/AAAAAAAAZIU/MhDeUwUU_v4/s288/P1310162.JPG" height="240" width="288" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這個外型是讓我比較訝異的地方, 正面看很漂亮, 結果側面是凹進去, 我還以為是整個長方體。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;音質怎麼樣呢？以我不靈敏的耳朵, 當然是沒話說。&lt;br /&gt;&lt;br /&gt;中間的藍色大圓盤是調整音量, 可以隨意亂轉, 聲音會很大聲哦！聽起來很過癮, 最下方的護蓋被我弄壞了, 已經蓋不上, 而且搞丟了, 有點可惜。&lt;br /&gt;&lt;br /&gt;以現在的音響, 已經愈來愈進步, 可聽 mp3, 5 片裝 CD/DVD, 這台應該已經無法吸引市場注意力, 我在拍賣網站看到有人要賣 4300 還乏人問津, 我買貴了。XD&lt;br /&gt;&lt;br /&gt;&lt;embed type="application/x-shockwave-flash" src="https://picasaweb.google.com/s/c/bin/slideshow.swf" width="600" height="400" flashvars="host=picasaweb.google.com&amp;hl=en_US&amp;feat=flashalbum&amp;RGB=0x000000&amp;feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2F105103177642172932400%2Falbumid%2F5703981454066438273%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-8436312989927156994?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/8436312989927156994/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=8436312989927156994' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/8436312989927156994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/8436312989927156994'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/02/pioneer-xc-is21t.html' title='Pioneer XC-IS21T'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-BXZtReyatDo/Tyic8YwCrvI/AAAAAAAAZH0/UbHjRntFErQ/s72-c/P1310158.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-7365919343225273926</id><published>2012-01-30T18:59:00.005+08:00</published><updated>2012-01-31T13:46:19.056+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜七雜八'/><title type='text'>one某A炒泡麵</title><content type='html'>不知道從何時開始有了炒泡麵這道菜。感覺應該是道便宜的小吃, 不過實際上並不便宜, 一碗肉絲炒泡麵要價 65。長的像這樣 ...&lt;br /&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/0WVfYvxqiQMyeSOjfLUbV9MTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-075anXqYJWc/TvGlBQVxO5I/AAAAAAAAXaU/_WZ1irRBJWk/s640/P1010084.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="https://picasaweb.google.com/105103177642172932400/TainanFood?authuser=0&amp;amp;feat=embedwebsite"&gt;tainan food&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;份量有點少。所以 one某有了自己炒的計劃 ...&lt;br /&gt;&lt;br /&gt;這並非是第一次的嘗試, 不過這次的配料比較豐富, 川貝、枇杷、桔梗這些東西都沒有, 有的是新竹貢丸、小卷 (透抽還是什麼類似的搞不清楚)、茼蒿菜、豬肉片 ...&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/fLgTf6wRJY8T-PBejy4QCwvG1CcunHEZH0a9ivcoI2A?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-hb_jLbABvu8/TyZ0CeXcNAI/AAAAAAAAZC0/sXUj1aGPtIA/s288/P1310090.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/S0zQrlxCoLbc0KLmU8EVsAvG1CcunHEZH0a9ivcoI2A?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-ult-nPiYoHo/TyZ0H4xW-gI/AAAAAAAAZC0/P5jVlIKlD4M/s288/P1310094.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/ubv6uU06SXEyCmxCwTQXxAvG1CcunHEZH0a9ivcoI2A?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-s5-T9oai5IQ/TyZ0OG48eOI/AAAAAAAAZC0/dRpF4e8uhjY/s288/P1310098.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/jTDMUk0a_jqFpxd8tdrXBQvG1CcunHEZH0a9ivcoI2A?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-DCup9CJIYVs/TyZ0UQtg7FI/AAAAAAAAZC0/tyU1z26EX0Y/s288/P1310102.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;當然還有統一肉燥麵, 這樣加起來大概 200 元左右。&lt;br /&gt;&lt;br /&gt;* one某&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/gBT5rhqijvsE9nnW8hAaswvG1CcunHEZH0a9ivcoI2A?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-qD_WQP5S38A/TyZ0pUR1jSI/AAAAAAAAZC0/Cg8AA2Lqaww/s288/P1310113.JPG" height="288" width="216" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/d6yiVJxGIMospVtMKp4RvQvG1CcunHEZH0a9ivcoI2A?feat=embedwebsite"&gt;&lt;img src="https://lh6.googleusercontent.com/-iS88INY_Epg/TyZ0ft_pUGI/AAAAAAAAZC0/EBpXQauJ0ws/s288/P1310108.JPG" height="288" width="216" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* 林八&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/5MwI5_O9-OYMGdl0t8NkEAvG1CcunHEZH0a9ivcoI2A?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-efia1e72HWs/TyZ0jkZWTEI/AAAAAAAAZC0/Q7CMTtqjcP0/s288/P1310110.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/qGX3i6DRJ8RZtUWYgekGewvG1CcunHEZH0a9ivcoI2A?feat=embedwebsite"&gt;&lt;img src="https://lh6.googleusercontent.com/-zz2SrE5gYQ0/TyZ06wWwbCI/AAAAAAAAZC0/NxF_B2Tewp4/s288/P1310121.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;為什麼炒菜的時候左手都要插腰?? 好吃的炒泡麵上菜了 ...&lt;br /&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/Ua9-2Nq7yiLzKGy3XnqvUAvG1CcunHEZH0a9ivcoI2A?feat=embedwebsite"&gt;&lt;img src="https://lh6.googleusercontent.com/-3PhVgOfh5bE/TyZ1K1EU69I/AAAAAAAAZC0/igthBY_B1z8/s640/P1310129.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="https://picasaweb.google.com/105103177642172932400/20120130?authuser=0&amp;amp;authkey=Gv1sRgCMPFzu7F-vz0_wE&amp;amp;feat=embedwebsite"&gt;20120130 自製炒泡麵&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;料多實在, 一碗賣 150 也不為過阿！料理方式很簡單, 看了這麼多的圖應該會了, 還有不清楚的部份打電話來問, 080000鏗00鏗, 外縣市不用加 07。&lt;br /&gt;&lt;br /&gt;老公負責洗大鍋鏟, 體貼一下辛苦炒麵的老婆 ...&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/pRNKrc1Sjyljjut6MrBsYwvG1CcunHEZH0a9ivcoI2A?feat=embedwebsite"&gt;&lt;img src="https://lh6.googleusercontent.com/-Av53M9O6hCE/Tya1Z9KEupI/AAAAAAAAZDI/IHF8nUdZ9cU/s288/P1310133.JPG" height="288" width="216" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/bl4EXWdc7-ugVzL5_ur6pAvG1CcunHEZH0a9ivcoI2A?feat=embedwebsite"&gt;&lt;img src="https://lh6.googleusercontent.com/-Qw8w067xsaI/Tya1bQk6NqI/AAAAAAAAZDQ/GnPus6CxBM8/s288/P1310134.JPG" height="288" width="216" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;男子漢的形象還是要維持一下 ...&lt;br /&gt;&lt;br /&gt;被你看出來是廁所嗎？恩 ... 你可能會有這樣的疑問, 為什麼要在廁所洗澡是吧！誰不是在廁所洗澡？A ... 是洗鍋子 ... 因為廚房那個洗碗的叫什麼來的 ... (洗碗槽) 對, 不夠大, 所以拿到廁所洗比較方便, 還可以拿鏟子順便刷馬桶, 一兼二顧, 摸 XX 兼洗 YY, 炒鍋洗好了, 馬桶也刷乾淨了, 更厲害的連身體也洗好了。&lt;br /&gt;&lt;br /&gt;你可能有另外的疑惑&lt;b&gt;您或許對這些文章有興趣:&lt;/b&gt;, 我相信列出來的文章你一定都不感興趣吧！沒辦法, 我也不知道為什麼它總是列出你沒興趣的文章, 改成&lt;b&gt;您或許對這些文章&lt;span style="color: rgb(255, 0, 0);"&gt;一點也沒&lt;/span&gt;有興趣:&lt;/b&gt;比較適合。&lt;br /&gt;&lt;br /&gt;&lt;embed type="application/x-shockwave-flash" src="https://picasaweb.google.com/s/c/bin/slideshow.swf" flashvars="host=picasaweb.google.com&amp;amp;hl=en_US&amp;amp;feat=flashalbum&amp;amp;RGB=0x000000&amp;amp;feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2F105103177642172932400%2Falbumid%2F5703373468307132209%3Falt%3Drss%26kind%3Dphoto%26authkey%3DGv1sRgCMPFzu7F-vz0_wE%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer" height="400" width="600"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-7365919343225273926?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/7365919343225273926/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=7365919343225273926' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7365919343225273926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7365919343225273926'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/onea.html' title='one某A炒泡麵'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-075anXqYJWc/TvGlBQVxO5I/AAAAAAAAXaU/_WZ1irRBJWk/s72-c/P1010084.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-920267808303863319</id><published>2012-01-29T00:45:00.001+08:00</published><updated>2012-01-29T00:45:02.351+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='電腦相關'/><title type='text'>googlecl</title><content type='html'>從 letoh 得知 &lt;a href="http://code.google.com/p/googlecl/"&gt;http://code.google.com/p/googlecl/&lt;/a&gt;。&lt;br /&gt;&lt;br /&gt;我想用來發佈 blogger 文章。&lt;br /&gt;很智障的試了幾次之後才成功。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;增加一篇文章&lt;br /&gt;&lt;pre style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 600px; text-align: left;"&gt;&lt;br /&gt;google blogger --blog="人體汽肛 - 風馳電掣, 人車一體"  post --tag "電腦相關" --title "googlecl" g.txt&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;刪除一篇文章&lt;br /&gt;&lt;pre style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 600px; text-align: left;"&gt;&lt;br /&gt;google blogger --blog="人體汽肛 - 風馳電掣, 人車一體"   delete --title "aaaaa"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ref: &lt;a href="http://www.techbang.com.tw/posts/2904-googlecl"&gt;http://www.techbang.com.tw/posts/2904-googlecl&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-920267808303863319?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/920267808303863319/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=920267808303863319' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/920267808303863319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/920267808303863319'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/googlecl.html' title='googlecl'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-4752019784599874171</id><published>2012-01-28T14:38:00.002+08:00</published><updated>2012-01-28T14:41:43.967+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>mysql gui</title><content type='html'>除了 mysql 自己的 gui tool 外, 可以參考: &lt;a href="http://www.navicat.com/cht?gclid=CMvunIuO8q0CFUJMpgodXhx_sA"&gt;navicat&lt;/a&gt;。&lt;br /&gt;不過 navicat 不是 opensource 軟體。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-4752019784599874171?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/4752019784599874171/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=4752019784599874171' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/4752019784599874171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/4752019784599874171'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/mysql-gui.html' title='mysql gui'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-1662453748021303504</id><published>2012-01-25T17:16:00.002+08:00</published><updated>2012-01-25T17:33:21.210+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computer book'/><title type='text'>PC 中斷服務常式-應用軟體介面呼叫大全 BIOS 篇</title><content type='html'>&lt;a href="https://picasaweb.google.com/lh/photo/Im8tgMZ9eTAXhWmKLrgPdBmkFCLSrpasU46ewrN9XHA?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-zcAma3e6HpI/Tw0yG2y4LpI/AAAAAAAAYcU/87w19vKrk1c/s640/P1310049.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;現在似乎沒有這樣的書籍了, 這是 1992/02 出版的書籍。300 元的定價在當時不算便宜。不過以書中提到的技術, 當然是值得這個價錢。電腦書籍最怕過時, 日新月異的技術如海浪般湧入, 所以我總是很小心的選購電腦專業圖書, 以基本中的基本為主, 這種技術比較不會有過時的問題。&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/gK_e0b2aGyCjHyuiACg3uBmkFCLSrpasU46ewrN9XHA?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-0KjpFbkBeJY/Tw0yFWLKeBI/AAAAAAAAYcQ/P1Cul6Mf5hA/s640/P1310048.JPG" height="640" width="480" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;這本書我看到有三個系列, 不過在今日, 應該只剩下 bios 篇還有點實用價值, 當然若你還在寫 DOS 下的程式, 另外兩本可能對你也很有用。&lt;br /&gt;&lt;br /&gt;以前直接操作硬體的書籍在今日已經變成如何使用 os 提供的 API/system call, 無法直接操作硬體固然可惜, 不過這是計算機自然演化的結果, 複雜的硬體搭上可怕的軟體, 已經超越 DOS 時代的簡單, 要學習直接操作硬體的知識已經愈來愈不容易。&lt;br /&gt;&lt;br /&gt;說了半天還沒談到本書, 這是一本介紹 BIOS 呼叫的書籍, 類似 C++ 的標準程式庫, 列舉 BIOS CALL, 不過我不知道是不是全部的 BIOS CALL 都有提到, 在保護模式 OS 流行的今日, 已經無法在使用 BIOS CALL, 所以這本書的價值也大大降低。&lt;br /&gt;&lt;br /&gt;我為了要寫一個 boot loader, 需要使用 BIOS int 0x13 讀入軟碟片的磁區, 所以需要這分內容。在網際網路盛行的電腦世界, 這資料已經很容易取得, 借閱本書只是習慣於書本上的翻閱, 很容易可以看到全面相關資料, 要是可以找到便宜的二手版本, 應該會買本來當作查閱手冊。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-1662453748021303504?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/1662453748021303504/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=1662453748021303504' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/1662453748021303504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/1662453748021303504'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/pc-bios.html' title='PC 中斷服務常式-應用軟體介面呼叫大全 BIOS 篇'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-zcAma3e6HpI/Tw0yG2y4LpI/AAAAAAAAYcU/87w19vKrk1c/s72-c/P1310049.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-7715239850877059426</id><published>2012-01-25T16:57:00.003+08:00</published><updated>2012-02-01T10:27:42.339+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>monitor filesystem events by python</title><content type='html'>似乎各大 os 都不同, 沒有統一的方法。&lt;br /&gt;ref 1 是使用 pyinotify 在 linux 下的範例。&lt;br /&gt;ref:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://david-latham.blogspot.com/2008/06/python-inotify-pyinotify-how-to-watch.html"&gt;http://david-latham.blogspot.com/2008/06/python-inotify-pyinotify-how-to-watch.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://pyinotify.sourceforge.net/"&gt;http://pyinotify.sourceforge.net/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.stepthreeprofit.com/2008/06/cross-platform-monitoring-of-filesystem.html"&gt;http://www.stepthreeprofit.com/2008/06/cross-platform-monitoring-of-filesystem.html&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;file_monitor.py&lt;/legend&gt;&lt;br /&gt;&lt;pre&gt;&lt;a name="line1"&gt; 1&lt;/a&gt; &lt;span style="color:#444444;"&gt;#!/usr/bin/python&lt;/span&gt;&lt;br /&gt;&lt;a name="line2"&gt; 2&lt;/a&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;&lt;br /&gt;&lt;a name="line3"&gt; 3&lt;/a&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;pyinotify&lt;/span&gt;&lt;br /&gt;&lt;a name="line4"&gt; 4&lt;/a&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;sys&lt;/span&gt;&lt;br /&gt;&lt;a name="line5"&gt; 5&lt;/a&gt;&lt;br /&gt;&lt;a name="line6"&gt; 6&lt;/a&gt; &lt;span style="color:#444444;"&gt;#ref: http://david-latham.blogspot.com/2008/06/python-inotify-pyinotify-how-to-watch.html&lt;/span&gt;&lt;br /&gt;&lt;a name="line7"&gt; 7&lt;/a&gt;&lt;br /&gt;&lt;a name="line8"&gt; 8&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;wm&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;pyinotify&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;WatchManager&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line9"&gt; 9&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;mask&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;pyinotify&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;IN_DELETE&lt;/span&gt; &lt;span style="color:4444FF;"&gt;|&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;pyinotify&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;IN_CREATE&lt;/span&gt; &lt;span style="color:4444FF;"&gt;|&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;pyinotify&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;IN_MODIFY&lt;/span&gt; &lt;span style="color:4444FF;"&gt;|&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;pyinotify&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;IN_MOVED_FROM&lt;/span&gt; &lt;span style="color:4444FF;"&gt;|&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;pyinotify&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;IN_MOVED_TO&lt;/span&gt;&lt;br /&gt;&lt;a name="line10"&gt;10&lt;/a&gt;&lt;br /&gt;&lt;a name="line11"&gt;11&lt;/a&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;PTmp&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;pyinotify&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;ProcessEvent&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line12"&gt;12&lt;/a&gt;     &lt;span style="color:#444444;"&gt;# move file to /mnt&lt;/span&gt;&lt;br /&gt;&lt;a name="line13"&gt;13&lt;/a&gt; &lt;strong&gt;   &lt;span style="color:ff0000;"&gt; def&lt;/span&gt;&lt;span style="color:ff0000;"&gt; process_IN_MOVED_TO&lt;/span&gt;&lt;span style="color:2040a0;"&gt;(self, event)&lt;/span&gt;:&lt;br /&gt;&lt;a name="line14"&gt;14&lt;/a&gt; &lt;/strong&gt;        &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#008000;"&gt;"move to: %s "&lt;/span&gt; &lt;span style="color:4444FF;"&gt;%&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;join&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;event&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;event&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;name&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line15"&gt;15&lt;/a&gt; &lt;strong&gt;   &lt;span style="color:ff0000;"&gt; def&lt;/span&gt;&lt;span style="color:ff0000;"&gt; process_IN_MOVED_FROM&lt;/span&gt;&lt;span style="color:2040a0;"&gt;(self, event)&lt;/span&gt;:&lt;br /&gt;&lt;a name="line16"&gt;16&lt;/a&gt; &lt;/strong&gt;        &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#008000;"&gt;"move from: %s "&lt;/span&gt; &lt;span style="color:4444FF;"&gt;%&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;join&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;event&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;event&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;name&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line17"&gt;17&lt;/a&gt; &lt;strong&gt;   &lt;span style="color:ff0000;"&gt; def&lt;/span&gt;&lt;span style="color:ff0000;"&gt; process_IN_CREATE&lt;/span&gt;&lt;span style="color:2040a0;"&gt;(self, event)&lt;/span&gt;:&lt;br /&gt;&lt;a name="line18"&gt;18&lt;/a&gt; &lt;/strong&gt;        &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#008000;"&gt;"Create: %s "&lt;/span&gt; &lt;span style="color:4444FF;"&gt;%&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;join&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;event&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;event&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;name&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line19"&gt;19&lt;/a&gt;&lt;br /&gt;&lt;a name="line20"&gt;20&lt;/a&gt; &lt;span style="color:#444444;"&gt;#    def process_IN_DELETE(self, event):&lt;/span&gt;&lt;br /&gt;&lt;a name="line21"&gt;21&lt;/a&gt; &lt;span style="color:#444444;"&gt;#        print "Delete: %s " % os.path.join(event.path, event.name)&lt;/span&gt;&lt;br /&gt;&lt;a name="line22"&gt;22&lt;/a&gt; &lt;strong&gt;   &lt;span style="color:ff0000;"&gt; def&lt;/span&gt;&lt;span style="color:ff0000;"&gt; process_IN_MODIFY&lt;/span&gt;&lt;span style="color:2040a0;"&gt;(self, event)&lt;/span&gt;:&lt;br /&gt;&lt;a name="line23"&gt;23&lt;/a&gt; &lt;/strong&gt;        &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#008000;"&gt;"Modify: %s "&lt;/span&gt; &lt;span style="color:4444FF;"&gt;%&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;join&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;event&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;event&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;name&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line24"&gt;24&lt;/a&gt;&lt;br /&gt;&lt;a name="line25"&gt;25&lt;/a&gt;&lt;br /&gt;&lt;a name="line26"&gt;26&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;notifier&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;pyinotify&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;Notifier&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;wm&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;PTmp&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line27"&gt;27&lt;/a&gt;&lt;br /&gt;&lt;a name="line28"&gt;28&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;m_dir&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;'/mnt/'&lt;/span&gt;&lt;br /&gt;&lt;a name="line29"&gt;29&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;wdd&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;wm&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;add_watch&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;m_dir&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;mask&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;rec&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;True&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line30"&gt;30&lt;/a&gt; &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#008000;"&gt;"monitor:"&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;m_dir&lt;/span&gt;&lt;br /&gt;&lt;a name="line31"&gt;31&lt;/a&gt;&lt;br /&gt;&lt;a name="line32"&gt;32&lt;/a&gt; &lt;strong&gt;while&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;True&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line33"&gt;33&lt;/a&gt;     &lt;strong&gt;try&lt;/strong&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line34"&gt;34&lt;/a&gt;         &lt;span style="color:#2040a0;"&gt;notifier&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;process_events&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line35"&gt;35&lt;/a&gt;         &lt;strong&gt;if&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;notifier&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;check_events&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line36"&gt;36&lt;/a&gt;             &lt;span style="color:#2040a0;"&gt;notifier&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;read_events&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line37"&gt;37&lt;/a&gt;     &lt;strong&gt;except&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;KeyboardInterrupt&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line38"&gt;38&lt;/a&gt;         &lt;span style="color:#2040a0;"&gt;notifier&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;stop&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line39"&gt;39&lt;/a&gt;         &lt;strong&gt;break&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-7715239850877059426?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/7715239850877059426/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=7715239850877059426' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7715239850877059426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7715239850877059426'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/monitor-filesystem-events-by-python.html' title='monitor filesystem events by python'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-7868794325313071097</id><published>2012-01-23T00:20:00.003+08:00</published><updated>2012-01-23T00:28:04.307+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='電腦相關'/><title type='text'>神奇的網路傳輸 - powerline adapter</title><content type='html'>&lt;a href="https://picasaweb.google.com/lh/photo/iXrKETHQ8UJXas7220n47aZpEMEHIN1w7hrAz_kx2i0?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-gmd66fAV6dM/Txw3S0JMbzI/AAAAAAAAY4o/Z0xHbGKJkN8/s640/IMGP7535.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;售價: 19xx, 這是利用電源線來傳遞網路封包, 很神奇的東西。不需要在部一堆長長的網路線, 插上插座就好了。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/wjS1dfmURjL_uzAJNzxOMaZpEMEHIN1w7hrAz_kx2i0?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-PwhY3qsS6I4/Txw3UbHqfUI/AAAAAAAAY4w/1_co3HZPwFM/s640/IMGP7536.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;不過不能透過延長線使用。還蠻驚訝有這樣的產品。對於透天的住宅還蠻好用的, 比起無線 ap, 這個比較方便。&lt;br /&gt;&lt;br /&gt;ref: &lt;a href="http://micnet.blogspot.com/2006/05/plc.html"&gt;http://micnet.blogspot.com/2006/05/plc.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-7868794325313071097?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/7868794325313071097/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=7868794325313071097' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7868794325313071097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7868794325313071097'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/powerline-adapter.html' title='神奇的網路傳輸 - powerline adapter'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/-gmd66fAV6dM/Txw3S0JMbzI/AAAAAAAAY4o/Z0xHbGKJkN8/s72-c/IMGP7535.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-4822449758672340932</id><published>2012-01-21T00:17:00.011+08:00</published><updated>2012-01-28T21:08:43.969+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜七雜八'/><category scheme='http://www.blogger.com/atom/ns#' term='computer book'/><title type='text'>20120120 若水堂購書</title><content type='html'>今天 (20120120) 又到成大若水堂購書。&lt;br /&gt;&lt;br /&gt;Git權威指南 89 (534)&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/ejCR5jJIe7itv1IhhqGKC9MTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-Z5IWMN5x62o/TxmS7MPl-dI/AAAAAAAAY3Y/srQcLrNBHkc/s640/P1310076.JPG" height="200" width="300" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/oh254vB9lfRM_1bQ7MV-FNMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-8lrRyf0ekUY/TxmTD9_EtII/AAAAAAAAY34/eWROsq9NMx0/s400/P1310081.JPG" height="200" width="300" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;看著書底的推薦:「目前市面上關於 git 的書不在少數」我想了一回兒, 台灣比你們還慘, 好像連一本繁體中文的 git 書籍都沒有。這裡的推薦詞自然是指中國的電腦書籍。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/VlsQc0fTuitCMfGjyTdRzdMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" src="https://lh6.googleusercontent.com/-ZHpfCWYvsDQ/TxmS_yj5ttI/AAAAAAAAY3o/8HVK1NMmHsI/s400/P1310079.JPG" height="400" width="300" /&gt;&lt;/a&gt;台灣的工程師除了電腦的專業, 還要面對英文的專業, 一個擁有兩項專業的軟體工程師卻不見得能得到兩倍薪水 (其實有這樣的能力,  拿三倍薪水也不為過), 真是辛苦。若翻譯工業能幫上忙, 無疑是幫了軟體工程師一個大忙。工程師們也能努力在電腦專業上發展, 天才總是少數人。&lt;br /&gt;&lt;br /&gt;自從看完 &lt;a href="http://descent-incoming.blogspot.com/2012/01/code-hidden-language-of-computer.html"&gt;CODE&lt;/a&gt; 之後, 閱讀簡體中文書籍沒在讓我那麼害怕, 就算有些字看不懂, 有些技術術語差異頗大, 但總能在一段時間之後習慣。而簡體中文在怎麼不習慣, 以我的英文程度, 還是遠遠勝過讀原文書籍。我每每在想, 要是因為語言的關係無法讀到某些經典之作, 真是一大遺憾。&lt;br /&gt;&lt;br /&gt;不過這兩本都不是翻譯書籍而是中國的電腦技術作家寫的, 這也真讓台灣的我們夠羨慕的。就算可以勉強看懂簡體中文, 但總是不習慣其中的用語, 還是希望能有適合台灣讀者的技術書籍出現。要是我來出版簡體中文書籍繁體, 術語台灣化, 不知道有沒賺頭。&lt;br /&gt;&lt;br /&gt;扯遠了, 閱讀技術書籍, 沉進在電腦技術的茫茫大海中, 享受著在浮在沉的樂趣 (這算樂趣嗎？)&lt;br /&gt;&lt;br /&gt;書中一開始提到 git 的發音, 讀作"哥億特", 不過在 Tech Talk: Linus Torvalds on git: &lt;a href="http://www.youtube.com/watch?v=4XpnKHJAok8"&gt;http://www.youtube.com/watch?v=4XpnKHJAok8&lt;/a&gt; 好像不是這樣發音阿?&lt;br /&gt;&lt;br /&gt;我只剛看了前面幾章, 我覺得很棒, 把我想知道的 git 功能羅列出來, 這本書不算便宜, 而且還用膠膜封住, 我可是下了不少賭注, 還好沒讓我後悔, 這是一本可以用來學習 git 的書籍。&lt;br /&gt;&lt;br /&gt;本書網站: &lt;a href="http://www.worldhello.net/gotgit/"&gt;http://www.worldhello.net/gotgit/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這是 git 維護者&lt;b&gt;濱野 純(Junio C Hamano)&lt;/b&gt;在書背的推薦, 他也有關於 git 的著作:&lt;br /&gt;入門 Git by 濱野 純(Junio C Hamano) (著): &lt;a href="http://www.amazon.co.jp/%E5%85%A5%E9%96%80Git-%E6%BF%B1%E9%87%8E-%E7%B4%94-Junio-Hamano/dp/4798023809"&gt;http://www.amazon.co.jp/%E5%85%A5%E9%96%80Git-%E6%BF%B1%E9%87%8E-%E7%B4%94-Junio-Hamano/dp/4798023809&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;若是不想購買此書學習 git, 可以參考以下網路書籍 (progit 有中文, The Git Community Book 我就不知道了):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://book.git-scm.com/"&gt;http://book.git-scm.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://progit.org/book/"&gt;http://progit.org/book/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;C++ 反匯編與逆向分析技術揭密 69 (414)&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/6EOOhiLsCS5AIw8Ul-7pHNMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-RgNqwbJwIAg/TxmS9fES62I/AAAAAAAAY3g/2mJPlzptzTA/s640/P1310077.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;看到這樣的書名, 系統軟體工程師應該都難掩好奇心, 會想打開來翻翻看吧！我也是, 不過由於這本書有封膜, 所以不得其門而入。今天買回來之後, 有點失望, 因為這是以 vc6/windows 平台作為講解。vc6 實在不是我熟悉的工具, 雖然使用什麼 toolchain 對學習這種反組譯/逆向工程來說應該沒什麼分別, 但我還是想要熟悉 gnu toolchain。&lt;br /&gt;&lt;br /&gt;我大概知道為什麼平台是在 windows 了, 因為這本書在講述逆向工程, 而在 linux 下幾乎都有 source code, 根本不需要做什麼逆向工程。所以講解平台以 windows 為主。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/ZHG-3GgzlTVnwvAQStrgHdMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-3dOkMrVpaXU/TxmTHvxRMxI/AAAAAAAAY4I/jzwWxmFiTnA/s640/P1310083.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;德語速成 36 (216)&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/vx9VgGpuG2qdSukkELQxKEU-Kf2DhqafvTPNQJhKRrw?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-KjSZijrRs48/TxmTUFs2AII/AAAAAAAAY4Q/GClsht8j4R0/s288/P1310075.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/D9ILHCcoKW80ASgk3QOh-kU-Kf2DhqafvTPNQJhKRrw?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-7-Km-spw1Z4/TxmTVaic69I/AAAAAAAAY4g/y_J5tlv4xto/s288/P1310078.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-4822449758672340932?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/4822449758672340932/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=4822449758672340932' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/4822449758672340932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/4822449758672340932'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/20120120.html' title='20120120 若水堂購書'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-Z5IWMN5x62o/TxmS7MPl-dI/AAAAAAAAY3Y/srQcLrNBHkc/s72-c/P1310076.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-8893416981377183708</id><published>2012-01-20T19:02:00.004+08:00</published><updated>2012-01-23T00:30:04.933+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜七雜八'/><title type='text'>又踩入博客來網路書局的折扣陷阱</title><content type='html'>&lt;div class="header"&gt;     &lt;div id="goTop"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="780"&gt;  &lt;tbody&gt;&lt;tr&gt;     &lt;td width="179"&gt;&lt;a href="http://www.books.com.tw/exep/ap.php?apid=books&amp;amp;areaid=head_act_logo&amp;amp;url=http://www.books.com.tw/"&gt;&lt;img src="http://addons.books.com.tw/G/img2000/act_01.jpg" alt="回博客來" height="33" border="0" width="111" /&gt;&lt;/a&gt;&lt;/td&gt;    &lt;td id="auto" width="316"&gt;&lt;a href="http://www.books.com.tw/exep/ap.php?apid=books&amp;amp;areaid=head_act_activty&amp;amp;url=http://www.books.com.tw/exep/activity/2012/01/dailycoupon/"&gt;&lt;img src="http://addons.books.com.tw/G/ADbanner/2012/01/gold/banner/316x33c.jpg" height="33" border="0" width="316" /&gt;&lt;/a&gt;&lt;/td&gt;    &lt;td width="29"&gt;&lt;img src="http://addons.books.com.tw/G/img2000/act_03.jpg" height="33" border="0" width="29" /&gt;&lt;/td&gt;    &lt;td width="61"&gt;&lt;a href="http://www.books.com.tw/exep/ap.php?apid=books&amp;amp;areaid=head_act_cart&amp;amp;url=http://db.books.com.tw/exep/shopping/cart.php"&gt;&lt;img src="http://addons.books.com.tw/G/img2000/act_04.jpg" alt="我的購物車" height="33" border="0" width="61" /&gt;&lt;/a&gt;&lt;/td&gt;    &lt;td width="59"&gt;&lt;a href="http://www.books.com.tw/exep/ap.php?apid=books&amp;amp;areaid=head_act_mem&amp;amp;url=https://myaccount.books.com.tw/"&gt;&lt;img src="http://addons.books.com.tw/G/img2000/act_05.jpg" alt="會員專區" height="33" border="0" width="59" /&gt;&lt;/a&gt;&lt;/td&gt;    &lt;td width="62"&gt;&lt;a href="http://www.books.com.tw/exep/ap.php?apid=books&amp;amp;areaid=head_act_cus&amp;amp;url=http://www.books.com.tw/exep/qa/webmail.php?m_id=0000000007"&gt;&lt;img src="http://addons.books.com.tw/G/img2000/act_06.jpg" alt="服務信箱" height="33" border="0" width="62" /&gt;&lt;/a&gt;&lt;/td&gt;    &lt;td width="74"&gt;&lt;a href="http://www.books.com.tw/exep/ap.php?apid=books&amp;amp;areaid=head_act_qa&amp;amp;url=http://www.books.com.tw/qa/index.php"&gt;&lt;img src="http://addons.books.com.tw/G/img2000/act_07.jpg" alt="Q&amp;amp;A詢問台" height="33" border="0" width="74" /&gt;&lt;/a&gt;&lt;/td&gt;   &lt;td width="74"&gt;&lt;a href="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/#" style="display:block; width:64px; height:33px; border:0; font-size:12px; line-height:33px; cursor:pointer; position:relative;" title="把這個網頁分享到社群!"&gt;&lt;span id="span_bg" style="display:block; width:64px; height:33px; border:0;  line-height:33px; cursor:pointer; position:absolute;left:0;z-index:2; background:url(http://addons.books.com.tw/G/img2000/act_tway/twayicon.gif) no-repeat 0 -90px;font-size:12px;" &gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt; &lt;/div&gt;  &lt;div align="center"&gt;   &lt;table border="0" cellpadding="0" cellspacing="0" width="980"&gt;     &lt;tbody&gt;&lt;tr&gt;       &lt;td valign="top" align="left"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="980"&gt;         &lt;tbody&gt;&lt;tr&gt;           &lt;td valign="top" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/game_01.jpg" height="240" width="980" /&gt;&lt;/td&gt;           &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td valign="top" align="left"&gt;&lt;table id="___01" border="0" cellpadding="0" cellspacing="0" width="980"&gt;         &lt;tbody&gt;&lt;tr&gt;           &lt;td colspan="5"&gt;&lt;img id="game_02" src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/game_02.jpg" alt="" height="33" width="980" /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td&gt;&lt;img id="game_03" src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/game_03.jpg" alt="" height="143" width="170" /&gt;&lt;/td&gt;           &lt;td&gt;             &lt;div id="slotWrapper"&gt;               &lt;ul class="slot"&gt;&lt;li&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/c25.jpg" height="143" width="500" /&gt;&lt;/li&gt;&lt;li&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/c25.jpg" height="143" width="500" /&gt;&lt;/li&gt;&lt;li&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/c25.jpg" height="143" width="500" /&gt;&lt;/li&gt;&lt;li&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/c25.jpg" height="143" width="500" /&gt;&lt;/li&gt;&lt;li&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/c50.jpg" height="143" width="500" /&gt;&lt;/li&gt;&lt;li&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/c100.jpg" height="143" width="500" /&gt;&lt;/li&gt;&lt;li&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/c50.jpg" height="143" width="500" /&gt;&lt;/li&gt;&lt;li&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/c25.jpg" height="143" width="500" /&gt;&lt;/li&gt;&lt;li&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/c25.jpg" height="143" width="500" /&gt;&lt;/li&gt;&lt;li&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/c25.jpg" height="143" width="500" /&gt;&lt;/li&gt;&lt;/ul&gt;             &lt;/div&gt;           &lt;/td&gt;           &lt;td&gt;&lt;img id="game_05" src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/game_05.jpg" alt="" height="143" width="30" /&gt;&lt;/td&gt;           &lt;td style="cursor: pointer;"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/game_06.jpg" alt="" name="game_06" id="game_06" height="143" border="0" width="235" /&gt;&lt;/td&gt;           &lt;td&gt;&lt;img id="game_07" src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/game_07.jpg" alt="" height="143" width="45" /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td colspan="5"&gt;&lt;img id="game_08" src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/game_08.jpg" alt="" height="67" width="980" /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td colspan="3" rowspan="3"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/game_09.jpg" alt="" usemap="#game_09Map" id="game_09" height="159" border="0" width="700" /&gt;&lt;/td&gt;           &lt;td&gt;&lt;a href="http://www.books.com.tw/2012gold/"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/game_10.jpg" alt="" name="game_10" id="game_10" height="53" border="0" width="235" /&gt;&lt;/a&gt;&lt;/td&gt;           &lt;td rowspan="3"&gt;&lt;img id="game_11" src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/game_11.jpg" alt="" height="159" width="45" /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/game_12.jpg" alt="" name="game_12" usemap="#game_12Map" id="game_12" height="53" border="0" width="235" /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td style="cursor: pointer;"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/game_13.jpg" title="提醒您，輸入E-MAIL時請確認資料是否正確，博客來不會留存相關轉寄資料。" name="game_13" id="forward" height="53" border="0" width="235" /&gt;&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td valign="top" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/game_14.jpg" height="83" width="980" /&gt;&lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td background="images/dd02.jpg" valign="top" align="left"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="980"&gt;         &lt;tbody&gt;&lt;tr&gt;           &lt;td valign="top" align="left"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="980"&gt;             &lt;tbody&gt;&lt;tr&gt;               &lt;td valign="top" width="44" align="left"&gt;&lt;br /&gt;&lt;/td&gt;               &lt;td valign="top" align="left"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="892"&gt;                 &lt;tbody&gt;&lt;tr&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="24" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                 &lt;/tr&gt;                 &lt;tr&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="10" width="35" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;a href="http://www.books.com.tw/beauty/store97/page_0000097173.html"&gt;      &lt;img src="http://addons.books.com.tw/G/N00/7/N000229057.jpg" border="0" width="180" /&gt;&lt;/a&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="10" width="34" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;a href="http://www.books.com.tw/exep/prod/newprod3/blcat.php?sub=0114000000"&gt;      &lt;img src="http://addons.books.com.tw/G/N00/0/N000157840.jpg" border="0" width="180" /&gt;&lt;/a&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="10" width="34" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;a href="http://www.books.com.tw/exep/activity/activity.php?id=0000036577&amp;amp;sid=0000036577&amp;amp;page=1"&gt;      &lt;img src="http://addons.books.com.tw/G/N01/0/N010243270.jpg" border="0" width="180" /&gt;&lt;/a&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="10" width="34" /&gt;&lt;/td&gt;                   &lt;td valign="top" align="left"&gt;      &lt;a href="http://www.books.com.tw/exep/activity/activity.php?id=0000035723&amp;amp;sid=0000035723&amp;amp;page=1"&gt;      &lt;img src="http://addons.books.com.tw/G/002/8/0020156868.jpg" border="0" width="180" /&gt;&lt;/a&gt;&lt;/td&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="10" width="35" /&gt;&lt;/td&gt;                 &lt;/tr&gt;                 &lt;tr&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;span style="font-size:11pt;"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/span&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;      &lt;span style="font-size:11pt;"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/span&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;span style="font-size:11pt;"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/span&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;      &lt;span style="font-size:11pt;"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/span&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;span style="font-size:11pt;"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/span&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;      &lt;span style="font-size:11pt;"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/span&gt;&lt;/td&gt;                   &lt;td valign="top" align="left"&gt;&lt;span style="font-size:11pt;"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/span&gt;&lt;/td&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/td&gt;                 &lt;/tr&gt;                 &lt;tr&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td class="css1" valign="top" width="180" align="left"&gt;      &lt;p align="center"&gt;      &lt;a href="http://www.books.com.tw/beauty/store97/page_0000097173.html"&gt;      &lt;span style="font-size:11pt;"&gt;過年搶纖必Buy！2/5前船井全面88折&lt;/span&gt;&lt;/a&gt;                     &lt;/p&gt;                   &lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;p align="center"&gt;      &lt;a href="http://www.books.com.tw/exep/prod/newprod3/blcat.php?sub=0114000000"&gt;      &lt;span style="font-size:11pt;"&gt;1/16~1/22新春優惠&amp;gt;保健食品滿千結帳再9折 ! &lt;/span&gt;&lt;/a&gt;                     &lt;/p&gt;                   &lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;p align="center"&gt;      &lt;a href="http://www.books.com.tw/exep/activity/activity.php?id=0000036577&amp;amp;sid=0000036577&amp;amp;page=1"&gt;      &lt;span style="font-size:11pt;"&gt;日立HITACHI指定商品，買再送好禮三選一&lt;/span&gt;&lt;/a&gt;                     &lt;/p&gt;                   &lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" align="left"&gt;                     &lt;p align="center"&gt;      &lt;a href="http://www.books.com.tw/exep/activity/activity.php?id=0000035723&amp;amp;sid=0000035723&amp;amp;page=1"&gt;      &lt;span style="font-size:11pt;"&gt;2/19前預購，再送限量明信片組&lt;/span&gt;&lt;/a&gt;                     &lt;/p&gt;                   &lt;/td&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                 &lt;/tr&gt;                 &lt;tr&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                 &lt;/tr&gt;                 &lt;tr&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;a href="http://www.books.com.tw/exep/activity/activity.php?id=0000036535&amp;amp;sid=0000036535&amp;amp;page=1"&gt;      &lt;img src="http://addons.books.com.tw/G/001/8/0010500708.jpg" height="252" border="0" width="180" /&gt;&lt;/a&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;a href="http://www.books.com.tw/exep/activity/activity.php?id=0000036496&amp;amp;sid=0000036496&amp;amp;page=2#middle"&gt;      &lt;img src="http://addons.books.com.tw/G/001/1/0010525801.jpg" height="252" border="0" width="180" /&gt;&lt;/a&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;a href="http://www.books.com.tw/exep/activity/activity.php?id=0000036356&amp;amp;sid=0000036356&amp;amp;page=1"&gt;      &lt;img src="http://addons.books.com.tw/G/F01/2/8/1/F012598781.jpg" height="252" border="0" width="180" /&gt;&lt;/a&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" align="left"&gt;      &lt;a href="http://www.books.com.tw/exep/activity/activity.php?id=0000036225&amp;amp;sid=0000036225&amp;amp;page=1#4"&gt;      &lt;img src="http://addons.books.com.tw/G/J03/6/J030030976.jpg" height="252" border="0" width="180" /&gt;&lt;/a&gt;&lt;/td&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                 &lt;/tr&gt;                 &lt;tr&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/td&gt;                   &lt;td valign="top" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="6" width="6" /&gt;&lt;/td&gt;                 &lt;/tr&gt;                 &lt;tr&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;p align="center"&gt;      &lt;a href="http://www.books.com.tw/exep/activity/activity.php?id=0000036535&amp;amp;sid=0000036535&amp;amp;page=1"&gt;      &lt;span style="font-size:11pt;"&gt;博客來送紅包，套書最高現折300&lt;/span&gt;&lt;/a&gt;                     &lt;/p&gt;                   &lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;p align="center"&gt;      &lt;a href="http://www.books.com.tw/exep/activity/activity.php?id=0000036496&amp;amp;sid=0000036496&amp;amp;page=2#middle"&gt;      &lt;span style="font-size:11pt;"&gt;新春開運看這裡&lt;/span&gt;&lt;/a&gt;                     &lt;/p&gt;                   &lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;      &lt;p align="center"&gt;      &lt;a href="http://www.books.com.tw/exep/activity/activity.php?id=0000036356&amp;amp;sid=0000036356&amp;amp;page=1"&gt;      &lt;span style="font-size:11pt;"&gt;外文好書一折起&lt;/span&gt;&lt;/a&gt;                     &lt;/p&gt;                   &lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                   &lt;td valign="top" align="left"&gt;      &lt;p align="center"&gt;      &lt;a href="http://www.books.com.tw/exep/activity/activity.php?id=0000036225&amp;amp;sid=0000036225&amp;amp;page=1#4"&gt;      &lt;span style="font-size:11pt;"&gt;精選日雜9折&lt;/span&gt;&lt;/a&gt;                     &lt;/p&gt;                   &lt;/td&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;br /&gt;&lt;/td&gt;                 &lt;/tr&gt;                  &lt;tr&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="180" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="34" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                   &lt;td valign="top" width="35" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="12" width="10" /&gt;&lt;/td&gt;                 &lt;/tr&gt;               &lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;               &lt;td valign="top" width="44" align="left"&gt;&lt;br /&gt;&lt;/td&gt;             &lt;/tr&gt;           &lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td valign="top" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="10" width="10" /&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td valign="top" align="left"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="980"&gt;             &lt;tbody&gt;&lt;tr&gt;               &lt;td valign="top" width="44" align="left"&gt;&lt;br /&gt;&lt;/td&gt;               &lt;td valign="top" align="right"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" width="892"&gt;                 &lt;tbody&gt;&lt;tr&gt;                   &lt;td valign="top" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="10" width="715" /&gt;&lt;/td&gt;                   &lt;td valign="top" align="left"&gt;      &lt;a href="http://www.books.com.tw/"&gt;      &lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/goto01.gif" height="62" border="0" width="130" /&gt;&lt;/a&gt;&lt;/td&gt;                 &lt;/tr&gt;               &lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;               &lt;td valign="top" width="44" align="left"&gt;&lt;br /&gt;&lt;/td&gt;             &lt;/tr&gt;           &lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;           &lt;td valign="top" align="left"&gt;&lt;img src="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/images/dot00.gif" height="50" width="10" /&gt;&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt; &lt;/div&gt;  &lt;map name="game_09Map" id="game_09Map"&gt; &lt;area shape="rect" coords="273,113,427,142" href="http://www.books.com.tw/exep/qa/search_detail.php?i_id=0000000062&amp;amp;sub=F&amp;amp;key" target="_blank" alt="E-Coupon抵用辦法及使用說明"&gt;&lt;/map&gt;&lt;map name="game_12Map" id="game_12Map"&gt;&lt;/map&gt;&lt;a href="http://www.books.com.tw/exep/activity/2012/01/dailycoupon/"&gt;http://www.books.com.tw/exep/activity/2012/01/dailycoupon/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這個活動又成功吸引我了, 今天剛好拉到 100 coupon, 買了&lt;br /&gt;&lt;a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010524056"&gt;為什麼書賣這麼貴？：臺灣出版行銷指南&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;280X0.7-100+20=116&lt;br /&gt;&lt;br /&gt;比五折還便宜, 真的忍不住。&lt;br /&gt;&lt;br /&gt;通常憋住的理由:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;這本書會佔空間&lt;/li&gt;&lt;li&gt;書沒到五折沒有比舊書攤便宜&lt;/li&gt;&lt;li&gt;就算折扣不錯, 但加起來也要花不少&lt;/li&gt;&lt;li&gt;現在還不會看這本書&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;很顯然, 這本書完全沒有符合以上四點:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;體積小, 不佔空間&lt;/li&gt;&lt;li&gt;低於五折&lt;/li&gt;&lt;li&gt;只要花 116&lt;/li&gt;&lt;li&gt;由於是小書, 又不是專業書籍, 很容易看&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;博客來折扣驚人, 這本書賣這個價錢我實在很難相信這有賺錢, 難道博客來進價是 4 折以下嗎？&lt;br /&gt;&lt;br /&gt;有這樣的進價實力, 博客來的行銷人員容易做事多了。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010351836"&gt;最糟也最棒的書店&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;30 元, 看有沒有人有興趣。我忍不住, 有抽到 100 就買這本。冏 ... 還真的讓我抽到 100, 當然繼續敗了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-8893416981377183708?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/8893416981377183708/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=8893416981377183708' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/8893416981377183708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/8893416981377183708'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/blog-post_20.html' title='又踩入博客來網路書局的折扣陷阱'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-1010309922446180630</id><published>2012-01-18T16:47:00.001+08:00</published><updated>2012-01-18T16:48:44.916+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>python url encone</title><content type='html'>/ 不會被編碼的問題:&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; import urllib&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; urllib.quote('/test')&lt;br /&gt;'/test'&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; urllib.quote('/test', '')&lt;br /&gt;'%2Ftest'&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; urllib.quote('\n', '')&lt;br /&gt;'%0A'&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; urllib.quote('\r', '')&lt;br /&gt;'%0D'&lt;br /&gt;&lt;br /&gt;ref:&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/1695183/how-to-percent-encode-url-parameters-in-python"&gt;http://stackoverflow.com/questions/1695183/how-to-percent-encode-url-parameters-in-python&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-1010309922446180630?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/1010309922446180630/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=1010309922446180630' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/1010309922446180630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/1010309922446180630'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/python-url-encone.html' title='python url encone'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-7374069345201651760</id><published>2012-01-18T14:17:00.004+08:00</published><updated>2012-01-18T16:16:06.046+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>資料結構教學網站</title><content type='html'>在 ptt c/c++ 版上看到的。&lt;br /&gt;&lt;a href="http://www.cs.usfca.edu/%7Egalles/visualization/Algorithms.html"&gt;http://www.cs.usfca.edu/~galles/visualization/Algorithms.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這很值得薦荐, 在網頁上就可以看到整個執行結果, 不在只是單純的文字輸出。&lt;br /&gt;以 avl tree 為例子:&lt;br /&gt;我終於知道增加一個節點時, 整顆樹是怎麼旋轉, 這整個過程一一呈獻出來, 只有紙上的圖案, 實在不容易理解 avl tree 到底是怎麼旋轉的？&lt;br /&gt;&lt;br /&gt;rb tree 也是, 很複雜的選轉方式, 網頁上還標明紅黑顏色, 整顆樹更加清楚。&lt;br /&gt;還有可怕的 b, b+ tree。&lt;br /&gt;可以好好練功了, 複雜的資料結構, 說不定比寫 device driver 還困難哦！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-7374069345201651760?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/7374069345201651760/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=7374069345201651760' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7374069345201651760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7374069345201651760'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/blog-post.html' title='資料結構教學網站'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-7057061419484042066</id><published>2012-01-14T00:30:00.006+08:00</published><updated>2012-01-14T13:44:37.689+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux 相關'/><title type='text'>test hime git version in Ubuntu 11.04</title><content type='html'>透過 irc &lt;a href="http://webchat.freenode.net/"&gt;http://webchat.freenode.net/&lt;/a&gt; #hime 很多人的幫忙, 尤其是 Tetralet, 加入 /etc/X11/xinit/xinput.d/hime 再執行 im-switch 選擇 hime, 重開 X 就可以使用 hime 了。不過這是使用 XIM, 關於 gtk immodule 還要在另外測試。&lt;br /&gt;&lt;br /&gt;測試環境:&lt;br /&gt;Ubuntu 10.04.3 LTS&lt;br /&gt;Ubuntu 11.04&lt;br /&gt;&lt;br /&gt;root@ubuntu:~# cat /etc/X11/xinit/xinput.d/hime&lt;br /&gt;XIM=hime&lt;br /&gt;XIM_PROGRAM=/usr/local/bin/hime&lt;br /&gt;XIM_ARGS=&lt;br /&gt;GTK_IM_MODULE=xim&lt;br /&gt;if [ -e /usr/lib/qt3/plugins/inputmethods/libqgcin.so ] ||&lt;br /&gt;[ -e /usr/lib/qt4/plugins/inputmethods/im-gcin.so ]; then&lt;br /&gt;QT_IM_MODULE=gcin&lt;br /&gt;else&lt;br /&gt;QT_IM_MODULE=xim&lt;br /&gt;fi&lt;br /&gt;DEPENDS=&lt;br /&gt;&lt;br /&gt;我是從 source 開始, 自行編譯, 加入酷音、日文支援&lt;br /&gt;libchewing3-dev&lt;br /&gt;libanthy-dev&lt;br /&gt;libxtst-dev (must)&lt;br /&gt;&lt;br /&gt;輸入法相關變數, 得要好好研究怎麼執行一個輸入法:&lt;br /&gt;GTK_IM_MODULE=gcin&lt;br /&gt;QT_IM_MODULE=gcin&lt;br /&gt;XMODIFIERS=@im=gcin&lt;br /&gt;&lt;br /&gt;&lt;div class="linestyle2 colourline"&gt;&lt;span&gt;[00:18] &amp;lt;&lt;/span&gt;&lt;span class="Xc4"&gt;&lt;span class="hyperlink-whois"&gt;Tetralet&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt; descent: /usr/lib/gtk-2.0/2.10.0/immodules/im-hime.so ← 正確位置&lt;/span&gt;&lt;/div&gt;&lt;div class="linestyle1 colourline"&gt;&lt;span&gt;[00:18] &lt;/span&gt;&lt;span class="Xc4"&gt;==&lt;/span&gt;&lt;span&gt; &lt;span class="hyperlink-whois"&gt;glin&lt;/span&gt; [~lcp@61-217-163-14.dynamic.hinet.net] has quit [Quit: Konversation terminated!]&lt;/span&gt;&lt;/div&gt;&lt;div class="linestyle2 colourline"&gt;&lt;span&gt;[00:18] &amp;lt;&lt;span class="hyperlink-whois"&gt;descent&lt;/span&gt;&amp;gt; 裝在這裡&lt;/span&gt;&lt;/div&gt;&lt;div class="linestyle1 colourline"&gt;&lt;span&gt;[00:18] &amp;lt;&lt;span class="hyperlink-whois"&gt;descent&lt;/span&gt;&amp;gt; 感動阿&lt;/span&gt;&lt;/div&gt;&lt;div class="linestyle2 colourline"&gt;&lt;span&gt;[00:18] &amp;lt;&lt;span class="hyperlink-whois"&gt;descent&lt;/span&gt;&amp;gt; 我有搬到那裡&lt;/span&gt;&lt;/div&gt;&lt;div class="linestyle1 colourline"&gt;&lt;span&gt;[00:18] &amp;lt;&lt;span class="hyperlink-whois"&gt;letoh&lt;/span&gt;&amp;gt; sorry&lt;span&gt;  &lt;/span&gt; 是我眼殘看錯&lt;span&gt;  &lt;/span&gt;原來是在講 im-hime.so XD&lt;/span&gt;&lt;/div&gt;&lt;div class="linestyle2 colourline"&gt;&lt;span&gt;[00:19] &amp;lt;&lt;span class="hyperlink-whois"&gt;descent&lt;/span&gt;&amp;gt; 我下次在測測看&lt;/span&gt;&lt;/div&gt;&lt;div class="linestyle1 colourline"&gt;&lt;span&gt;[00:19] &amp;lt;&lt;span class="hyperlink-whois"&gt;descent&lt;/span&gt;&amp;gt; 因為測了很多步驟&lt;/span&gt;&lt;/div&gt;&lt;div class="linestyle2 colourline"&gt;&lt;span&gt;[00:19] &amp;lt;&lt;span class="hyperlink-whois"&gt;descent&lt;/span&gt;&amp;gt; 目前這樣是確定可以的&lt;/span&gt;&lt;/div&gt;&lt;div class="linestyle1 colourline"&gt;&lt;span&gt;[00:19] &amp;lt;&lt;/span&gt;&lt;span class="Xc4"&gt;&lt;span class="hyperlink-whois"&gt;Tetralet&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;gt; descent: 然後還要跑 gtk-query-immodules-2.0&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-7057061419484042066?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/7057061419484042066/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=7057061419484042066' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7057061419484042066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7057061419484042066'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/test-hime-git-version-in-ubuntu-1104.html' title='test hime git version in Ubuntu 11.04'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-220489914761916672</id><published>2012-01-13T20:07:00.008+08:00</published><updated>2012-01-16T21:56:30.803+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='assembly'/><title type='text'>x86 inline assembly gcc/gas</title><content type='html'>每次都忘記, 每次都搞不清楚, 這次我決定記下來並且搞清楚。&lt;br /&gt;&lt;br /&gt;gcc 的 inline assembly 有好幾種語法, 有簡單的、有複雜的, 這裡只介紹最複雜的那種 (placeholders : 那個 %0, %1, 完全搞不清楚。), 因為有這種最複雜的語法就可以搞定一切。我用一個對照的語法來說明, 這樣會比較好了解。這邊示範的是 x86 組合語言。&lt;br /&gt;&lt;br /&gt;12-15, 26-29 直接拿來比對就知道 placeholders 到底怎麼用。&lt;br /&gt;先把 "d"(data1) -&amp;gt; "r"(data1), "c"(data2) -&amp;gt; "r"(data2),&lt;br /&gt;"=a"(result) -&amp;gt; "=r"(result), 夠簡單吧！&lt;br /&gt;d 表示使用 edx&lt;br /&gt;c 表示使用 ecx&lt;br /&gt;a 表示使用 eax&lt;br /&gt;r 表示使用任何可用的 general-purpose register&lt;br /&gt;所以用 r 可能還是會用到 edx, ecx, eax 的組合, 或是 ebx, edx, eax, 讓 compiler 來煩惱就好。&lt;br /&gt;&lt;br /&gt;再來是神奇的 %0, %1, %2&lt;br /&gt;&lt;br /&gt;imull %%edx, %%ecx&lt;br /&gt;20 行注解寫到 %1 -&amp;gt; data1, data1 在 15 行是 "d"(data1), d 表示 edx, 所以換掉 %%edx =&amp;gt;&lt;br /&gt;imull %1, %%ecx&lt;br /&gt;&lt;br /&gt;"movl %%ecx, %%eax"&lt;br /&gt;參照 line 28, 14 =&amp;gt;&lt;br /&gt;"movl %%ecx, %0"&lt;br /&gt;&lt;br /&gt;參照 line 29, 15&lt;br /&gt;依樣畫葫蘆得到&lt;br /&gt;%%ecx -&amp;gt; %2&lt;br /&gt;所以&lt;br /&gt;imull %1, %%ecx&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;imull %1, %2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"movl %%ecx, %0"&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;"movl %2, %0"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;這就變成 line 26 - 29 的 placeholders 版本。&lt;br /&gt;&lt;br /&gt;看看產生的組合語言程式 (inline_asm_placeholders.s line 20, 21), 使用 r 的版本 (placeholders) 只用了 eax, edx, 沒有用到 ecx register。placeholders 的語法還可以最佳化轉譯出來的組合語言程式碼。&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;inline_asm.c&lt;/legend&gt;&lt;br /&gt;&lt;pre&gt;&lt;a name="line1" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line1"&gt; 1&lt;/a&gt; #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;a name="line2" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line2"&gt; 2&lt;/a&gt;&lt;br /&gt;&lt;a name="line3" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line3"&gt; 3&lt;/a&gt; #define PLACEHOLDERS&lt;br /&gt;&lt;a name="line4" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line4"&gt; 4&lt;/a&gt;&lt;br /&gt;&lt;a name="line5" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line5"&gt; 5&lt;/a&gt; #ifndef PLACEHOLDERS&lt;br /&gt;&lt;a name="line6" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line6"&gt; 6&lt;/a&gt; int main(void)&lt;br /&gt;&lt;a name="line7" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line7"&gt; 7&lt;/a&gt; {&lt;br /&gt;&lt;a name="line8" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line8"&gt; 8&lt;/a&gt;   int data1=10;&lt;br /&gt;&lt;a name="line9" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line9"&gt; 9&lt;/a&gt;   int data2=20;&lt;br /&gt;&lt;a name="line10" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line10"&gt;10&lt;/a&gt;   int result;&lt;br /&gt;&lt;a name="line11" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line11"&gt;11&lt;/a&gt;&lt;br /&gt;&lt;a name="line12" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line12"&gt;12&lt;/a&gt;   asm ("imull %%edx, %%ecx\n\t" (%edx, %ecx 暫存器的值相乘後存回 %ecx (這是 at&amp;amp;t 語法的關係) )&lt;br /&gt;&lt;a name="line13" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line13"&gt;13&lt;/a&gt;        "movl %%ecx, %%eax" (這麼簡單不用說明吧！)&lt;br /&gt;&lt;a name="line14" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line14"&gt;14&lt;/a&gt;        :"=a"(result) (a (eax) 的值存入 result, = 表示從暫存器 output 到變數, 名為 Constraint Modifiers)&lt;br /&gt;&lt;a name="line15" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line15"&gt;15&lt;/a&gt;        :"d"(data1), "c"(data2)); // data1 存入 d(edx), data2 存入 c (ecx)&lt;br /&gt;&lt;a name="line16" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line16"&gt;16&lt;/a&gt;   printf("the result is %d\n", result);&lt;br /&gt;&lt;a name="line17" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line17"&gt;17&lt;/a&gt;   return 0;&lt;br /&gt;&lt;a name="line18" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line18"&gt;18&lt;/a&gt; }&lt;br /&gt;&lt;a name="line19" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line19"&gt;19&lt;/a&gt; #else&lt;br /&gt;&lt;a name="line20" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line20"&gt;20&lt;/a&gt; int main(void)&lt;br /&gt;&lt;a name="line21" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line21"&gt;21&lt;/a&gt; {&lt;br /&gt;&lt;a name="line22" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line22"&gt;22&lt;/a&gt;   int data1=10;&lt;br /&gt;&lt;a name="line23" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line23"&gt;23&lt;/a&gt;   int data2=20;&lt;br /&gt;&lt;a name="line24" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line24"&gt;24&lt;/a&gt;   int result;&lt;br /&gt;&lt;a name="line25" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line25"&gt;25&lt;/a&gt;&lt;br /&gt;&lt;a name="line26" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line26"&gt;26&lt;/a&gt;   asm ("imull %1, %2\n\t"&lt;br /&gt;&lt;a name="line27" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line27"&gt;27&lt;/a&gt;        "movl %2, %0"&lt;br /&gt;&lt;a name="line28" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line28"&gt;28&lt;/a&gt;        :"=r"(result) // %0 (result)&lt;br /&gt;&lt;a name="line29" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line29"&gt;29&lt;/a&gt;        :"r"(data1), "r"(data2)); // %1 (data1), %2 (data2)&lt;br /&gt;&lt;a name="line30" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line30"&gt;30&lt;/a&gt;   printf("placeholders : the result is %d\n", result);&lt;br /&gt;&lt;a name="line31" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line31"&gt;31&lt;/a&gt;   return 0;&lt;br /&gt;&lt;a name="line32" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line32"&gt;32&lt;/a&gt; }&lt;br /&gt;&lt;a name="line33" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line33"&gt;33&lt;/a&gt; #endif&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;inline_asm.s&lt;/legend&gt;&lt;br /&gt;&lt;pre&gt;&lt;a name="line1" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line1"&gt; 1&lt;/a&gt;  .file "inline_asm.c"&lt;br /&gt;&lt;a name="line2" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line2"&gt; 2&lt;/a&gt;  .section .rodata&lt;br /&gt;&lt;a name="line3" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line3"&gt; 3&lt;/a&gt; .LC0:&lt;br /&gt;&lt;a name="line4" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line4"&gt; 4&lt;/a&gt;  .string "the result is %d\n"&lt;br /&gt;&lt;a name="line5" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line5"&gt; 5&lt;/a&gt;  .text&lt;br /&gt;&lt;a name="line6" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line6"&gt; 6&lt;/a&gt; .globl main&lt;br /&gt;&lt;a name="line7" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line7"&gt; 7&lt;/a&gt;  .type main, @function&lt;br /&gt;&lt;a name="line8" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line8"&gt; 8&lt;/a&gt; main:&lt;br /&gt;&lt;a name="line9" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line9"&gt; 9&lt;/a&gt;  pushl %ebp&lt;br /&gt;&lt;a name="line10" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line10"&gt;10&lt;/a&gt;  movl %esp, %ebp&lt;br /&gt;&lt;a name="line11" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line11"&gt;11&lt;/a&gt;  andl $-16, %esp&lt;br /&gt;&lt;a name="line12" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line12"&gt;12&lt;/a&gt;  subl $32, %esp&lt;br /&gt;&lt;a name="line13" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line13"&gt;13&lt;/a&gt;  movl $10, 28(%esp)&lt;br /&gt;&lt;a name="line14" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line14"&gt;14&lt;/a&gt;  movl $20, 24(%esp)&lt;br /&gt;&lt;a name="line15" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line15"&gt;15&lt;/a&gt;  movl 28(%esp), %eax&lt;br /&gt;&lt;a name="line16" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line16"&gt;16&lt;/a&gt;  movl 24(%esp), %ecx&lt;br /&gt;&lt;a name="line17" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line17"&gt;17&lt;/a&gt;  movl %eax, %edx&lt;br /&gt;&lt;a name="line18" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line18"&gt;18&lt;/a&gt; #APP&lt;br /&gt;&lt;a name="line19" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line19"&gt;19&lt;/a&gt; # 12 "inline_asm.c" 1&lt;br /&gt;&lt;a name="line20" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line20"&gt;20&lt;/a&gt;  imull %edx, %ecx&lt;br /&gt;&lt;a name="line21" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line21"&gt;21&lt;/a&gt;  movl %ecx, %eax&lt;br /&gt;&lt;a name="line22" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line22"&gt;22&lt;/a&gt; # 0 "" 2&lt;br /&gt;&lt;a name="line23" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line23"&gt;23&lt;/a&gt; #NO_APP&lt;br /&gt;&lt;a name="line24" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line24"&gt;24&lt;/a&gt;  movl %eax, 20(%esp)&lt;br /&gt;&lt;a name="line25" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line25"&gt;25&lt;/a&gt;  movl $.LC0, %eax&lt;br /&gt;&lt;a name="line26" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line26"&gt;26&lt;/a&gt;  movl 20(%esp), %edx&lt;br /&gt;&lt;a name="line27" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line27"&gt;27&lt;/a&gt;  movl %edx, 4(%esp)&lt;br /&gt;&lt;a name="line28" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line28"&gt;28&lt;/a&gt;  movl %eax, (%esp)&lt;br /&gt;&lt;a name="line29" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line29"&gt;29&lt;/a&gt;  call printf&lt;br /&gt;&lt;a name="line30" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line30"&gt;30&lt;/a&gt;  movl $0, %eax&lt;br /&gt;&lt;a name="line31" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line31"&gt;31&lt;/a&gt;  leave&lt;br /&gt;&lt;a name="line32" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line32"&gt;32&lt;/a&gt;  ret&lt;br /&gt;&lt;a name="line33" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line33"&gt;33&lt;/a&gt;  .size main, .-main&lt;br /&gt;&lt;a name="line34" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line34"&gt;34&lt;/a&gt;  .ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"&lt;br /&gt;&lt;a name="line35" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line35"&gt;35&lt;/a&gt;  .section .note.GNU-stack,"",@progbits&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;inline_asm_placeholders.s&lt;/legend&gt;&lt;br /&gt;&lt;pre&gt;&lt;a name="line1" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line1"&gt; 1&lt;/a&gt;  .file "inline_asm.c"&lt;br /&gt;&lt;a name="line2" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line2"&gt; 2&lt;/a&gt;  .section .rodata&lt;br /&gt;&lt;a name="line3" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line3"&gt; 3&lt;/a&gt;  .align 4&lt;br /&gt;&lt;a name="line4" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line4"&gt; 4&lt;/a&gt; .LC0:&lt;br /&gt;&lt;a name="line5" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line5"&gt; 5&lt;/a&gt;  .string "placeholders : the result is %d\n"&lt;br /&gt;&lt;a name="line6" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line6"&gt; 6&lt;/a&gt;  .text&lt;br /&gt;&lt;a name="line7" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line7"&gt; 7&lt;/a&gt; .globl main&lt;br /&gt;&lt;a name="line8" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line8"&gt; 8&lt;/a&gt;  .type main, @function&lt;br /&gt;&lt;a name="line9" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line9"&gt; 9&lt;/a&gt; main:&lt;br /&gt;&lt;a name="line10" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line10"&gt;10&lt;/a&gt;  pushl %ebp&lt;br /&gt;&lt;a name="line11" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line11"&gt;11&lt;/a&gt;  movl %esp, %ebp&lt;br /&gt;&lt;a name="line12" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line12"&gt;12&lt;/a&gt;  andl $-16, %esp&lt;br /&gt;&lt;a name="line13" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line13"&gt;13&lt;/a&gt;  subl $32, %esp&lt;br /&gt;&lt;a name="line14" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line14"&gt;14&lt;/a&gt;  movl $10, 28(%esp)&lt;br /&gt;&lt;a name="line15" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line15"&gt;15&lt;/a&gt;  movl $20, 24(%esp)&lt;br /&gt;&lt;a name="line16" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line16"&gt;16&lt;/a&gt;  movl 28(%esp), %eax&lt;br /&gt;&lt;a name="line17" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line17"&gt;17&lt;/a&gt;  movl 24(%esp), %edx&lt;br /&gt;&lt;a name="line18" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line18"&gt;18&lt;/a&gt; #APP&lt;br /&gt;&lt;a name="line19" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line19"&gt;19&lt;/a&gt; # 26 "inline_asm.c" 1&lt;br /&gt;&lt;a name="line20" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line20"&gt;20&lt;/a&gt;  imull %eax, %edx&lt;br /&gt;&lt;a name="line21" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line21"&gt;21&lt;/a&gt;  movl %edx, %eax&lt;br /&gt;&lt;a name="line22" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line22"&gt;22&lt;/a&gt; # 0 "" 2&lt;br /&gt;&lt;a name="line23" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line23"&gt;23&lt;/a&gt; #NO_APP&lt;br /&gt;&lt;a name="line24" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line24"&gt;24&lt;/a&gt;  movl %eax, 20(%esp)&lt;br /&gt;&lt;a name="line25" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line25"&gt;25&lt;/a&gt;  movl $.LC0, %eax&lt;br /&gt;&lt;a name="line26" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line26"&gt;26&lt;/a&gt;  movl 20(%esp), %edx&lt;br /&gt;&lt;a name="line27" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line27"&gt;27&lt;/a&gt;  movl %edx, 4(%esp)&lt;br /&gt;&lt;a name="line28" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line28"&gt;28&lt;/a&gt;  movl %eax, (%esp)&lt;br /&gt;&lt;a name="line29" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line29"&gt;29&lt;/a&gt;  call printf&lt;br /&gt;&lt;a name="line30" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line30"&gt;30&lt;/a&gt;  movl $0, %eax&lt;br /&gt;&lt;a name="line31" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line31"&gt;31&lt;/a&gt;  leave&lt;br /&gt;&lt;a name="line32" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line32"&gt;32&lt;/a&gt;  ret&lt;br /&gt;&lt;a name="line33" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line33"&gt;33&lt;/a&gt;  .size main, .-main&lt;br /&gt;&lt;a name="line34" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line34"&gt;34&lt;/a&gt;  .ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"&lt;br /&gt;&lt;a name="line35" href="http://www.blogger.com/post-create.g?blogID=3574663204983450629#line35"&gt;35&lt;/a&gt;  .section .note.GNU-stack,"",@progbits&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;&lt;br /&gt;ref:&lt;br /&gt;professional assembly language p372 - 374&lt;br /&gt;&lt;a href="http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s6"&gt;http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s6&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-220489914761916672?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/220489914761916672/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=220489914761916672' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/220489914761916672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/220489914761916672'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/x86-inline-assembly-gccgas.html' title='x86 inline assembly gcc/gas'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-2481078870792636126</id><published>2012-01-11T21:15:00.011+08:00</published><updated>2012-01-23T00:07:31.962+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computer book'/><title type='text'>Code: The Hidden Language of Computer Hardware and Software (簡體中文版本) 讀後感</title><content type='html'>&lt;a href="https://picasaweb.google.com/lh/photo/1LDkTh2QoT8Z7LLUYwpU_NMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" src="https://lh5.googleusercontent.com/-N8mh63zsQDc/TvvWTtozD4I/AAAAAAAAXy0/1OfOSWIxqUg/s400/IMGP7500.JPG" height="300" width="400" /&gt;&lt;/a&gt;本書是作者在 1999 年開始寫作。之前擁有的是英文版, 曾經試圖翻閱, 卻總是在其艱難的英文句子中敗退下來。這是很久很久之前不知道在哪裡聽說到的書, 因為作者 Charles Petzold (windows programming 界的大師級人物) 很有名, 我相信這會是一本好書。&lt;br /&gt;&lt;br /&gt;20111212 在台南若水堂看到簡體中文版本,  意外驚喜之下, 立刻買了下來。55X6 = 330, 花了 330 台幣。&lt;br /&gt;&lt;br /&gt;這本書的內容是什麼呢？從書名 CODE 來看, 又, 它是一本電腦相關書籍, 作者又是軟體界大師級人物, 也許有人會猜和程式語言相關, 教怎麼寫程式吧! 不過從簡體中文的翻譯可以看出, CODE 被翻成&lt;b&gt;編碼&lt;/b&gt;的意思 ... 嗯！還是猜不到是吧？&lt;br /&gt;&lt;br /&gt;這本書是在講述計算機的故事, 從燈泡、開關到打造出一台計算機以及後來的軟體發展到網路的故事, 很意外吧！從書名完全看不出來是這樣的內容。&lt;br /&gt;&lt;br /&gt;書中作者有一句話我很喜歡:「明喻與暗喻是文學描述中精妙的輔助手段, 但它們常常掩蓋了科學技術的真正光芒。」在解釋一些專業的技術時, 大多會聽到一些比喻的方式, 不過有時候的確只有精確的解釋, 才能了解其內涵。&lt;br /&gt;&lt;br /&gt;在 &lt;a href="http://descent-incoming.blogspot.com/2011/11/iwoz-steven-wozniak.html"&gt;iWoz 科技頑童沃茲尼克&lt;/a&gt;這本書中讀到, Steven Wozniak 從小被傳授電子學相關的知識, 其中包括原子核裡電子的流動與電流的關係, 我那時候心想: 「好厲害！原來電流可以細談到電子。」而在本書 CODE 中, 從第四章 - 手電筒的剖析, 我知道這是怎麼一回事了, 也許中學教育早已教過, 但我真的不記得了。&lt;br /&gt;&lt;br /&gt;作者從第一章的摩斯電碼開始, 告訴讀者編碼的概念, 如何簡化編碼還原到原來的意思, 盲人使用的文字也是編碼的一種, 封面上每六個凸起或是平的圓點就是 C, O, D, E 本書書名。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;手電筒的線路到電子的流動完成整個電流的移動, 有趣而令人容易理解的比擬, 實在令人佩服。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;從人類十個手指頭的十進位 -&amp;gt; 卡通人物四個手指頭的八進位 -&amp;gt; 龍蝦螯的四進位 -&amp;gt; 海豚兩個鰭的二進位, 原來印度人發明的阿拉伯數字是如此的偉大, 有了它, 我們得以用同樣的原理計算八進位、四進位、二進位, 不過得先準備好其他進位的加法表和乘法表。一路的解釋下來, 讓我有豁然開朗的感覺, 頓悟了原來數字這回事。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;再來的邏輯學和燈泡完成了 and/or 運算, 真是神奇, 原來這些數學和計算機是這樣關聯起來的。快要提到燈泡、電池、開關、導線和計算機的關係, 真期待後面的內容。&lt;br /&gt;&lt;br /&gt;本書有 25 章, 372 頁, 平均一章 10 多頁, 很容易就可以看完一個章節, 很容易看下去, 也很容易沉迷的繼續看下去, 大學時期要是有這樣有趣的教科書, 哪裡需要靠考試逼我, 自己找時間就會看書, 也就瞭解計算機的工作原理了。是的 code 就是在講述計算機構造, 如何用相關技術, 完成計算。我一直以為作者是軟體相關工作者, 沒想到果然軟體大師級人物, 從數學、硬體果然有都有涉獵, 一直以來總是那麼學校所學到底是應用在哪裡? 因為工作上幾乎沒用到相關的知識, 現在總算解了我的疑惑, 第十章的邏輯與開關, 精彩的闡釋了這樣的學問如何應用在計算機的 and/or 運算。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/9mgz5k3qbqzuWMX-U1iH9dMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;" src="https://lh3.googleusercontent.com/-aMRxUYmdaRc/TuWv636uqjI/AAAAAAAAXUA/t4N9dwEuPUA/s400/P1010072.JPG" /&gt;&lt;/a&gt;原文版本的封面沒有使用盲人的凸點印刷, 簡體中文版本多花了點成本使用了盲人的凸點印刷。&lt;br /&gt;&lt;br /&gt;不過原文版本的燈泡圖形有紅色線條, 簡體中文版本就沒有了, 這樣的確比較不好看。&lt;br /&gt;&lt;br /&gt;or gate, and gate, xor gate, nand gate, not gate, buffer 原來是繼電器  (其原理是透過電池鐵來實作) 透過不同的組合來完成的, 從燈泡開關線路到這些基本 gate, 慢慢的解釋計算機原理, 再來要講述加法器了,  你會和我一樣很期待嗎？&lt;br /&gt;&lt;br /&gt;我似乎開始有印象學生時代的加法器了, 那時候讀起來很無趣, 沒想到透過 code, 我豁然開朗,  原來半加器、全加器 (half adder, full adder) 是這樣兜出來的, 嗯！這我有印象。而一補數、二補數原來是用來做減法運算用,  而不是純粹一種數學運算, 計算機必須透過這樣的方式來完成減法的運算, 知其然的學習方式果然有趣多了。&lt;br /&gt;&lt;br /&gt;用電子線路完成加法器很厲害, 但運用機械裝置, 齒輪、槓桿做出計算機我覺得更是神奇, 這可是不用電的哦！不過可能大台了點 XD&lt;br /&gt;&lt;br /&gt;ref: &lt;a href="http://moodle.ncnu.edu.tw/file.php/13923/Ch01_%E8%A8%88%E7%AE%97%E6%A9%9F%E7%99%BC%E5%B1%95%E5%8F%B2.pdf"&gt;http://moodle.ncnu.edu.tw/file.php/13923/Ch01_%E8%A8%88%E7%AE%97%E6%A9%9F%E7%99%BC%E5%B1%95%E5%8F%B2.pdf&lt;/a&gt;&lt;br /&gt;&lt;pre style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 600px; text-align: left;"&gt;英國發明家巴貝奇(Charles Babbage)於1833年製造了一部計算用的機器，被命名為巴貝奇差分機&lt;br /&gt;(Babbage Difference Engine)，整部機器包含了25，000個零件，重約3噸，雖然著個機器經常故障，&lt;br /&gt;但他並沒有氣餒，再接再厲與他兒子在1847年製造出分析機(Analytical Engine)，&lt;br /&gt;這也是世界上第一部完全自動計算的機器，它包括了輸入、處理、控制、儲存、輸出五部門，&lt;br /&gt;可說是後來電腦構想的先驅；因此被稱為電腦之父(Father of the Computer)。&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;第十四章的內容對我有些難度, 閱讀速度慢了下來, 主要是運用 feedback 的概念來完成很多神奇的電路。oscillator, R-S Flip-Flop, 電平觸發的 D 型觸發器 (可以用來儲存訊號), 邊沿觸發的 D 型觸發器, 然後使用 oscillator 和邊沿觸發的 D 型觸發器完成 frequency divider, 在透過連接幾個 frequency divider 完成計數器。&lt;br /&gt;&lt;br /&gt;電平觸發的 D 型觸發器 (可以用來儲存訊號) 這可以拿來幹嘛呢？前面有了加法器, 可以相加兩個數, 如果要加三個數呢？那就需要這個電平觸發的 D 型觸發器來把第一次相加的結果保存下來, 在與第三個數相加, 是不是很重要呢？也許你也想到這就是電腦上的 ram。&lt;br /&gt;&lt;br /&gt;計數器: 很簡單, 就是從 0000, 0001, 0010, 0011 ... 數到 1111 在回到 0000。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/fKfh4eY5PepXM5_j34DCN9MTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-1Q7ENvEeabU/TvvWcdvQHEI/AAAAAAAAXzM/pcdNuyCigwI/s640/IMGP7506.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;第十六章講述儲存器, RAM 為什麼會被稱為 RAM (Random Access Memory) 是因為它可以讀取某個位址上的任何一個 bit, 若是其他循序型的儲存器 (ex: tape), 要讀取 101 的位址值, 需要先讀取 100 的位址。原來是這樣兜起來的阿！&lt;br /&gt;&lt;br /&gt;第十七章很複雜, 也是很精彩的一章, 我還無法 100% 理解其中內容, 不過對於計算機的概念已經有深刻的體認, 要多花點腦力來閱讀。這章的內容雖然也有硬體的部份 (有很多可怕的硬體元件連接起來), 但我想系統軟體程式設計師一定會很喜歡。從一個加法器漸漸演變成為可使用組合語言指令的計算機  (computer), 這是怎麼開始的呢？很有趣吧！從 ram array 開始, 導入 instruction code/operation code (就是常聽到的 op code), 開始了一個簡單的組合語言程式。&lt;br /&gt;&lt;br /&gt;之前聽說過:「設計一顆 cpu 就要設計其組合語言」, 我現在終於有了深刻的認識, 原來這道理是這麼的自然, 哪裡需要花時間搞懂那句話呢？ 而不知道 cpu 是怎麼設計出來的, 只能對那句話有粗淺的體認, 無法了解其真正想說的內容。到了第十九章介紹 intel 8080 時, 為什麼那些 op code 要設計成這樣也有所理解, 能搞懂這些關係, 真是令我舒體通暢, 沐浴春風。&lt;br /&gt;&lt;br /&gt;手上真的有股衝動, 想去買個麵包版, 親手打造第十七章裡頭的計算機電路。而我也能理解為什麼總是要有個 clock 來產生時脈, 這才能讓 cpu 從 0 開始運轉, 由下而上的貫通, 了解整個計算機結構, 讓只專注於軟體設計的我非常受用, 原來我寫的 code, 就是變成這樣來執行的。&lt;br /&gt;&lt;br /&gt;前面幾章所提到的硬體元件, 就是要用來打造這樣的一台計算機, 看似簡單的元件, 但經過複雜的組成後, 就變成你我在用的電腦了。&lt;br /&gt;&lt;br /&gt;這是用 intel 8080 打造的 &lt;a href="http://en.wikipedia.org/wiki/Altair_8800"&gt;Altair 8800&lt;/a&gt;,&lt;br /&gt;&lt;iframe src="http://www.youtube.com/embed/vAhp_LzvSWk" allowfullscreen="" frameborder="0" height="315" width="420"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;看過本書後, 就會知道為什麼上面會有開關和那些燈泡了。現在的電腦當然不會長這樣, 但基本原理都是和這台有著開關和燈泡是一樣的。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/0FaW9r1I08ntb8VT29Gz49MTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" src="https://lh6.googleusercontent.com/-dH4IWnXtqHA/Tw0yQ6ANRTI/AAAAAAAAYck/tr4kA_tMc9E/s400/P1310055.JPG" height="400" width="300" /&gt;&lt;/a&gt;在自然環境的包圍下, 閱讀如此精妙的好書, 充實感官與知識上的養份, 實在是一大享受, 我坐在樹下的陰涼處, 舉著 code, 盡情吸收著書中的技術, 享受專業書籍帶來的震憾。&lt;br /&gt;&lt;br /&gt;從 22 章之後, 內容離開了生硬的計算機結構, 慢慢往軟體的部份而去, 從作業系統 (中國翻譯為操作系統)、程式語言、網路 ... 這是我比較熟悉的部份, 對於計算機原理製作的部份, 我非常喜愛。我不是熱愛和 and gate, or gate, xor gate, nand gate 奮鬥的硬體工程師, 但關於這部份卻也讓我看的津津有味。果然了解計算機結構, 才能更深入了解組合語言。&lt;br /&gt;&lt;br /&gt;看完這本簡體中文的版本, 讓我了解不少中國的翻譯術語, 所以本篇心得有些辭彙是中國術語, 因為我不知道對應的英文或是台灣術語, 所以我也無法標示其後。&lt;br /&gt;&lt;br /&gt;在中國術語日漸入侵的台灣, 台灣工程師也慢慢開始使用著這些中國術語。例如：支援/支持、實作/實現、呼叫/調用、質數/素數, 演算法/算法、物件導向/面向对象, 有些術語中國翻的很有意思, 不過大部份我還是習慣於台灣的用語。&lt;br /&gt;&lt;br /&gt;簡體中文的版本 p 347 提到一個找尋質數的演算法 (Sieve of Eratosthenes), 在程式設計討論區上有時候會看到求質數的問題, 把這個拿出來用還不賴哦！&lt;br /&gt;&lt;br /&gt;在圖書館有發現一本類似的書籍, 也是在講計算機結構, 裡頭的電子線路更是多樣, 看起來很嚇人, 還是燈泡與開關令人覺得友善, 看起來也不那麼可怕, 要是能先讀這本書, 也許在大學的時候, 我也能好好的看看數位電路的書籍, 這門學問也和寫程式一樣有趣呢！&lt;br /&gt;&lt;br /&gt;真是一本很棒的書籍, 要是因為英文的關係不能吸收裡頭的知識, 那真是太可惜了！http://www.blogger.com/img/blank.gif翻譯工業還是很重要的, 不是每個人都能為了學習專業知識而先把英文學好, 若能把原文這道牆的門檻降低, 也間接可以提高工程人員的專業。要不然還有德文、日文的專業書籍, 工程人員還要先對付這些外文實在辛苦。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/7_4vDEm7CscIjz2pv7auNhmkFCLSrpasU46ewrN9XHA?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-5n4nybGz6kE/Tw0yAQDMplI/AAAAAAAAYcE/faGq9Ekxrgs/s640/P1310045.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Charles Petzold 的網站: &lt;a href="http://www.charlespetzold.com/home.html"&gt;http://www.charlespetzold.com/home.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-2481078870792636126?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/2481078870792636126/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=2481078870792636126' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/2481078870792636126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/2481078870792636126'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/code-hidden-language-of-computer.html' title='Code: The Hidden Language of Computer Hardware and Software (簡體中文版本) 讀後感'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-N8mh63zsQDc/TvvWTtozD4I/AAAAAAAAXy0/1OfOSWIxqUg/s72-c/IMGP7500.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-5342852667211958517</id><published>2012-01-09T14:06:00.002+08:00</published><updated>2012-01-09T14:09:44.458+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>python data time</title><content type='html'>在 python 獲得 timestamp&lt;br /&gt;&lt;br /&gt;import datetime&lt;br /&gt;today = datetime.date.today() &lt;br /&gt;current = datetime.datetime.now() &lt;br /&gt;&lt;br /&gt;print current.strftime('%Y%m%d-%H%M%S')&lt;br /&gt;&lt;br /&gt;20120109-140126&lt;br /&gt;&lt;br /&gt;strftime:  &lt;a href="http://docs.python.org/library/datetime.html#strftime-strptime-behavior"&gt;http://docs.python.org/library/datetime.html#strftime-strptime-behavior&lt;/a&gt;&lt;br /&gt;ref: &lt;a href="http://pythonly.blogspot.com/2008/12/python.html"&gt;http://pythonly.blogspot.com/2008/12/python.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-5342852667211958517?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/5342852667211958517/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=5342852667211958517' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/5342852667211958517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/5342852667211958517'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/python-data-time.html' title='python data time'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-4510261698321467985</id><published>2012-01-05T14:51:00.004+08:00</published><updated>2012-01-06T16:34:40.740+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='電腦相關'/><title type='text'>基本的 bash 語法</title><content type='html'>老是忘記, 寫一篇記起來:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;while loop&lt;/li&gt;&lt;li&gt;i+=1&lt;/li&gt;&lt;/ul&gt;while [ $i -le 148 ];do&lt;br /&gt; echo "file$i.jpg"&lt;br /&gt; i=`expr $i + 1`&lt;br /&gt;done&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-4510261698321467985?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/4510261698321467985/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=4510261698321467985' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/4510261698321467985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/4510261698321467985'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/bash.html' title='基本的 bash 語法'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-3891661478199300669</id><published>2012-01-04T00:27:00.003+08:00</published><updated>2012-01-08T15:32:09.286+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='電腦相關'/><title type='text'>gcc Extensions: binary expression</title><content type='html'>gcc 竟然有這種 extension, 可以使用 0b0101 來使用二進位數字。我雖然喜愛 gcc, 也會用一些 extension, 不過這個太過頭了, 我應該不會用這種 extension。&lt;br /&gt;&lt;br /&gt;C++ 的 boost 好像有類似的 class 可以使用, 不過 ... 我不知道 XD&lt;br /&gt;另外 C++ 標準程式庫有 bitset 可以使用。&lt;br /&gt;&lt;br /&gt;ref: &lt;a href="http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html"&gt;http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html&lt;/a&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;a.c&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt;1&lt;/a&gt; &lt;span style="color:0000ff;"&gt;&lt;strong&gt;#include &lt;span style="color:#008000;"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="line2"&gt;2&lt;/a&gt;&lt;br /&gt;&lt;a name="line3"&gt;3&lt;/a&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;main&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;strong&gt;void&lt;/strong&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line4"&gt;4&lt;/a&gt; &lt;span style="color:4444FF;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="line5"&gt;5&lt;/a&gt;   &lt;strong&gt;int&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;i&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;0&lt;span style="color:#2040a0;"&gt;b0101&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line6"&gt;6&lt;/a&gt;   &lt;span style="color:#2040a0;"&gt;printf&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;"i:%d&lt;span style="color:#77dd77;"&gt;\n&lt;/span&gt;"&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;i&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line7"&gt;7&lt;/a&gt;   &lt;strong&gt;return&lt;/strong&gt; &lt;span style="color:#FF0000;"&gt;0&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line8"&gt;8&lt;/a&gt; &lt;span style="color:4444FF;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-3891661478199300669?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/3891661478199300669/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=3891661478199300669' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/3891661478199300669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/3891661478199300669'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/gcc-extensions-binary-expression.html' title='gcc Extensions: binary expression'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-6832595949443774626</id><published>2012-01-03T22:46:00.008+08:00</published><updated>2012-01-03T23:44:50.049+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='write_os'/><title type='text'>x86 page table test (1)</title><content type='html'>侯捷老師說的「發表是最好的回憶」, 我很贊同, 所以我要精確把努力的過程紀錄下來。&lt;br /&gt;&lt;br /&gt;這個程式讀寫物理位址: 0x801000, 0x800000, 並使用分頁轉換將線性位址從&lt;br /&gt;0x800000 轉到 0x800000&lt;br /&gt;以及&lt;br /&gt;0x800000 轉到 0x801000&lt;br /&gt;&lt;br /&gt;&lt;a href="http://descent-incoming.blogspot.com/2012/01/x86-page-table-test.html"&gt;x86 page table test (0)&lt;/a&gt; 只做一對一轉換, 純粹練習 paging 用的, 實際上沒享受到分頁的好處。&lt;br /&gt;&lt;br /&gt;由於會使用 call 指令, 所以還是事先設定好 stack 比較好 (沒設定好像也沒事)。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line182"&gt;182&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorStack), %ax&lt;br /&gt;&lt;a name="line183"&gt;183&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %ss   # 堆疊段選擇子&lt;br /&gt;&lt;a name="line184"&gt;184&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(TopOfStack), %esp&lt;br /&gt;&lt;a name="line185"&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;程式先寫入 0xe8 到 0x801000,&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line189"&gt;&lt;br /&gt;189&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SELECTOR_FREE_MEM_AREA), %ax&lt;br /&gt;&lt;a name="line190"&gt;190&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %es&lt;br /&gt;&lt;a name="line191"&gt;191&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $0xe8, %es:(0x1000)&lt;br /&gt;&lt;a name="line192"&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;再來設定好兩組 page table:&lt;br /&gt;(PAGE_DIR_BASE/PAGE_TBL_BASE)&lt;br /&gt;(PAGE_DIR_BASE_1/PAGE_TBL_BASE_1)&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line200"&gt;&lt;br /&gt;200&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; SetupPaging     /* set up paging before 32-bit code */&lt;br /&gt;&lt;a name="line201"&gt;201&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; SetupPaging_1     /* set up paging before 32-bit code */&lt;br /&gt;&lt;a name="line202"&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;然後使用 switch_page_dir 將 (PAGE_DIR_BASE/PAGE_TBL_BASE) 的設定寫入 cr3。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line202"&gt;&lt;/a&gt;&lt;a name="line203"&gt;203&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; switch_page_dir&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;程式寫入 0xf9 到位址 0x800000,&lt;br /&gt;&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line205"&gt;&lt;/a&gt;&lt;a name="line208"&gt;208&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SELECTOR_FREE_MEM_AREA), %ax&lt;br /&gt;&lt;a name="line209"&gt;209&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %es&lt;br /&gt;&lt;a name="line210"&gt;210&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $0xf9, %es:(0)&lt;br /&gt;&lt;a name="line211"&gt;211&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; %es:(0), %al&lt;br /&gt;&lt;a name="line212"&gt;212&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line213"&gt;213&lt;/a&gt;&lt;br /&gt;&lt;a name="line214"&gt;214&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line215"&gt;215&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs                /* Video segment selector(dest) */&lt;br /&gt;&lt;a name="line216"&gt;216&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $20, %edi&lt;br /&gt;&lt;a name="line217"&gt;217&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SELECTOR_FREE_MEM_AREA), %ax&lt;br /&gt;&lt;a name="line218"&gt;218&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %es&lt;br /&gt;&lt;a name="line219"&gt;219&lt;/a&gt; #  movb $0xf9, %es:(0)&lt;br /&gt;&lt;a name="line220"&gt;220&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; %es:(0), %al&lt;br /&gt;&lt;a name="line221"&gt;221&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line222"&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;然後再由 0x800000 複製到 al, 兩次的動作藉由 DispAL 將值印出來, 確認寫入的位址無誤。&lt;br /&gt;&lt;br /&gt;再來使用 switch_page_dir_1 將 (PAGE_DIR_BASE_1/PAGE_TBL_BASE_1) 的設定寫入 cr3。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line225"&gt;225&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; switch_page_dir_1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;程式先寫入 0xe3 到位址 0x800000 (但其物理位址已經被轉到是 0x801000)&lt;br /&gt;&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line225"&gt;&lt;/a&gt;&lt;a name="line226"&gt;&lt;/a&gt;&lt;a name="line229"&gt;229&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SELECTOR_FREE_MEM_AREA), %ax&lt;br /&gt;&lt;a name="line230"&gt;230&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %es&lt;br /&gt;&lt;a name="line231"&gt;231&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $0xe3, %es:(0)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;寫入的線性位址是一樣的, %es:(0), 但是經過 page maping 之後, 這是對應到 0x801000, 而不是 0x800000。&lt;br /&gt;&lt;br /&gt;將原本的 page table 切回來之後,&lt;br /&gt;&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line236"&gt;236&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; switch_page_dir&lt;br /&gt;&lt;a name="line237"&gt;237&lt;/a&gt;&lt;br /&gt;&lt;a name="line238"&gt;238&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line239"&gt;239&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs                /* Video segment selector(dest) */&lt;br /&gt;&lt;a name="line240"&gt;240&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $40, %edi&lt;br /&gt;&lt;a name="line241"&gt;241&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SELECTOR_FREE_MEM_AREA), %ax&lt;br /&gt;&lt;a name="line242"&gt;242&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %es&lt;br /&gt;&lt;a name="line243"&gt;243&lt;/a&gt; #  movb $0xf9, %es:(0)&lt;br /&gt;&lt;a name="line244"&gt;244&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; %es:(0), %al&lt;br /&gt;&lt;a name="line245"&gt;245&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line246"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;a name="line246"&gt;0x800000 印出 F9&lt;br /&gt;&lt;/a&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line246"&gt;&lt;br /&gt;&lt;br /&gt;246&lt;/a&gt;&lt;br /&gt;&lt;a name="line247"&gt;247&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; %es:(0x1000), %al&lt;br /&gt;&lt;a name="line248"&gt;248&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $50, %edi&lt;br /&gt;&lt;a name="line249"&gt;249&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line250"&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;0x801000 印出 E3&lt;br /&gt;&lt;br /&gt;為什麼用 0x801000, 0x800000 這兩個位址來測試呢？這是特別設計過的, 我首先想要做的事情:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;讓線性位址 0x800000 在分頁轉換後對應到 0x800000;&lt;/li&gt;&lt;li&gt;另一個分頁轉換則是, 讓線性位址 0x800000 在分頁轉換後對應到 0x801000;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;0x800000 二進位 &lt;span style="color: rgb(204, 0, 0);"&gt;0000 0000 10&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;00 0000 0000&lt;/span&gt; 0000 0000 0000&lt;br /&gt;分成三部份:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;0000 0000 10&lt;/span&gt; = 2(十進位) 表示 page directory 要選第二個 entry, 這個 entry 的內容我填入第二個 page table 的位址。所以分頁轉換會去找第二個 page table。&lt;br /&gt;&lt;br /&gt;所以修改第二個 page table:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line382"&gt;382&lt;/a&gt;     # setup the 2nd page&lt;br /&gt;&lt;a name="line383"&gt;383&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SELECTOR_PAGE_TBL_1), %ax&lt;br /&gt;&lt;a name="line384"&gt;384&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line385"&gt;385&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(TEST_OFFSET|PG_P | PG_USU | PG_RWW), %eax&lt;br /&gt;&lt;a name="line386"&gt;386&lt;/a&gt;     #mov %eax, %es:(0x3000)&lt;br /&gt;&lt;a name="line387"&gt;387&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt; %eax, %es:(0x2000)&lt;br /&gt;&lt;a name="line388"&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;再來的 &lt;span style="color: rgb(51, 102, 255);"&gt;00 0000 0000&lt;/span&gt; 就是第零個 page table item,&lt;br /&gt;所以&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line387"&gt;387&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt; %eax, %es:(0x2000)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;就是寫入第二個 page table 的第零個 page table item (第二個 page table 的第一個 page table item 位址是: &lt;span style="color:4444FF;"&gt;%es:(0x2000 + 0x1000)&lt;/span&gt;), 讓他變成 0x00801000&lt;br /&gt;&lt;br /&gt;.set    TEST_OFFSET, 0x00801000   # const for 0x00801000&lt;br /&gt;&lt;br /&gt;這是為了讓 0x800000 在分頁轉換後變成了 0x801000。&lt;br /&gt;&lt;br /&gt;線性位址 0x800000 表示去查第二個 page table 的第零個 page table item 的值, 目前是 &lt;span style="color: rgb(51, 51, 255);"&gt;0x00801&lt;/span&gt;000, 而 or 上 0x800&lt;span style="color: rgb(204, 0, 0);"&gt;000&lt;/span&gt; 的 &lt;span style="color: rgb(204, 0, 0);"&gt;000&lt;/span&gt; 變是 0x00801000 (&lt;span style="color: rgb(51, 51, 255);"&gt;0x00801 | &lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;000&lt;/span&gt;), 這是經過分頁轉換物理位址。&lt;br /&gt;&lt;br /&gt;這程式會在切回 dos/real mode 時當掉,&lt;br /&gt;outb     %al, $0x92&lt;br /&gt;死在這裡, 不知道為什麼, 有空再來查了。&lt;br /&gt;&lt;br /&gt;想要進一步測試可以把&lt;br /&gt;&lt;br /&gt;mov %eax, %es:(0x2000) 換成 mov %eax, %es:(0x3000)&lt;br /&gt;&lt;br /&gt;由於寫到不正確的分頁表, 所以 0x800000 並不會轉換成 0x00801000。所以最後還是看到 E8。並沒有在第二次的分頁轉換後被改成 E3。而由於這樣是一對一轉換, 所以實際上修改的是 0x800000 的物理位址, 所以 fail 那張圖本來 F9 的地方被改成 E3。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;杨文博&lt;/b&gt;/&lt;b&gt;于渊&lt;/b&gt;的版本用的是 function call 的方法, 我覺得有點複雜, 所以自己亂想出這個測試程式, 果然藉由程式的實作, 比教科書上來的有印象多了, 560 行在 dos 下執行的程式, 就可以了解什麼是分頁記憶體管理, 比硬背好多了。寫的不夠完整, 要全盤了解這段 code, 可能需要把&lt;b&gt;杨文博&lt;/b&gt;/&lt;b&gt;于渊&lt;/b&gt;的書籍 (保護模式那章) 讀一遍。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line214"&gt;214&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line215"&gt;215&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs                /* Video segment selector(dest) */&lt;br /&gt;&lt;a name="line216"&gt;216&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $20, %edi&lt;a name="line217"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;216 的 edi 設定是 video address, 表示要把 AL 的內容顯示在哪一行哪一列。&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;pt_2.S&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt;  1&lt;/a&gt; &lt;span style="color:4444FF;"&gt;/*&lt;br /&gt;&lt;a name="line2"&gt;  2&lt;/a&gt; &lt;strong&gt;   ref&lt;/strong&gt;: Orange'S：一个操作系统的实现&lt;br /&gt;&lt;a name="line3"&gt;  3&lt;/a&gt; &lt;strong&gt;   do&lt;/strong&gt; the 5M memory r/w&lt;br /&gt;&lt;a name="line4"&gt;  4&lt;/a&gt;  */&lt;br /&gt;&lt;a name="line5"&gt;  5&lt;/a&gt; /* chapter3/1/loader.S&lt;br /&gt;&lt;a name="line6"&gt;  6&lt;/a&gt;&lt;br /&gt;&lt;a name="line7"&gt;  7&lt;/a&gt; &lt;strong&gt;   Author&lt;/strong&gt;: Wenbo Yang &amp;lt;solrex@gmail.com&amp;gt; &amp;lt;http://solrex.cn&amp;gt;&lt;br /&gt;&lt;a name="line8"&gt;  8&lt;/a&gt;&lt;br /&gt;&lt;a name="line9"&gt;  9&lt;/a&gt; &lt;strong&gt;   This&lt;/strong&gt; file is part of the source code of book &lt;span style="color:#008000;"&gt;"Write Your Own OS with Free&lt;br /&gt;&lt;a name="line10"&gt; 10&lt;/a&gt;    and Open Source Software"&lt;/span&gt;. Homepage @ &amp;lt;http://share.solrex.cn/WriteOS/&amp;gt;.&lt;br /&gt;&lt;a name="line11"&gt; 11&lt;/a&gt;&lt;br /&gt;&lt;a name="line12"&gt; 12&lt;/a&gt; &lt;strong&gt;   This&lt;/strong&gt; file is licensed under the GNU General Public License&lt;span style="color:#444444;"&gt;; either&lt;/span&gt;&lt;br /&gt;&lt;a name="line13"&gt; 13&lt;/a&gt; &lt;strong&gt;   version&lt;/strong&gt; 3 of the License, or (at your option) any later version. */&lt;br /&gt;&lt;a name="line14"&gt; 14&lt;/a&gt; /*&lt;br /&gt;&lt;a name="line15"&gt; 15&lt;/a&gt;  * describe by descent:&lt;br /&gt;&lt;a name="line16"&gt; 16&lt;/a&gt;  *&lt;br /&gt;&lt;a name="line17"&gt; 17&lt;/a&gt;  * copy from 5M_mem_rw.S and modify for page table test.&lt;br /&gt;&lt;a name="line18"&gt; 18&lt;/a&gt;  */&lt;br /&gt;&lt;a name="line19"&gt; 19&lt;/a&gt;&lt;br /&gt;&lt;a name="line20"&gt; 20&lt;/a&gt; #include &lt;span style="color:#008000;"&gt;"pm.h"&lt;/span&gt;&lt;br /&gt;&lt;a name="line21"&gt; 21&lt;/a&gt;&lt;br /&gt;&lt;a name="line22"&gt; 22&lt;/a&gt; .set    PAGE_DIR_BASE, 0x100000   /* 1MB, base address of page directory */&lt;br /&gt;&lt;a name="line23"&gt; 23&lt;/a&gt; .set    PAGE_TBL_BASE, 0x101000   /* 1MB+4KB, base address of page table */&lt;br /&gt;&lt;a name="line24"&gt; 24&lt;/a&gt;&lt;br /&gt;&lt;a name="line25"&gt; 25&lt;/a&gt; .set    PAGE_DIR_BASE_1, 0x200000   /* 2MB, base address of page directory */&lt;br /&gt;&lt;a name="line26"&gt; 26&lt;/a&gt; .set    PAGE_TBL_BASE_1, 0x201000   /* 2MB+4KB, base address of page table */&lt;br /&gt;&lt;a name="line27"&gt; 27&lt;/a&gt;&lt;br /&gt;&lt;a name="line28"&gt; 28&lt;/a&gt; .set    FREE_MEM_AREA, 0x800000   # 8 MB address, use to a free memroy for rw&lt;br /&gt;&lt;a name="line29"&gt; 29&lt;/a&gt; .set    TEST_OFFSET, 0x00801000   # const for 0x00801000&lt;br /&gt;&lt;a name="line30"&gt; 30&lt;/a&gt;&lt;br /&gt;&lt;a name="line31"&gt; 31&lt;/a&gt; .code16&lt;br /&gt;&lt;a name="line32"&gt; 32&lt;/a&gt; .text&lt;br /&gt;&lt;a name="line33"&gt; 33&lt;/a&gt; &lt;strong&gt;    jmp&lt;/strong&gt; LABEL_BEGIN     /* jump over the .data section. */&lt;br /&gt;&lt;a name="line34"&gt; 34&lt;/a&gt;&lt;br /&gt;&lt;a name="line35"&gt; 35&lt;/a&gt; /* NOTE! Wenbo-20080512: Actually here we put the normal .data section into&lt;br /&gt;&lt;a name="line36"&gt; 36&lt;/a&gt; &lt;strong&gt;   the&lt;/strong&gt; .code section. For application SW, it is not allowed. However, we are&lt;br /&gt;&lt;a name="line37"&gt; 37&lt;/a&gt; &lt;strong&gt;   writing&lt;/strong&gt; an OS. That is OK. Because there is no OS to complain about&lt;br /&gt;&lt;a name="line38"&gt; 38&lt;/a&gt; &lt;strong&gt;   that&lt;/strong&gt; behavior. :) */&lt;br /&gt;&lt;a name="line39"&gt; 39&lt;/a&gt;&lt;br /&gt;&lt;a name="line40"&gt; 40&lt;/a&gt; /* Global Descriptor Table */&lt;br /&gt;&lt;a name="line41"&gt; 41&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_GDT:&lt;/span&gt;          Descriptor  0,                        0, 0&lt;br /&gt;&lt;a name="line42"&gt; 42&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_NORMAL:&lt;/span&gt;  Descriptor  0,         0xffff, DA_DRW    # Normal descriptor is for back to real mode.&lt;br /&gt;&lt;a name="line43"&gt; 43&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_CODE32:&lt;/span&gt;  Descriptor  0,       (SegCode32Len - 1), (DA_C + DA_32)&lt;br /&gt;&lt;a name="line44"&gt; 44&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_CODE16:&lt;/span&gt;  Descriptor    0,         0xffff, DA_C      # 非一致程式碼段, 16&lt;br /&gt;&lt;a name="line45"&gt; 45&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_DATA:&lt;/span&gt;   Descriptor    0,      DataLen-1, DA_DRW    # Data&lt;br /&gt;&lt;a name="line46"&gt; 46&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_STACK:&lt;/span&gt;  Descriptor    0,     TopOfStack, DA_DRWA+DA_32 # Stack, 32 位&lt;br /&gt;&lt;a name="line47"&gt; 47&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_TEST:&lt;/span&gt; Descriptor 0x500000, 0xffff, DA_DRW&lt;br /&gt;&lt;a name="line48"&gt; 48&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_VIDEO:&lt;/span&gt;   Descriptor  0xB8000, 0xffff, DA_DRW&lt;br /&gt;&lt;a name="line49"&gt; 49&lt;/a&gt;&lt;br /&gt;&lt;a name="line50"&gt; 50&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DES_PAGE_DIR:&lt;/span&gt;   Descriptor  PAGE_DIR_BASE, 4096, DA_DRW&lt;br /&gt;&lt;a name="line51"&gt; 51&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DES_PAGE_TBL:&lt;/span&gt;   Descriptor  PAGE_TBL_BASE, 1023, (DA_DRW | DA_LIMIT_4K)&lt;br /&gt;&lt;a name="line52"&gt; 52&lt;/a&gt;&lt;br /&gt;&lt;a name="line53"&gt; 53&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DES_PAGE_DIR_1:&lt;/span&gt;   Descriptor  PAGE_DIR_BASE_1, 4096, DA_DRW&lt;br /&gt;&lt;a name="line54"&gt; 54&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DES_PAGE_TBL_1:&lt;/span&gt;   Descriptor  PAGE_TBL_BASE_1, 1023, (DA_DRW | DA_LIMIT_4K)&lt;br /&gt;&lt;a name="line55"&gt; 55&lt;/a&gt;&lt;br /&gt;&lt;a name="line56"&gt; 56&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DES_FREE_MEM_AREA:&lt;/span&gt; Descriptor FREE_MEM_AREA, 0xfffff, (DA_DRW | DA_LIMIT_4K)&lt;br /&gt;&lt;a name="line57"&gt; 57&lt;/a&gt;&lt;br /&gt;&lt;a name="line58"&gt; 58&lt;/a&gt; .set GdtLen, (. - LABEL_GDT)  /* GDT Length */&lt;br /&gt;&lt;a name="line59"&gt; 59&lt;/a&gt;&lt;br /&gt;&lt;a name="line60"&gt; 60&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;GdtPtr:&lt;/span&gt; .2byte  (GdtLen - 1)  /* GDT Limit */&lt;br /&gt;&lt;a name="line61"&gt; 61&lt;/a&gt;         .4byte  0             /* GDT Base */&lt;br /&gt;&lt;a name="line62"&gt; 62&lt;/a&gt;&lt;br /&gt;&lt;a name="line63"&gt; 63&lt;/a&gt; /* GDT Selector */&lt;br /&gt;&lt;a name="line64"&gt; 64&lt;/a&gt; .set SelectorNormal, (LABEL_DESC_NORMAL - LABEL_GDT)&lt;br /&gt;&lt;a name="line65"&gt; 65&lt;/a&gt; .set    SelectorCode32, (LABEL_DESC_CODE32 - LABEL_GDT)&lt;br /&gt;&lt;a name="line66"&gt; 66&lt;/a&gt; .set SelectorCode16, (LABEL_DESC_CODE16 - LABEL_GDT)&lt;br /&gt;&lt;a name="line67"&gt; 67&lt;/a&gt; .set SelectorData, (LABEL_DESC_DATA         - LABEL_GDT)&lt;br /&gt;&lt;a name="line68"&gt; 68&lt;/a&gt; .set SelectorStack, (LABEL_DESC_STACK        - LABEL_GDT)&lt;br /&gt;&lt;a name="line69"&gt; 69&lt;/a&gt; .set SelectorTest, (LABEL_DESC_TEST         - LABEL_GDT)&lt;br /&gt;&lt;a name="line70"&gt; 70&lt;/a&gt; .set    SelectorVideo,  (LABEL_DESC_VIDEO  - LABEL_GDT)&lt;br /&gt;&lt;a name="line71"&gt; 71&lt;/a&gt; .set SELECTOR_PAGE_DIR,  (LABEL_DES_PAGE_DIR  - LABEL_GDT)&lt;br /&gt;&lt;a name="line72"&gt; 72&lt;/a&gt; .set SELECTOR_PAGE_TBL,  (LABEL_DES_PAGE_TBL  - LABEL_GDT)&lt;br /&gt;&lt;a name="line73"&gt; 73&lt;/a&gt; .set SELECTOR_PAGE_DIR_1,  (LABEL_DES_PAGE_DIR_1  - LABEL_GDT)&lt;br /&gt;&lt;a name="line74"&gt; 74&lt;/a&gt; .set SELECTOR_PAGE_TBL_1,  (LABEL_DES_PAGE_TBL_1  - LABEL_GDT)&lt;br /&gt;&lt;a name="line75"&gt; 75&lt;/a&gt; .set SELECTOR_FREE_MEM_AREA, (LABEL_DES_FREE_MEM_AREA  - LABEL_GDT)&lt;br /&gt;&lt;a name="line76"&gt; 76&lt;/a&gt;&lt;br /&gt;&lt;a name="line77"&gt; 77&lt;/a&gt;&lt;br /&gt;&lt;a name="line78"&gt; 78&lt;/a&gt; /* Program starts here. */&lt;br /&gt;&lt;a name="line79"&gt; 79&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_BEGIN:&lt;/span&gt;&lt;br /&gt;&lt;a name="line80"&gt; 80&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax    /* Move code segment address(CS) to data segment */&lt;br /&gt;&lt;a name="line81"&gt; 81&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %ds    /* register(DS), ES and SS. Because we have      */&lt;br /&gt;&lt;a name="line82"&gt; 82&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %es    /* embedded .data section into .code section in  */&lt;br /&gt;&lt;a name="line83"&gt; 83&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %ss    /* the start(mentioned in the NOTE above).       */&lt;br /&gt;&lt;a name="line84"&gt; 84&lt;/a&gt;&lt;br /&gt;&lt;a name="line85"&gt; 85&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;     $0x100, %sp&lt;br /&gt;&lt;a name="line86"&gt; 86&lt;/a&gt; &lt;strong&gt;    nop&lt;/strong&gt;&lt;br /&gt;&lt;a name="line87"&gt; 87&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt; %ax, (LABEL_GO_BACK_TO_REAL+3) # modify segment value, indexed memory mode, ref  professional aeesmbly language p 102.&lt;br /&gt;&lt;a name="line88"&gt; 88&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;     %sp, (SPValueInRealMode)&lt;br /&gt;&lt;a name="line89"&gt; 89&lt;/a&gt;&lt;br /&gt;&lt;a name="line90"&gt; 90&lt;/a&gt;&lt;br /&gt;&lt;a name="line91"&gt; 91&lt;/a&gt;     /* Initialize 16-bits code segment descriptor. */&lt;br /&gt;&lt;a name="line92"&gt; 92&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line93"&gt; 93&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line94"&gt; 94&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line95"&gt; 95&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_SEG_CODE16), %eax&lt;br /&gt;&lt;a name="line96"&gt; 96&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_CODE16 + 2)&lt;br /&gt;&lt;a name="line97"&gt; 97&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line98"&gt; 98&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_CODE16 + 4)&lt;br /&gt;&lt;a name="line99"&gt; 99&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_CODE16 + 7)&lt;br /&gt;&lt;a name="line100"&gt;100&lt;/a&gt;&lt;br /&gt;&lt;a name="line101"&gt;101&lt;/a&gt;     /* Initialize 32-bits code segment descriptor. */&lt;br /&gt;&lt;a name="line102"&gt;102&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line103"&gt;103&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line104"&gt;104&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line105"&gt;105&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_SEG_CODE32), %eax&lt;br /&gt;&lt;a name="line106"&gt;106&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_CODE32 + 2)&lt;br /&gt;&lt;a name="line107"&gt;107&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line108"&gt;108&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_CODE32 + 4)&lt;br /&gt;&lt;a name="line109"&gt;109&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_CODE32 + 7)&lt;br /&gt;&lt;a name="line110"&gt;110&lt;/a&gt;&lt;br /&gt;&lt;a name="line111"&gt;111&lt;/a&gt;  # initialize data segment descriptor&lt;br /&gt;&lt;a name="line112"&gt;112&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %eax, %eax&lt;br /&gt;&lt;a name="line113"&gt;113&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ds, %ax&lt;br /&gt;&lt;a name="line114"&gt;114&lt;/a&gt; &lt;strong&gt; shl&lt;/strong&gt; $4, %eax&lt;br /&gt;&lt;a name="line115"&gt;115&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $(LABEL_DATA), %eax&lt;br /&gt;&lt;a name="line116"&gt;116&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, (LABEL_DESC_DATA + 2)&lt;br /&gt;&lt;a name="line117"&gt;117&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $16, %eax&lt;br /&gt;&lt;a name="line118"&gt;118&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, (LABEL_DESC_DATA + 4)&lt;br /&gt;&lt;a name="line119"&gt;119&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %ah, (LABEL_DESC_DATA + 7)&lt;br /&gt;&lt;a name="line120"&gt;120&lt;/a&gt;&lt;br /&gt;&lt;a name="line121"&gt;121&lt;/a&gt;  # initialize stack segment descriptor&lt;br /&gt;&lt;a name="line122"&gt;122&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %eax, %eax&lt;br /&gt;&lt;a name="line123"&gt;123&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ds, %ax&lt;br /&gt;&lt;a name="line124"&gt;124&lt;/a&gt; &lt;strong&gt; shl&lt;/strong&gt; $4, %eax&lt;br /&gt;&lt;a name="line125"&gt;125&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $(LABEL_STACK), %eax&lt;br /&gt;&lt;a name="line126"&gt;126&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, (LABEL_DESC_STACK + 2)&lt;br /&gt;&lt;a name="line127"&gt;127&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $16, %eax&lt;br /&gt;&lt;a name="line128"&gt;128&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, (LABEL_DESC_STACK + 4)&lt;br /&gt;&lt;a name="line129"&gt;129&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %ah, (LABEL_DESC_STACK + 7)&lt;br /&gt;&lt;a name="line130"&gt;130&lt;/a&gt;&lt;br /&gt;&lt;a name="line131"&gt;131&lt;/a&gt;     /* Prepared for loading GDTR */&lt;br /&gt;&lt;a name="line132"&gt;132&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line133"&gt;133&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ds, %ax&lt;br /&gt;&lt;a name="line134"&gt;134&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line135"&gt;135&lt;/a&gt; &lt;strong&gt;    add&lt;/strong&gt;     $(LABEL_GDT), %eax      /* eax &amp;lt;- gdt base*/&lt;br /&gt;&lt;a name="line136"&gt;136&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    %eax, (GdtPtr + 2)&lt;br /&gt;&lt;a name="line137"&gt;137&lt;/a&gt;&lt;br /&gt;&lt;a name="line138"&gt;138&lt;/a&gt;     /* Load GDTR(Global Descriptor Table Register) */&lt;br /&gt;&lt;a name="line139"&gt;139&lt;/a&gt; &lt;strong&gt;    lgdtw&lt;/strong&gt;   GdtPtr&lt;br /&gt;&lt;a name="line140"&gt;140&lt;/a&gt;&lt;br /&gt;&lt;a name="line141"&gt;141&lt;/a&gt;     /* Clear Interrupt Flags */&lt;br /&gt;&lt;a name="line142"&gt;142&lt;/a&gt; &lt;strong&gt;    cli&lt;/strong&gt;&lt;br /&gt;&lt;a name="line143"&gt;143&lt;/a&gt;&lt;br /&gt;&lt;a name="line144"&gt;144&lt;/a&gt;     /* Open A20 line. */&lt;br /&gt;&lt;a name="line145"&gt;145&lt;/a&gt; &lt;strong&gt;    inb&lt;/strong&gt;     $0x92, %al&lt;br /&gt;&lt;a name="line146"&gt;146&lt;/a&gt; &lt;strong&gt;    orb&lt;/strong&gt;     $0b00000010, %al&lt;br /&gt;&lt;a name="line147"&gt;147&lt;/a&gt; &lt;strong&gt;    outb&lt;/strong&gt;    %al, $0x92&lt;br /&gt;&lt;a name="line148"&gt;148&lt;/a&gt;&lt;br /&gt;&lt;a name="line149"&gt;149&lt;/a&gt;     /* Enable protect mode, PE bit of CR0. */&lt;br /&gt;&lt;a name="line150"&gt;150&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    %cr0, %eax&lt;br /&gt;&lt;a name="line151"&gt;151&lt;/a&gt; &lt;strong&gt;    orl&lt;/strong&gt;     $1, %eax&lt;br /&gt;&lt;a name="line152"&gt;152&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    %eax, %cr0&lt;br /&gt;&lt;a name="line153"&gt;153&lt;/a&gt;&lt;br /&gt;&lt;a name="line154"&gt;154&lt;/a&gt;     /* Mixed-Size Jump. */&lt;br /&gt;&lt;a name="line155"&gt;155&lt;/a&gt; &lt;strong&gt;    ljmp&lt;/strong&gt; $SelectorCode32, $0       /* Thanks to earthengine@gmail, I got */&lt;br /&gt;&lt;a name="line156"&gt;156&lt;/a&gt;                                     /* this mixed-size jump insn of gas.  */&lt;br /&gt;&lt;a name="line157"&gt;157&lt;/a&gt;                                     /* this calls far jump (ptr 16:32) in intel manual) */&lt;br /&gt;&lt;a name="line158"&gt;158&lt;/a&gt;&lt;br /&gt;&lt;a name="line159"&gt;159&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_REAL_ENTRY:&lt;/span&gt;               # 從保護模式跳回到實模式就到了這裡&lt;br /&gt;&lt;a name="line160"&gt;160&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %cx, %ax&lt;br /&gt;&lt;a name="line161"&gt;161&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ds&lt;br /&gt;&lt;a name="line162"&gt;162&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line163"&gt;163&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ss&lt;br /&gt;&lt;a name="line164"&gt;164&lt;/a&gt;&lt;br /&gt;&lt;a name="line165"&gt;165&lt;/a&gt; #        mov     sp, [SPValueInRealMode]&lt;br /&gt;&lt;a name="line166"&gt;166&lt;/a&gt; &lt;strong&gt;        movw&lt;/strong&gt;     (SPValueInRealMode), %sp&lt;br /&gt;&lt;a name="line167"&gt;167&lt;/a&gt;&lt;br /&gt;&lt;a name="line168"&gt;168&lt;/a&gt; &lt;strong&gt;  jmp&lt;/strong&gt; .&lt;br /&gt;&lt;a name="line169"&gt;169&lt;/a&gt;&lt;br /&gt;&lt;a name="line170"&gt;170&lt;/a&gt; &lt;strong&gt;        inb&lt;/strong&gt;      $0x92, %al&lt;br /&gt;&lt;a name="line171"&gt;171&lt;/a&gt; &lt;strong&gt;        andb&lt;/strong&gt;     $0b11111101, %al   #  close A20 line&lt;br /&gt;&lt;a name="line172"&gt;172&lt;/a&gt; &lt;strong&gt;        outb&lt;/strong&gt;     %al, $0x92&lt;br /&gt;&lt;a name="line173"&gt;173&lt;/a&gt;&lt;br /&gt;&lt;a name="line174"&gt;174&lt;/a&gt; &lt;strong&gt;        sti&lt;/strong&gt;                     # 開中斷&lt;br /&gt;&lt;a name="line175"&gt;175&lt;/a&gt;&lt;br /&gt;&lt;a name="line176"&gt;176&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     $0x4c00, %ax&lt;br /&gt;&lt;a name="line177"&gt;177&lt;/a&gt; &lt;strong&gt;        int&lt;/strong&gt;     $0x21             #  回到 DOS&lt;br /&gt;&lt;a name="line178"&gt;178&lt;/a&gt; # END of .code16&lt;br /&gt;&lt;a name="line179"&gt;179&lt;/a&gt;&lt;br /&gt;&lt;a name="line180"&gt;180&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_SEG_CODE32:&lt;/span&gt;&lt;br /&gt;&lt;a name="line181"&gt;181&lt;/a&gt; .code32&lt;br /&gt;&lt;a name="line182"&gt;182&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorStack), %ax&lt;br /&gt;&lt;a name="line183"&gt;183&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %ss   # 堆疊段選擇子&lt;br /&gt;&lt;a name="line184"&gt;184&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(TopOfStack), %esp&lt;br /&gt;&lt;a name="line185"&gt;185&lt;/a&gt;&lt;br /&gt;&lt;a name="line186"&gt;186&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line187"&gt;187&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs                /* Video segment selector(dest) */&lt;br /&gt;&lt;a name="line188"&gt;188&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $0, %edi&lt;br /&gt;&lt;a name="line189"&gt;189&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SELECTOR_FREE_MEM_AREA), %ax&lt;br /&gt;&lt;a name="line190"&gt;190&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %es&lt;br /&gt;&lt;a name="line191"&gt;191&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $0xe8, %es:(0x1000)&lt;br /&gt;&lt;a name="line192"&gt;192&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; %es:(0x1000), %al&lt;br /&gt;&lt;a name="line193"&gt;193&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line194"&gt;194&lt;/a&gt;&lt;br /&gt;&lt;a name="line195"&gt;195&lt;/a&gt; #  movb $0x76, %es:(0x1000)&lt;br /&gt;&lt;a name="line196"&gt;196&lt;/a&gt; #  movb %es:(0x1000), %al&lt;br /&gt;&lt;a name="line197"&gt;197&lt;/a&gt; #  mov $90, %edi&lt;br /&gt;&lt;a name="line198"&gt;198&lt;/a&gt; #  call DispAL&lt;br /&gt;&lt;a name="line199"&gt;199&lt;/a&gt;&lt;br /&gt;&lt;a name="line200"&gt;200&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; SetupPaging     /* set up paging before 32-bit code */&lt;br /&gt;&lt;a name="line201"&gt;201&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; SetupPaging_1     /* set up paging before 32-bit code */&lt;br /&gt;&lt;a name="line202"&gt;202&lt;/a&gt;&lt;br /&gt;&lt;a name="line203"&gt;203&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; switch_page_dir&lt;br /&gt;&lt;a name="line204"&gt;204&lt;/a&gt;&lt;br /&gt;&lt;a name="line205"&gt;205&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line206"&gt;206&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs                /* Video segment selector(dest) */&lt;br /&gt;&lt;a name="line207"&gt;207&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $10, %edi&lt;br /&gt;&lt;a name="line208"&gt;208&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SELECTOR_FREE_MEM_AREA), %ax&lt;br /&gt;&lt;a name="line209"&gt;209&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %es&lt;br /&gt;&lt;a name="line210"&gt;210&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $0xf9, %es:(0)&lt;br /&gt;&lt;a name="line211"&gt;211&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; %es:(0), %al&lt;br /&gt;&lt;a name="line212"&gt;212&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line213"&gt;213&lt;/a&gt;&lt;br /&gt;&lt;a name="line214"&gt;214&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line215"&gt;215&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs                /* Video segment selector(dest) */&lt;br /&gt;&lt;a name="line216"&gt;216&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $20, %edi&lt;br /&gt;&lt;a name="line217"&gt;217&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SELECTOR_FREE_MEM_AREA), %ax&lt;br /&gt;&lt;a name="line218"&gt;218&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %es&lt;br /&gt;&lt;a name="line219"&gt;219&lt;/a&gt; #  movb $0xf9, %es:(0)&lt;br /&gt;&lt;a name="line220"&gt;220&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; %es:(0), %al&lt;br /&gt;&lt;a name="line221"&gt;221&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line222"&gt;222&lt;/a&gt;&lt;br /&gt;&lt;a name="line223"&gt;223&lt;/a&gt;&lt;br /&gt;&lt;a name="line224"&gt;224&lt;/a&gt; #if 1&lt;br /&gt;&lt;a name="line225"&gt;225&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; switch_page_dir_1&lt;br /&gt;&lt;a name="line226"&gt;226&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line227"&gt;227&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs                /* Video segment selector(dest) */&lt;br /&gt;&lt;a name="line228"&gt;228&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $30, %edi&lt;br /&gt;&lt;a name="line229"&gt;229&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SELECTOR_FREE_MEM_AREA), %ax&lt;br /&gt;&lt;a name="line230"&gt;230&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %es&lt;br /&gt;&lt;a name="line231"&gt;231&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $0xe3, %es:(0)&lt;br /&gt;&lt;a name="line232"&gt;232&lt;/a&gt; #  movb %es:(0), %al&lt;br /&gt;&lt;a name="line233"&gt;233&lt;/a&gt; #  call DispAL&lt;br /&gt;&lt;a name="line234"&gt;234&lt;/a&gt; #endif&lt;br /&gt;&lt;a name="line235"&gt;235&lt;/a&gt;&lt;br /&gt;&lt;a name="line236"&gt;236&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; switch_page_dir&lt;br /&gt;&lt;a name="line237"&gt;237&lt;/a&gt;&lt;br /&gt;&lt;a name="line238"&gt;238&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line239"&gt;239&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs                /* Video segment selector(dest) */&lt;br /&gt;&lt;a name="line240"&gt;240&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $40, %edi&lt;br /&gt;&lt;a name="line241"&gt;241&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SELECTOR_FREE_MEM_AREA), %ax&lt;br /&gt;&lt;a name="line242"&gt;242&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %es&lt;br /&gt;&lt;a name="line243"&gt;243&lt;/a&gt; #  movb $0xf9, %es:(0)&lt;br /&gt;&lt;a name="line244"&gt;244&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; %es:(0), %al&lt;br /&gt;&lt;a name="line245"&gt;245&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line246"&gt;246&lt;/a&gt;&lt;br /&gt;&lt;a name="line247"&gt;247&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; %es:(0x1000), %al&lt;br /&gt;&lt;a name="line248"&gt;248&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $50, %edi&lt;br /&gt;&lt;a name="line249"&gt;249&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line250"&gt;250&lt;/a&gt;&lt;br /&gt;&lt;a name="line251"&gt;251&lt;/a&gt;&lt;br /&gt;&lt;a name="line252"&gt;252&lt;/a&gt;&lt;br /&gt;&lt;a name="line253"&gt;253&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     $(SelectorData), %ax&lt;br /&gt;&lt;a name="line254"&gt;254&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ds                        # 資料段選擇子&lt;br /&gt;&lt;a name="line255"&gt;255&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     $(SelectorTest), %ax&lt;br /&gt;&lt;a name="line256"&gt;256&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %es                        # 測試段選擇子&lt;br /&gt;&lt;a name="line257"&gt;257&lt;/a&gt;&lt;br /&gt;&lt;a name="line258"&gt;258&lt;/a&gt;&lt;br /&gt;&lt;a name="line259"&gt;259&lt;/a&gt;&lt;br /&gt;&lt;a name="line260"&gt;260&lt;/a&gt;&lt;br /&gt;&lt;a name="line261"&gt;261&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line262"&gt;262&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %gs                /* Video segment selector(dest) */&lt;br /&gt;&lt;a name="line263"&gt;263&lt;/a&gt;&lt;br /&gt;&lt;a name="line264"&gt;264&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     $(SelectorStack), %ax&lt;br /&gt;&lt;a name="line265"&gt;265&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ss                        # 堆疊段選擇子&lt;br /&gt;&lt;a name="line266"&gt;266&lt;/a&gt;&lt;br /&gt;&lt;a name="line267"&gt;267&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     $(TopOfStack), %esp&lt;br /&gt;&lt;a name="line268"&gt;268&lt;/a&gt;&lt;br /&gt;&lt;a name="line269"&gt;269&lt;/a&gt;&lt;br /&gt;&lt;a name="line270"&gt;270&lt;/a&gt;&lt;br /&gt;&lt;a name="line271"&gt;271&lt;/a&gt; /*&lt;br /&gt;&lt;a name="line272"&gt;272&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    $((80 * 10 + 0) * 2), %edi&lt;br /&gt;&lt;a name="line273"&gt;273&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    $0xC, %ah               # 0000: Black Back 1100: Red Front&lt;br /&gt;&lt;a name="line274"&gt;274&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    $'P', %al&lt;br /&gt;&lt;a name="line275"&gt;275&lt;/a&gt;&lt;br /&gt;&lt;a name="line276"&gt;276&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line277"&gt;277&lt;/a&gt; */&lt;br /&gt;&lt;a name="line278"&gt;278&lt;/a&gt;&lt;br /&gt;&lt;a name="line279"&gt;279&lt;/a&gt;  # print string &lt;span style="color:#008000;"&gt;"In Protect Mode now. ^-^"&lt;/span&gt;&lt;br /&gt;&lt;a name="line280"&gt;280&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $0x0c, %ah # 0000: 黑底    1100: 紅字&lt;br /&gt;&lt;a name="line281"&gt;281&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %esi, %esi&lt;br /&gt;&lt;a name="line282"&gt;282&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %edi, %edi&lt;br /&gt;&lt;a name="line283"&gt;283&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(OffsetPMMessage), %esi # data string offset&lt;br /&gt;&lt;a name="line284"&gt;284&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $((80 * 10 + 0) * 2), %edi # 目的資料偏移。螢幕第 10 行, 第 0 列。&lt;br /&gt;&lt;a name="line285"&gt;285&lt;/a&gt; &lt;strong&gt; cld&lt;/strong&gt; # Clear Direction Flag, ref: http://www.fermi.mn.it/linux/quarta/x86/cld.htm&lt;br /&gt;&lt;a name="line286"&gt;286&lt;/a&gt;             # After CLD is executed, string operations will increment the index&lt;br /&gt;&lt;a name="line287"&gt;287&lt;/a&gt;             # (SI and/or DI) that they use.&lt;br /&gt;&lt;a name="line288"&gt;288&lt;/a&gt; .1:&lt;br /&gt;&lt;a name="line289"&gt;289&lt;/a&gt; &lt;strong&gt; lodsb&lt;/strong&gt; # For legacy mode, Load byte at address DS:(E)SI into AL.&lt;br /&gt;&lt;a name="line290"&gt;290&lt;/a&gt;               # For 64-bit mode load byte at address (R)SI into AL.&lt;br /&gt;&lt;a name="line291"&gt;291&lt;/a&gt;               # ref: http://siyobik.info/main/reference/instruction/LODS%2FLODSB%2FLODSW%2FLODSD%2FLODSQ&lt;br /&gt;&lt;a name="line292"&gt;292&lt;/a&gt; &lt;strong&gt; test&lt;/strong&gt; %al, %al # result is 0, zf sets to 1.&lt;br /&gt;&lt;a name="line293"&gt;293&lt;/a&gt; &lt;strong&gt; jz&lt;/strong&gt; .2 # zf = 1 jump&lt;br /&gt;&lt;a name="line294"&gt;294&lt;/a&gt; # mov [gs:edi], ax&lt;br /&gt;&lt;a name="line295"&gt;295&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line296"&gt;296&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %edi&lt;br /&gt;&lt;a name="line297"&gt;297&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .1&lt;br /&gt;&lt;a name="line298"&gt;298&lt;/a&gt; .2: # 顯示完畢&lt;br /&gt;&lt;a name="line299"&gt;299&lt;/a&gt;&lt;br /&gt;&lt;a name="line300"&gt;300&lt;/a&gt; #push  %eax                       # Multiboot magic number&lt;br /&gt;&lt;a name="line301"&gt;301&lt;/a&gt; #   push  %ebx                       # Multiboot data structure&lt;br /&gt;&lt;a name="line302"&gt;302&lt;/a&gt;&lt;br /&gt;&lt;a name="line303"&gt;303&lt;/a&gt; # call kmain&lt;br /&gt;&lt;a name="line304"&gt;304&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line305"&gt;305&lt;/a&gt;         #movb $0xa9, %al&lt;br /&gt;&lt;a name="line306"&gt;306&lt;/a&gt;  #call DispAL&lt;br /&gt;&lt;a name="line307"&gt;307&lt;/a&gt;&lt;br /&gt;&lt;a name="line308"&gt;308&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; TestRead&lt;br /&gt;&lt;a name="line309"&gt;309&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; TestWrite&lt;br /&gt;&lt;a name="line310"&gt;310&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; TestRead&lt;br /&gt;&lt;a name="line311"&gt;311&lt;/a&gt;&lt;br /&gt;&lt;a name="line312"&gt;312&lt;/a&gt;&lt;br /&gt;&lt;a name="line313"&gt;313&lt;/a&gt; &lt;strong&gt;    ljmpl&lt;/strong&gt;     $SelectorCode16,$0&lt;br /&gt;&lt;a name="line314"&gt;314&lt;/a&gt;     # jmpl     $SelectorCode16,$0 # it works&lt;br /&gt;&lt;a name="line315"&gt;315&lt;/a&gt;&lt;br /&gt;&lt;a name="line316"&gt;316&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line317"&gt;317&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;SetupPaging:&lt;/span&gt;&lt;br /&gt;&lt;a name="line318"&gt;318&lt;/a&gt; /* Directly map linear addresses to physical addresses for simplification */&lt;br /&gt;&lt;a name="line319"&gt;319&lt;/a&gt;     /* Init page directory, %ecx entries. */&lt;br /&gt;&lt;a name="line320"&gt;320&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SELECTOR_PAGE_DIR), %ax&lt;br /&gt;&lt;a name="line321"&gt;321&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line322"&gt;322&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $1024, %ecx     /* Loop counter, num of page tables: 1024 */&lt;br /&gt;&lt;a name="line323"&gt;323&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %edi, %edi&lt;br /&gt;&lt;a name="line324"&gt;324&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line325"&gt;325&lt;/a&gt;     /* Set PDE attributes(flags): P: 1, U/S: 1, R/W: 1. */&lt;br /&gt;&lt;a name="line326"&gt;326&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(PAGE_TBL_BASE | PG_P | PG_USU | PG_RWW), %eax&lt;br /&gt;&lt;a name="line327"&gt;327&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;SP&lt;/span&gt;.1:&lt;br /&gt;&lt;a name="line328"&gt;328&lt;/a&gt; &lt;strong&gt;    stosl&lt;/strong&gt;                   /* Store %eax to %es:%edi consecutively. */&lt;br /&gt;&lt;a name="line329"&gt;329&lt;/a&gt; &lt;strong&gt;    add&lt;/strong&gt;     $4096, %eax     /* Page tables are in sequential format. */&lt;br /&gt;&lt;a name="line330"&gt;330&lt;/a&gt; &lt;strong&gt;    loop&lt;/strong&gt;    SP.1            /* %ecx loops. */&lt;br /&gt;&lt;a name="line331"&gt;331&lt;/a&gt;&lt;br /&gt;&lt;a name="line332"&gt;332&lt;/a&gt;     /* Init page tables, %ecx pages. */&lt;br /&gt;&lt;a name="line333"&gt;333&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SELECTOR_PAGE_TBL), %ax&lt;br /&gt;&lt;a name="line334"&gt;334&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line335"&gt;335&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(30*1024), %ecx  /* Loop counter, num of pages: 1024^2. */&lt;br /&gt;&lt;a name="line336"&gt;336&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %edi, %edi&lt;br /&gt;&lt;a name="line337"&gt;337&lt;/a&gt;     /* Set PTE attributes(flags): P:1, U/S: 1， R/W: 1. */&lt;br /&gt;&lt;a name="line338"&gt;338&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(PG_P | PG_USU | PG_RWW), %eax&lt;br /&gt;&lt;a name="line339"&gt;339&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;SP&lt;/span&gt;.2:&lt;br /&gt;&lt;a name="line340"&gt;340&lt;/a&gt; &lt;strong&gt;    stosl&lt;/strong&gt;                   /* Store %eax to %es:%edi consecutively. */&lt;br /&gt;&lt;a name="line341"&gt;341&lt;/a&gt; &lt;strong&gt;    add&lt;/strong&gt;     $4096, %eax     /* Pages are in sequential format. */&lt;br /&gt;&lt;a name="line342"&gt;342&lt;/a&gt; &lt;strong&gt;    loop&lt;/strong&gt;    SP.2            /* %ecx loops. */&lt;br /&gt;&lt;a name="line343"&gt;343&lt;/a&gt;&lt;br /&gt;&lt;a name="line344"&gt;344&lt;/a&gt; &lt;strong&gt;    ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line345"&gt;345&lt;/a&gt; # end SetupPaging:&lt;br /&gt;&lt;a name="line346"&gt;346&lt;/a&gt;&lt;br /&gt;&lt;a name="line347"&gt;347&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;switch_page_dir:&lt;/span&gt;&lt;br /&gt;&lt;a name="line348"&gt;348&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(PAGE_DIR_BASE), %eax&lt;br /&gt;&lt;a name="line349"&gt;349&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %eax, %cr3  /* Store base address of page table dir to %cr3. */&lt;br /&gt;&lt;a name="line350"&gt;350&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cr0, %eax&lt;br /&gt;&lt;a name="line351"&gt;351&lt;/a&gt; &lt;strong&gt;    or&lt;/strong&gt;      $0x80000000, %eax&lt;br /&gt;&lt;a name="line352"&gt;352&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %eax, %cr0  /* Enable paging bit in %cr0. */&lt;br /&gt;&lt;a name="line353"&gt;353&lt;/a&gt; &lt;strong&gt;    ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line354"&gt;354&lt;/a&gt;&lt;br /&gt;&lt;a name="line355"&gt;355&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;SetupPaging_1:&lt;/span&gt;&lt;br /&gt;&lt;a name="line356"&gt;356&lt;/a&gt; /* Directly map linear addresses to physical addresses for simplification */&lt;br /&gt;&lt;a name="line357"&gt;357&lt;/a&gt;     /* Init page directory, %ecx entries. */&lt;br /&gt;&lt;a name="line358"&gt;358&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SELECTOR_PAGE_DIR_1), %ax&lt;br /&gt;&lt;a name="line359"&gt;359&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line360"&gt;360&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $1024, %ecx     /* Loop counter, num of page tables: 1024 */&lt;br /&gt;&lt;a name="line361"&gt;361&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %edi, %edi&lt;br /&gt;&lt;a name="line362"&gt;362&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line363"&gt;363&lt;/a&gt;     /* Set PDE attributes(flags): P: 1, U/S: 1, R/W: 1. */&lt;br /&gt;&lt;a name="line364"&gt;364&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(PAGE_TBL_BASE_1 | PG_P | PG_USU | PG_RWW), %eax&lt;br /&gt;&lt;a name="line365"&gt;365&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;SP2&lt;/span&gt;.1:&lt;br /&gt;&lt;a name="line366"&gt;366&lt;/a&gt; &lt;strong&gt;    stosl&lt;/strong&gt;                   /* Store %eax to %es:%edi consecutively. */&lt;br /&gt;&lt;a name="line367"&gt;367&lt;/a&gt; &lt;strong&gt;    add&lt;/strong&gt;     $4096, %eax     /* Page tables are in sequential format. */&lt;br /&gt;&lt;a name="line368"&gt;368&lt;/a&gt; &lt;strong&gt;    loop&lt;/strong&gt;    SP2.1            /* %ecx loops. */&lt;br /&gt;&lt;a name="line369"&gt;369&lt;/a&gt;&lt;br /&gt;&lt;a name="line370"&gt;370&lt;/a&gt;     /* Init page tables, %ecx pages. */&lt;br /&gt;&lt;a name="line371"&gt;371&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SELECTOR_PAGE_TBL_1), %ax&lt;br /&gt;&lt;a name="line372"&gt;372&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line373"&gt;373&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(30*1024), %ecx  /* Loop counter, num of pages: 1024^2. */&lt;br /&gt;&lt;a name="line374"&gt;374&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %edi, %edi&lt;br /&gt;&lt;a name="line375"&gt;375&lt;/a&gt;     /* Set PTE attributes(flags): P:1, U/S: 1， R/W: 1. */&lt;br /&gt;&lt;a name="line376"&gt;376&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(PG_P | PG_USU | PG_RWW), %eax&lt;br /&gt;&lt;a name="line377"&gt;377&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;SP2&lt;/span&gt;.2:&lt;br /&gt;&lt;a name="line378"&gt;378&lt;/a&gt; &lt;strong&gt;    stosl&lt;/strong&gt;                   /* Store %eax to %es:%edi consecutively. */&lt;br /&gt;&lt;a name="line379"&gt;379&lt;/a&gt; &lt;strong&gt;    add&lt;/strong&gt;     $4096, %eax     /* Pages are in sequential format. */&lt;br /&gt;&lt;a name="line380"&gt;380&lt;/a&gt; &lt;strong&gt;    loop&lt;/strong&gt;    SP2.2            /* %ecx loops. */&lt;br /&gt;&lt;a name="line381"&gt;381&lt;/a&gt;&lt;br /&gt;&lt;a name="line382"&gt;382&lt;/a&gt;     # setup the 2nd page&lt;br /&gt;&lt;a name="line383"&gt;383&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SELECTOR_PAGE_TBL_1), %ax&lt;br /&gt;&lt;a name="line384"&gt;384&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line385"&gt;385&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(TEST_OFFSET|PG_P | PG_USU | PG_RWW), %eax&lt;br /&gt;&lt;a name="line386"&gt;386&lt;/a&gt;     #mov %eax, %es:(0x3000)&lt;br /&gt;&lt;a name="line387"&gt;387&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt; %eax, %es:(0x2000)&lt;br /&gt;&lt;a name="line388"&gt;388&lt;/a&gt;&lt;br /&gt;&lt;a name="line389"&gt;389&lt;/a&gt; &lt;strong&gt;    ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line390"&gt;390&lt;/a&gt; # end SetupPaging_1&lt;br /&gt;&lt;a name="line391"&gt;391&lt;/a&gt;&lt;br /&gt;&lt;a name="line392"&gt;392&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;switch_page_dir_1:&lt;/span&gt;&lt;br /&gt;&lt;a name="line393"&gt;393&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(PAGE_DIR_BASE_1), %eax&lt;br /&gt;&lt;a name="line394"&gt;394&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %eax, %cr3  /* Store base address of page table dir to %cr3. */&lt;br /&gt;&lt;a name="line395"&gt;395&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cr0, %eax&lt;br /&gt;&lt;a name="line396"&gt;396&lt;/a&gt; &lt;strong&gt;    or&lt;/strong&gt;      $0x80000000, %eax&lt;br /&gt;&lt;a name="line397"&gt;397&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %eax, %cr0  /* Enable paging bit in %cr0. */&lt;br /&gt;&lt;a name="line398"&gt;398&lt;/a&gt; &lt;strong&gt;    ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line399"&gt;399&lt;/a&gt;&lt;br /&gt;&lt;a name="line400"&gt;400&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;TestRead:&lt;/span&gt;&lt;br /&gt;&lt;a name="line401"&gt;401&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %esi, %esi&lt;br /&gt;&lt;a name="line402"&gt;402&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $8, %ecx&lt;br /&gt;&lt;a name="line403"&gt;403&lt;/a&gt; .loop:&lt;br /&gt;&lt;a name="line404"&gt;404&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %es:(%esi), %al&lt;br /&gt;&lt;a name="line405"&gt;405&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line406"&gt;406&lt;/a&gt; &lt;strong&gt; inc&lt;/strong&gt; %esi&lt;br /&gt;&lt;a name="line407"&gt;407&lt;/a&gt; &lt;strong&gt; loop&lt;/strong&gt; .loop&lt;br /&gt;&lt;a name="line408"&gt;408&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line409"&gt;409&lt;/a&gt;&lt;br /&gt;&lt;a name="line410"&gt;410&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line411"&gt;411&lt;/a&gt; # TestRead 結束-----------------------------------------------------------&lt;br /&gt;&lt;a name="line412"&gt;412&lt;/a&gt;&lt;br /&gt;&lt;a name="line413"&gt;413&lt;/a&gt;&lt;br /&gt;&lt;a name="line414"&gt;414&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line415"&gt;415&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;TestWrite:&lt;/span&gt;&lt;br /&gt;&lt;a name="line416"&gt;416&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %esi&lt;br /&gt;&lt;a name="line417"&gt;417&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %edi&lt;br /&gt;&lt;a name="line418"&gt;418&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %esi, %esi&lt;br /&gt;&lt;a name="line419"&gt;419&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %edi, %edi&lt;br /&gt;&lt;a name="line420"&gt;420&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(OffsetStrTest), %esi # data offset&lt;br /&gt;&lt;a name="line421"&gt;421&lt;/a&gt; &lt;strong&gt; cld&lt;/strong&gt; # Clear Direction Flag, ref: http://www.fermi.mn.it/linux/quarta/x86/cld.htm&lt;br /&gt;&lt;a name="line422"&gt;422&lt;/a&gt;             # After CLD is executed, string operations will increment the index&lt;br /&gt;&lt;a name="line423"&gt;423&lt;/a&gt;             # (SI and/or DI) that they use.&lt;br /&gt;&lt;a name="line424"&gt;424&lt;/a&gt; .6:&lt;br /&gt;&lt;a name="line425"&gt;425&lt;/a&gt; &lt;strong&gt; lodsb&lt;/strong&gt; # For legacy mode, Load byte at address DS:(E)SI into AL.&lt;br /&gt;&lt;a name="line426"&gt;426&lt;/a&gt;               # For 64-bit mode load byte at address (R)SI into AL.&lt;br /&gt;&lt;a name="line427"&gt;427&lt;/a&gt;               # ref: http://siyobik.info/main/reference/instruction/LODS%2FLODSB%2FLODSW%2FLODSD%2FLODSQ&lt;br /&gt;&lt;a name="line428"&gt;428&lt;/a&gt;&lt;br /&gt;&lt;a name="line429"&gt;429&lt;/a&gt; &lt;strong&gt; test&lt;/strong&gt; %al, %al&lt;br /&gt;&lt;a name="line430"&gt;430&lt;/a&gt; &lt;strong&gt; jz&lt;/strong&gt; .5 # zf = 1 jump&lt;br /&gt;&lt;a name="line431"&gt;431&lt;/a&gt; # mov [es:edi], al&lt;br /&gt;&lt;a name="line432"&gt;432&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %al, %es:(%edi)&lt;br /&gt;&lt;a name="line433"&gt;433&lt;/a&gt; &lt;strong&gt; inc&lt;/strong&gt; %edi&lt;br /&gt;&lt;a name="line434"&gt;434&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .6&lt;br /&gt;&lt;a name="line435"&gt;435&lt;/a&gt; .5:&lt;br /&gt;&lt;a name="line436"&gt;436&lt;/a&gt;&lt;br /&gt;&lt;a name="line437"&gt;437&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %edi&lt;br /&gt;&lt;a name="line438"&gt;438&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %esi&lt;br /&gt;&lt;a name="line439"&gt;439&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line440"&gt;440&lt;/a&gt; # TestWrite 結束----------------------------------------------------------&lt;br /&gt;&lt;a name="line441"&gt;441&lt;/a&gt;&lt;br /&gt;&lt;a name="line442"&gt;442&lt;/a&gt;&lt;br /&gt;&lt;a name="line443"&gt;443&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line444"&gt;444&lt;/a&gt; # 顯示 AL 中的數字&lt;br /&gt;&lt;a name="line445"&gt;445&lt;/a&gt; # 默認地:&lt;br /&gt;&lt;a name="line446"&gt;446&lt;/a&gt; # 數字已經存在 AL 中&lt;br /&gt;&lt;a name="line447"&gt;447&lt;/a&gt; # edi 始終指向要顯示的下一個字元的位置&lt;br /&gt;&lt;a name="line448"&gt;448&lt;/a&gt; # 被改變的暫存器:&lt;br /&gt;&lt;a name="line449"&gt;449&lt;/a&gt; # ax, edi&lt;br /&gt;&lt;a name="line450"&gt;450&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line451"&gt;451&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;DispAL:&lt;/span&gt;&lt;br /&gt;&lt;a name="line452"&gt;452&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line453"&gt;453&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line454"&gt;454&lt;/a&gt;&lt;br /&gt;&lt;a name="line455"&gt;455&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $0x0c, %ah # 0000: 黑底    1100: 紅字&lt;br /&gt;&lt;a name="line456"&gt;456&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, %dl&lt;br /&gt;&lt;a name="line457"&gt;457&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $4, %al&lt;br /&gt;&lt;a name="line458"&gt;458&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $2, %ecx&lt;br /&gt;&lt;a name="line459"&gt;459&lt;/a&gt; .begin:&lt;br /&gt;&lt;a name="line460"&gt;460&lt;/a&gt; &lt;strong&gt; andb&lt;/strong&gt; $0x0f, %al&lt;br /&gt;&lt;a name="line461"&gt;461&lt;/a&gt; &lt;strong&gt; cmp&lt;/strong&gt; $9, %al&lt;br /&gt;&lt;a name="line462"&gt;462&lt;/a&gt; &lt;strong&gt; ja&lt;/strong&gt; .3          # cf=0, zf=0, above 9 (&amp;gt;9)&lt;br /&gt;&lt;a name="line463"&gt;463&lt;/a&gt;  #addb $'0', %al&lt;br /&gt;&lt;a name="line464"&gt;464&lt;/a&gt; &lt;strong&gt; addb&lt;/strong&gt; $0x30, %al&lt;br /&gt;&lt;a name="line465"&gt;465&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .4&lt;br /&gt;&lt;a name="line466"&gt;466&lt;/a&gt; .3:&lt;br /&gt;&lt;a name="line467"&gt;467&lt;/a&gt; &lt;strong&gt; sub&lt;/strong&gt; $0x0A, %al&lt;br /&gt;&lt;a name="line468"&gt;468&lt;/a&gt;  #add $'A', %al&lt;br /&gt;&lt;a name="line469"&gt;469&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $0x41, %al&lt;br /&gt;&lt;a name="line470"&gt;470&lt;/a&gt; .4:&lt;br /&gt;&lt;a name="line471"&gt;471&lt;/a&gt;  #mov [gs:edi], ax&lt;br /&gt;&lt;a name="line472"&gt;472&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line473"&gt;473&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %edi&lt;br /&gt;&lt;a name="line474"&gt;474&lt;/a&gt;&lt;br /&gt;&lt;a name="line475"&gt;475&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %dl, %al&lt;br /&gt;&lt;a name="line476"&gt;476&lt;/a&gt; &lt;strong&gt; loop&lt;/strong&gt; .begin&lt;br /&gt;&lt;a name="line477"&gt;477&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %edi&lt;br /&gt;&lt;a name="line478"&gt;478&lt;/a&gt;&lt;br /&gt;&lt;a name="line479"&gt;479&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line480"&gt;480&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line481"&gt;481&lt;/a&gt;&lt;br /&gt;&lt;a name="line482"&gt;482&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line483"&gt;483&lt;/a&gt; # DispAL 結束-------------------------------------------------------------&lt;br /&gt;&lt;a name="line484"&gt;484&lt;/a&gt;&lt;br /&gt;&lt;a name="line485"&gt;485&lt;/a&gt;&lt;br /&gt;&lt;a name="line486"&gt;486&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line487"&gt;487&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;DispReturn:&lt;/span&gt;&lt;br /&gt;&lt;a name="line488"&gt;488&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %eax&lt;br /&gt;&lt;a name="line489"&gt;489&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line490"&gt;490&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %edi, %eax&lt;br /&gt;&lt;a name="line491"&gt;491&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $160, %bl&lt;br /&gt;&lt;a name="line492"&gt;492&lt;/a&gt; &lt;strong&gt; divb&lt;/strong&gt; %bl          # %eax/160, 商 al, 餘數 ah.&lt;br /&gt;&lt;a name="line493"&gt;493&lt;/a&gt; &lt;strong&gt; and&lt;/strong&gt; $0x0FF, %eax&lt;br /&gt;&lt;a name="line494"&gt;494&lt;/a&gt; &lt;strong&gt; inc&lt;/strong&gt; %eax         # ++ %eax&lt;br /&gt;&lt;a name="line495"&gt;495&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $160, %bl&lt;br /&gt;&lt;a name="line496"&gt;496&lt;/a&gt; &lt;strong&gt; mul&lt;/strong&gt; %bl&lt;br /&gt;&lt;a name="line497"&gt;497&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %eax, %edi&lt;br /&gt;&lt;a name="line498"&gt;498&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line499"&gt;499&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %eax&lt;br /&gt;&lt;a name="line500"&gt;500&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line501"&gt;501&lt;/a&gt; # DispReturn 結束---------------------------------------------------------&lt;br /&gt;&lt;a name="line502"&gt;502&lt;/a&gt;&lt;br /&gt;&lt;a name="line503"&gt;503&lt;/a&gt; /*&lt;br /&gt;&lt;a name="line504"&gt;504&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;kmain:&lt;/span&gt;&lt;br /&gt;&lt;a name="line505"&gt;505&lt;/a&gt; &lt;strong&gt;        pushl&lt;/strong&gt;   %ebp&lt;br /&gt;&lt;a name="line506"&gt;506&lt;/a&gt; &lt;strong&gt;        movl&lt;/strong&gt;    %esp, %ebp&lt;br /&gt;&lt;a name="line507"&gt;507&lt;/a&gt; &lt;strong&gt;        popl&lt;/strong&gt;    %ebp&lt;br /&gt;&lt;a name="line508"&gt;508&lt;/a&gt; &lt;strong&gt;        ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line509"&gt;509&lt;/a&gt;         .size   kmain, .-kmain&lt;br /&gt;&lt;a name="line510"&gt;510&lt;/a&gt;         .ident  &lt;span style="color:#008000;"&gt;"GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"&lt;/span&gt;&lt;br /&gt;&lt;a name="line511"&gt;511&lt;/a&gt; */&lt;br /&gt;&lt;a name="line512"&gt;512&lt;/a&gt; #        .section        .note.GNU-stack,&lt;span style="color:#008000;"&gt;""&lt;/span&gt;,@progbits&lt;br /&gt;&lt;a name="line513"&gt;513&lt;/a&gt;&lt;br /&gt;&lt;a name="line514"&gt;514&lt;/a&gt;&lt;br /&gt;&lt;a name="line515"&gt;515&lt;/a&gt; /* Get the length of 32-bit segment code. */&lt;br /&gt;&lt;a name="line516"&gt;516&lt;/a&gt; .set    SegCode32Len, . - LABEL_SEG_CODE32&lt;br /&gt;&lt;a name="line517"&gt;517&lt;/a&gt;&lt;br /&gt;&lt;a name="line518"&gt;518&lt;/a&gt; #[SECTION .data1]         &lt;span style="color:#444444;"&gt;; 資料段&lt;/span&gt;&lt;br /&gt;&lt;a name="line519"&gt;519&lt;/a&gt; #ALIGN   32&lt;br /&gt;&lt;a name="line520"&gt;520&lt;/a&gt; #[BITS   32]&lt;br /&gt;&lt;a name="line521"&gt;521&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DATA:&lt;/span&gt;&lt;br /&gt;&lt;a name="line522"&gt;522&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;SPValueInRealMode:&lt;/span&gt; .2byte 0x0&lt;br /&gt;&lt;a name="line523"&gt;523&lt;/a&gt; # string&lt;br /&gt;&lt;a name="line524"&gt;524&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;PMMessage:&lt;/span&gt;              .ascii      &lt;span style="color:#008000;"&gt;"In Protect Mode now. ^-^&lt;span style="color:#77dd77;"&gt;\0&lt;/span&gt;"&lt;/span&gt;   # 在保護模式中顯示&lt;br /&gt;&lt;a name="line525"&gt;525&lt;/a&gt; .set    OffsetPMMessage, (PMMessage - LABEL_DATA)&lt;br /&gt;&lt;a name="line526"&gt;526&lt;/a&gt; #StrTest:                .ascii &lt;span style="color:#008000;"&gt;"B&lt;span style="color:#77dd77;"&gt;\0&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt;&lt;a name="line527"&gt;527&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;StrTest:&lt;/span&gt;                .ascii &lt;span style="color:#008000;"&gt;"ABCDEFGHIJKLMNOPQRSTUVWXYZ&lt;span style="color:#77dd77;"&gt;\0&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt;&lt;a name="line528"&gt;528&lt;/a&gt; #OffsetStrTest           equ     StrTest - $$&lt;br /&gt;&lt;a name="line529"&gt;529&lt;/a&gt; .set OffsetStrTest , (StrTest - LABEL_DATA)&lt;br /&gt;&lt;a name="line530"&gt;530&lt;/a&gt; #DataLen                 equ     $ - LABEL_DATA&lt;br /&gt;&lt;a name="line531"&gt;531&lt;/a&gt; .set DataLen, .  - LABEL_DATA&lt;br /&gt;&lt;a name="line532"&gt;532&lt;/a&gt; /* 32-bit global stack segment. */&lt;br /&gt;&lt;a name="line533"&gt;533&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_STACK:&lt;/span&gt;&lt;br /&gt;&lt;a name="line534"&gt;534&lt;/a&gt; .space  512, 0&lt;br /&gt;&lt;a name="line535"&gt;535&lt;/a&gt; .set    TopOfStack, (. - LABEL_STACK - 1)&lt;br /&gt;&lt;a name="line536"&gt;536&lt;/a&gt;&lt;br /&gt;&lt;a name="line537"&gt;537&lt;/a&gt; # END of [SECTION .data1]&lt;br /&gt;&lt;a name="line538"&gt;538&lt;/a&gt;&lt;br /&gt;&lt;a name="line539"&gt;539&lt;/a&gt;&lt;br /&gt;&lt;a name="line540"&gt;540&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_SEG_CODE16:&lt;/span&gt;&lt;br /&gt;&lt;a name="line541"&gt;541&lt;/a&gt; .code16&lt;br /&gt;&lt;a name="line542"&gt;542&lt;/a&gt;     #jmp     .&lt;br /&gt;&lt;a name="line543"&gt;543&lt;/a&gt;         # back to real mode&lt;br /&gt;&lt;a name="line544"&gt;544&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     $SelectorNormal, %ax&lt;br /&gt;&lt;a name="line545"&gt;545&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ds&lt;br /&gt;&lt;a name="line546"&gt;546&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line547"&gt;547&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %fs&lt;br /&gt;&lt;a name="line548"&gt;548&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %gs&lt;br /&gt;&lt;a name="line549"&gt;549&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ss&lt;br /&gt;&lt;a name="line550"&gt;550&lt;/a&gt;&lt;br /&gt;&lt;a name="line551"&gt;551&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %cr0, %eax&lt;br /&gt;&lt;a name="line552"&gt;552&lt;/a&gt; &lt;strong&gt;        and&lt;/strong&gt;     $0b11111110, %al&lt;br /&gt;&lt;a name="line553"&gt;553&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %eax, %cr0&lt;br /&gt;&lt;a name="line554"&gt;554&lt;/a&gt;&lt;br /&gt;&lt;a name="line555"&gt;555&lt;/a&gt;&lt;br /&gt;&lt;a name="line556"&gt;556&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_GO_BACK_TO_REAL:&lt;/span&gt;&lt;br /&gt;&lt;a name="line557"&gt;557&lt;/a&gt; #.2byte 0xea66&lt;br /&gt;&lt;a name="line558"&gt;558&lt;/a&gt; #.4byte 0x00000000&lt;br /&gt;&lt;a name="line559"&gt;559&lt;/a&gt; #.2byte LABEL_REAL_ENTRY&lt;br /&gt;&lt;a name="line560"&gt;560&lt;/a&gt; &lt;strong&gt;    jmp&lt;/strong&gt;     $0, $LABEL_REAL_ENTRY      # 段位址會在程序開始處被設置成正確的值&lt;br /&gt;&lt;a name="line561"&gt;561&lt;/a&gt;&lt;br /&gt;&lt;a name="line562"&gt;562&lt;/a&gt;&lt;br /&gt;&lt;a name="line563"&gt;563&lt;/a&gt; .set Code16Len, . - LABEL_SEG_CODE16&lt;br /&gt;&lt;a name="line564"&gt;564&lt;/a&gt;&lt;br /&gt;&lt;a name="line565"&gt;565&lt;/a&gt;&lt;br /&gt;&lt;a name="line566"&gt;566&lt;/a&gt; &lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;&lt;br /&gt;E8, F9, F9, F9, E3 的物理位址分別是 0x801000, 0x800000, 0x800000, 0x800000, 0x801000。&lt;br /&gt;&lt;br /&gt;* paging ok&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/Cli5lTz-ke2pmsavAI2oVBS8ZWamcjUwPIiXmoWZGdk?feat=embedwebsite"&gt;&lt;img src="https://lh6.googleusercontent.com/-OMphtkJS2wc/TwMd245_3KI/AAAAAAAAYZM/K5w6HiQoUpM/s640/page_ok.jpg" height="376" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;E8, F9, F9, E3, E8 的物理位址分別是 0x801000, 0x800000, 0x800000, 0x800000, 0x801000。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* paging fail&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/0I2knm8SKl8RArnq1cn4QhS8ZWamcjUwPIiXmoWZGdk?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-EQuKhWq5GM0/TwMd3sTTvBI/AAAAAAAAYZQ/_ZvRQjG9plg/s640/page_fail.jpg" height="376" width="640" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-6832595949443774626?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/6832595949443774626/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=6832595949443774626' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/6832595949443774626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/6832595949443774626'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/x86-page-table-test-1.html' title='x86 page table test (1)'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-OMphtkJS2wc/TwMd245_3KI/AAAAAAAAYZM/K5w6HiQoUpM/s72-c/page_ok.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-8523352836121030475</id><published>2012-01-02T15:54:00.003+08:00</published><updated>2012-01-03T23:07:50.268+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='write_os'/><title type='text'>x86 page table test (0)</title><content type='html'>這是用來測試 x86 的分頁程式, 進入保護模式後, 設定 page directory, page table (231 SetupPaging:), 印出訊息後, 切回 dos/real mode, 並回到 dos prompt。&lt;br /&gt;&lt;br /&gt;別小看只有 400 行的組合語言程式, 這可要花不少腦力才能完全了解。每一行的功能都是自己寫的, 沒有呼叫 bios。&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;pt_1.S&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt;  1&lt;/a&gt; &lt;span style="color:4444FF;"&gt;/*&lt;br /&gt;&lt;a name="line2"&gt;  2&lt;/a&gt; &lt;strong&gt;   ref&lt;/strong&gt;: Orange'S：一个操作系统的实现&lt;br /&gt;&lt;a name="line3"&gt;  3&lt;/a&gt; &lt;strong&gt;   do&lt;/strong&gt; the 5M memory r/w&lt;br /&gt;&lt;a name="line4"&gt;  4&lt;/a&gt;  */&lt;br /&gt;&lt;a name="line5"&gt;  5&lt;/a&gt; /* chapter3/1/loader.S&lt;br /&gt;&lt;a name="line6"&gt;  6&lt;/a&gt;&lt;br /&gt;&lt;a name="line7"&gt;  7&lt;/a&gt; &lt;strong&gt;   Author&lt;/strong&gt;: Wenbo Yang &amp;lt;solrex@gmail.com&amp;gt; &amp;lt;http://solrex.cn&amp;gt;&lt;br /&gt;&lt;a name="line8"&gt;  8&lt;/a&gt;&lt;br /&gt;&lt;a name="line9"&gt;  9&lt;/a&gt; &lt;strong&gt;   This&lt;/strong&gt; file is part of the source code of book &lt;span style="color:#008000;"&gt;"Write Your Own OS with Free&lt;br /&gt;&lt;a name="line10"&gt; 10&lt;/a&gt;    and Open Source Software"&lt;/span&gt;. Homepage @ &amp;lt;http://share.solrex.cn/WriteOS/&amp;gt;.&lt;br /&gt;&lt;a name="line11"&gt; 11&lt;/a&gt;&lt;br /&gt;&lt;a name="line12"&gt; 12&lt;/a&gt; &lt;strong&gt;   This&lt;/strong&gt; file is licensed under the GNU General Public License&lt;span style="color:#444444;"&gt;; either&lt;/span&gt;&lt;br /&gt;&lt;a name="line13"&gt; 13&lt;/a&gt; &lt;strong&gt;   version&lt;/strong&gt; 3 of the License, or (at your option) any later version. */&lt;br /&gt;&lt;a name="line14"&gt; 14&lt;/a&gt; /*&lt;br /&gt;&lt;a name="line15"&gt; 15&lt;/a&gt;  * describe by descent:&lt;br /&gt;&lt;a name="line16"&gt; 16&lt;/a&gt;  *&lt;br /&gt;&lt;a name="line17"&gt; 17&lt;/a&gt;  * copy from 5M_mem_rw.S and modify for page table test.&lt;br /&gt;&lt;a name="line18"&gt; 18&lt;/a&gt;  */&lt;br /&gt;&lt;a name="line19"&gt; 19&lt;/a&gt;&lt;br /&gt;&lt;a name="line20"&gt; 20&lt;/a&gt; #include &lt;span style="color:#008000;"&gt;"pm.h"&lt;/span&gt;&lt;br /&gt;&lt;a name="line21"&gt; 21&lt;/a&gt;&lt;br /&gt;&lt;a name="line22"&gt; 22&lt;/a&gt; .set    PAGE_DIR_BASE, 0x200000   /* 2MB, base address of page directory */&lt;br /&gt;&lt;a name="line23"&gt; 23&lt;/a&gt; .set    PAGE_TBL_BASE, 0x201000   /* 2MB+4KB, base address of page table */&lt;br /&gt;&lt;a name="line24"&gt; 24&lt;/a&gt;&lt;br /&gt;&lt;a name="line25"&gt; 25&lt;/a&gt; .code16&lt;br /&gt;&lt;a name="line26"&gt; 26&lt;/a&gt; .text&lt;br /&gt;&lt;a name="line27"&gt; 27&lt;/a&gt; &lt;strong&gt;    jmp&lt;/strong&gt; LABEL_BEGIN     /* jump over the .data section. */&lt;br /&gt;&lt;a name="line28"&gt; 28&lt;/a&gt;&lt;br /&gt;&lt;a name="line29"&gt; 29&lt;/a&gt; /* NOTE! Wenbo-20080512: Actually here we put the normal .data section into&lt;br /&gt;&lt;a name="line30"&gt; 30&lt;/a&gt; &lt;strong&gt;   the&lt;/strong&gt; .code section. For application SW, it is not allowed. However, we are&lt;br /&gt;&lt;a name="line31"&gt; 31&lt;/a&gt; &lt;strong&gt;   writing&lt;/strong&gt; an OS. That is OK. Because there is no OS to complain about&lt;br /&gt;&lt;a name="line32"&gt; 32&lt;/a&gt; &lt;strong&gt;   that&lt;/strong&gt; behavior. :) */&lt;br /&gt;&lt;a name="line33"&gt; 33&lt;/a&gt;&lt;br /&gt;&lt;a name="line34"&gt; 34&lt;/a&gt; /* Global Descriptor Table */&lt;br /&gt;&lt;a name="line35"&gt; 35&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_GDT:&lt;/span&gt;          Descriptor  0,                        0, 0&lt;br /&gt;&lt;a name="line36"&gt; 36&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_NORMAL:&lt;/span&gt;  Descriptor  0,         0xffff, DA_DRW    # Normal descriptor is for back to real mode.&lt;br /&gt;&lt;a name="line37"&gt; 37&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_CODE32:&lt;/span&gt;  Descriptor  0,       (SegCode32Len - 1), (DA_C + DA_32)&lt;br /&gt;&lt;a name="line38"&gt; 38&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_CODE16:&lt;/span&gt;  Descriptor    0,         0xffff, DA_C      # 非一致程式碼段, 16&lt;br /&gt;&lt;a name="line39"&gt; 39&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_DATA:&lt;/span&gt;   Descriptor    0,      DataLen-1, DA_DRW    # Data&lt;br /&gt;&lt;a name="line40"&gt; 40&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_STACK:&lt;/span&gt;  Descriptor    0,     TopOfStack, DA_DRWA+DA_32 # Stack, 32 位&lt;br /&gt;&lt;a name="line41"&gt; 41&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_TEST:&lt;/span&gt; Descriptor 0x500000, 0xffff, DA_DRW&lt;br /&gt;&lt;a name="line42"&gt; 42&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_VIDEO:&lt;/span&gt;   Descriptor  0xB8000, 0xffff, DA_DRW&lt;br /&gt;&lt;a name="line43"&gt; 43&lt;/a&gt;&lt;br /&gt;&lt;a name="line44"&gt; 44&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DES_PAGE_DIR:&lt;/span&gt;   Descriptor  PAGE_DIR_BASE, 4096, DA_DRW&lt;br /&gt;&lt;a name="line45"&gt; 45&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DES_PAGE_TBL:&lt;/span&gt;   Descriptor  PAGE_TBL_BASE, 1023, (DA_DRW | DA_LIMIT_4K)&lt;br /&gt;&lt;a name="line46"&gt; 46&lt;/a&gt;&lt;br /&gt;&lt;a name="line47"&gt; 47&lt;/a&gt; .set GdtLen, (. - LABEL_GDT)  /* GDT Length */&lt;br /&gt;&lt;a name="line48"&gt; 48&lt;/a&gt;&lt;br /&gt;&lt;a name="line49"&gt; 49&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;GdtPtr:&lt;/span&gt; .2byte  (GdtLen - 1)  /* GDT Limit */&lt;br /&gt;&lt;a name="line50"&gt; 50&lt;/a&gt;         .4byte  0             /* GDT Base */&lt;br /&gt;&lt;a name="line51"&gt; 51&lt;/a&gt;&lt;br /&gt;&lt;a name="line52"&gt; 52&lt;/a&gt; /* GDT Selector */&lt;br /&gt;&lt;a name="line53"&gt; 53&lt;/a&gt; .set SelectorNormal, (LABEL_DESC_NORMAL - LABEL_GDT) &lt;br /&gt;&lt;a name="line54"&gt; 54&lt;/a&gt; .set    SelectorCode32, (LABEL_DESC_CODE32 - LABEL_GDT)&lt;br /&gt;&lt;a name="line55"&gt; 55&lt;/a&gt; .set SelectorCode16, (LABEL_DESC_CODE16 - LABEL_GDT)&lt;br /&gt;&lt;a name="line56"&gt; 56&lt;/a&gt; .set SelectorData, (LABEL_DESC_DATA         - LABEL_GDT)&lt;br /&gt;&lt;a name="line57"&gt; 57&lt;/a&gt; .set SelectorStack, (LABEL_DESC_STACK        - LABEL_GDT)&lt;br /&gt;&lt;a name="line58"&gt; 58&lt;/a&gt; .set SelectorTest, (LABEL_DESC_TEST         - LABEL_GDT)&lt;br /&gt;&lt;a name="line59"&gt; 59&lt;/a&gt; .set    SelectorVideo,  (LABEL_DESC_VIDEO  - LABEL_GDT)&lt;br /&gt;&lt;a name="line60"&gt; 60&lt;/a&gt; .set SELECTOR_PAGE_DIR,  (LABEL_DES_PAGE_DIR  - LABEL_GDT)&lt;br /&gt;&lt;a name="line61"&gt; 61&lt;/a&gt; .set SELECTOR_PAGE_TBL,  (LABEL_DES_PAGE_TBL  - LABEL_GDT)&lt;br /&gt;&lt;a name="line62"&gt; 62&lt;/a&gt;&lt;br /&gt;&lt;a name="line63"&gt; 63&lt;/a&gt;&lt;br /&gt;&lt;a name="line64"&gt; 64&lt;/a&gt; /* Program starts here. */&lt;br /&gt;&lt;a name="line65"&gt; 65&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_BEGIN:&lt;/span&gt;&lt;br /&gt;&lt;a name="line66"&gt; 66&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax    /* Move code segment address(CS) to data segment */&lt;br /&gt;&lt;a name="line67"&gt; 67&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %ds    /* register(DS), ES and SS. Because we have      */&lt;br /&gt;&lt;a name="line68"&gt; 68&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %es    /* embedded .data section into .code section in  */&lt;br /&gt;&lt;a name="line69"&gt; 69&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %ss    /* the start(mentioned in the NOTE above).       */&lt;br /&gt;&lt;a name="line70"&gt; 70&lt;/a&gt;&lt;br /&gt;&lt;a name="line71"&gt; 71&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;     $0x100, %sp&lt;br /&gt;&lt;a name="line72"&gt; 72&lt;/a&gt; &lt;strong&gt;    nop&lt;/strong&gt;&lt;br /&gt;&lt;a name="line73"&gt; 73&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt; %ax, (LABEL_GO_BACK_TO_REAL+3) # modify segment value, indexed memory mode, ref  professional aeesmbly language p 102.&lt;br /&gt;&lt;a name="line74"&gt; 74&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;     %sp, (SPValueInRealMode)&lt;br /&gt;&lt;a name="line75"&gt; 75&lt;/a&gt;&lt;br /&gt;&lt;a name="line76"&gt; 76&lt;/a&gt;&lt;br /&gt;&lt;a name="line77"&gt; 77&lt;/a&gt;     /* Initialize 16-bits code segment descriptor. */&lt;br /&gt;&lt;a name="line78"&gt; 78&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line79"&gt; 79&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line80"&gt; 80&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line81"&gt; 81&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_SEG_CODE16), %eax&lt;br /&gt;&lt;a name="line82"&gt; 82&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_CODE16 + 2)&lt;br /&gt;&lt;a name="line83"&gt; 83&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line84"&gt; 84&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_CODE16 + 4)&lt;br /&gt;&lt;a name="line85"&gt; 85&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_CODE16 + 7)&lt;br /&gt;&lt;a name="line86"&gt; 86&lt;/a&gt;&lt;br /&gt;&lt;a name="line87"&gt; 87&lt;/a&gt;     /* Initialize 32-bits code segment descriptor. */&lt;br /&gt;&lt;a name="line88"&gt; 88&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line89"&gt; 89&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line90"&gt; 90&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line91"&gt; 91&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_SEG_CODE32), %eax&lt;br /&gt;&lt;a name="line92"&gt; 92&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_CODE32 + 2)&lt;br /&gt;&lt;a name="line93"&gt; 93&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line94"&gt; 94&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_CODE32 + 4)&lt;br /&gt;&lt;a name="line95"&gt; 95&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_CODE32 + 7)&lt;br /&gt;&lt;a name="line96"&gt; 96&lt;/a&gt;&lt;br /&gt;&lt;a name="line97"&gt; 97&lt;/a&gt;  # initialize data segment descriptor&lt;br /&gt;&lt;a name="line98"&gt; 98&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %eax, %eax&lt;br /&gt;&lt;a name="line99"&gt; 99&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ds, %ax&lt;br /&gt;&lt;a name="line100"&gt;100&lt;/a&gt; &lt;strong&gt; shl&lt;/strong&gt; $4, %eax&lt;br /&gt;&lt;a name="line101"&gt;101&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $(LABEL_DATA), %eax&lt;br /&gt;&lt;a name="line102"&gt;102&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, (LABEL_DESC_DATA + 2)&lt;br /&gt;&lt;a name="line103"&gt;103&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $16, %eax&lt;br /&gt;&lt;a name="line104"&gt;104&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, (LABEL_DESC_DATA + 4)&lt;br /&gt;&lt;a name="line105"&gt;105&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %ah, (LABEL_DESC_DATA + 7)&lt;br /&gt;&lt;a name="line106"&gt;106&lt;/a&gt;&lt;br /&gt;&lt;a name="line107"&gt;107&lt;/a&gt;  # initialize stack segment descriptor&lt;br /&gt;&lt;a name="line108"&gt;108&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %eax, %eax&lt;br /&gt;&lt;a name="line109"&gt;109&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ds, %ax&lt;br /&gt;&lt;a name="line110"&gt;110&lt;/a&gt; &lt;strong&gt; shl&lt;/strong&gt; $4, %eax&lt;br /&gt;&lt;a name="line111"&gt;111&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $(LABEL_STACK), %eax&lt;br /&gt;&lt;a name="line112"&gt;112&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, (LABEL_DESC_STACK + 2)&lt;br /&gt;&lt;a name="line113"&gt;113&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $16, %eax&lt;br /&gt;&lt;a name="line114"&gt;114&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, (LABEL_DESC_STACK + 4)&lt;br /&gt;&lt;a name="line115"&gt;115&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %ah, (LABEL_DESC_STACK + 7)&lt;br /&gt;&lt;a name="line116"&gt;116&lt;/a&gt;&lt;br /&gt;&lt;a name="line117"&gt;117&lt;/a&gt;     /* Prepared for loading GDTR */&lt;br /&gt;&lt;a name="line118"&gt;118&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line119"&gt;119&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ds, %ax&lt;br /&gt;&lt;a name="line120"&gt;120&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line121"&gt;121&lt;/a&gt; &lt;strong&gt;    add&lt;/strong&gt;     $(LABEL_GDT), %eax      /* eax &amp;lt;- gdt base*/&lt;br /&gt;&lt;a name="line122"&gt;122&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    %eax, (GdtPtr + 2)&lt;br /&gt;&lt;a name="line123"&gt;123&lt;/a&gt;&lt;br /&gt;&lt;a name="line124"&gt;124&lt;/a&gt;     /* Load GDTR(Global Descriptor Table Register) */&lt;br /&gt;&lt;a name="line125"&gt;125&lt;/a&gt; &lt;strong&gt;    lgdtw&lt;/strong&gt;   GdtPtr&lt;br /&gt;&lt;a name="line126"&gt;126&lt;/a&gt;&lt;br /&gt;&lt;a name="line127"&gt;127&lt;/a&gt;     /* Clear Interrupt Flags */&lt;br /&gt;&lt;a name="line128"&gt;128&lt;/a&gt; &lt;strong&gt;    cli&lt;/strong&gt;&lt;br /&gt;&lt;a name="line129"&gt;129&lt;/a&gt;&lt;br /&gt;&lt;a name="line130"&gt;130&lt;/a&gt;     /* Open A20 line. */&lt;br /&gt;&lt;a name="line131"&gt;131&lt;/a&gt; &lt;strong&gt;    inb&lt;/strong&gt;     $0x92, %al&lt;br /&gt;&lt;a name="line132"&gt;132&lt;/a&gt; &lt;strong&gt;    orb&lt;/strong&gt;     $0b00000010, %al&lt;br /&gt;&lt;a name="line133"&gt;133&lt;/a&gt; &lt;strong&gt;    outb&lt;/strong&gt;    %al, $0x92&lt;br /&gt;&lt;a name="line134"&gt;134&lt;/a&gt;&lt;br /&gt;&lt;a name="line135"&gt;135&lt;/a&gt;     /* Enable protect mode, PE bit of CR0. */&lt;br /&gt;&lt;a name="line136"&gt;136&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    %cr0, %eax&lt;br /&gt;&lt;a name="line137"&gt;137&lt;/a&gt; &lt;strong&gt;    orl&lt;/strong&gt;     $1, %eax&lt;br /&gt;&lt;a name="line138"&gt;138&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    %eax, %cr0&lt;br /&gt;&lt;a name="line139"&gt;139&lt;/a&gt;&lt;br /&gt;&lt;a name="line140"&gt;140&lt;/a&gt;     /* Mixed-Size Jump. */&lt;br /&gt;&lt;a name="line141"&gt;141&lt;/a&gt; &lt;strong&gt;    ljmp&lt;/strong&gt; $SelectorCode32, $0       /* Thanks to earthengine@gmail, I got */&lt;br /&gt;&lt;a name="line142"&gt;142&lt;/a&gt;                                     /* this mixed-size jump insn of gas.  */&lt;br /&gt;&lt;a name="line143"&gt;143&lt;/a&gt;                                     /* this calls far jump (ptr 16:32) in intel manual) */&lt;br /&gt;&lt;a name="line144"&gt;144&lt;/a&gt;&lt;br /&gt;&lt;a name="line145"&gt;145&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_REAL_ENTRY:&lt;/span&gt;               # 從保護模式跳回到實模式就到了這裡&lt;br /&gt;&lt;a name="line146"&gt;146&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %cx, %ax&lt;br /&gt;&lt;a name="line147"&gt;147&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ds&lt;br /&gt;&lt;a name="line148"&gt;148&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line149"&gt;149&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ss&lt;br /&gt;&lt;a name="line150"&gt;150&lt;/a&gt;&lt;br /&gt;&lt;a name="line151"&gt;151&lt;/a&gt; #        mov     sp, [SPValueInRealMode]&lt;br /&gt;&lt;a name="line152"&gt;152&lt;/a&gt; &lt;strong&gt;        movw&lt;/strong&gt;     (SPValueInRealMode), %sp&lt;br /&gt;&lt;a name="line153"&gt;153&lt;/a&gt;&lt;br /&gt;&lt;a name="line154"&gt;154&lt;/a&gt;&lt;br /&gt;&lt;a name="line155"&gt;155&lt;/a&gt; &lt;strong&gt;        in&lt;/strong&gt;      $0x92, %al&lt;br /&gt;&lt;a name="line156"&gt;156&lt;/a&gt; &lt;strong&gt;        and&lt;/strong&gt;     $0b11111101, %al   #  close A20 line&lt;br /&gt;&lt;a name="line157"&gt;157&lt;/a&gt; &lt;strong&gt;        out&lt;/strong&gt;     %al, $0x92&lt;br /&gt;&lt;a name="line158"&gt;158&lt;/a&gt;&lt;br /&gt;&lt;a name="line159"&gt;159&lt;/a&gt; &lt;strong&gt;        sti&lt;/strong&gt;                     # 開中斷&lt;br /&gt;&lt;a name="line160"&gt;160&lt;/a&gt;&lt;br /&gt;&lt;a name="line161"&gt;161&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     $0x4c00, %ax&lt;br /&gt;&lt;a name="line162"&gt;162&lt;/a&gt; &lt;strong&gt;        int&lt;/strong&gt;     $0x21             #  回到 DOS&lt;br /&gt;&lt;a name="line163"&gt;163&lt;/a&gt; # END of .code16&lt;br /&gt;&lt;a name="line164"&gt;164&lt;/a&gt;&lt;br /&gt;&lt;a name="line165"&gt;165&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_SEG_CODE32:&lt;/span&gt;&lt;br /&gt;&lt;a name="line166"&gt;166&lt;/a&gt; .code32&lt;br /&gt;&lt;a name="line167"&gt;167&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; SetupPaging     /* set up paging before 32-bit code */&lt;br /&gt;&lt;a name="line168"&gt;168&lt;/a&gt;&lt;br /&gt;&lt;a name="line169"&gt;169&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(SelectorData), %ax&lt;br /&gt;&lt;a name="line170"&gt;170&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ax, %ds   # 資料段選擇子&lt;br /&gt;&lt;a name="line171"&gt;171&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(SelectorTest), %ax&lt;br /&gt;&lt;a name="line172"&gt;172&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ax, %es   # 測試段選擇子&lt;br /&gt;&lt;a name="line173"&gt;173&lt;/a&gt;&lt;br /&gt;&lt;a name="line174"&gt;174&lt;/a&gt;&lt;br /&gt;&lt;a name="line175"&gt;175&lt;/a&gt;&lt;br /&gt;&lt;a name="line176"&gt;176&lt;/a&gt;&lt;br /&gt;&lt;a name="line177"&gt;177&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line178"&gt;178&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %gs                /* Video segment selector(dest) */&lt;br /&gt;&lt;a name="line179"&gt;179&lt;/a&gt;&lt;br /&gt;&lt;a name="line180"&gt;180&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(SelectorStack), %ax&lt;br /&gt;&lt;a name="line181"&gt;181&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ax, %ss   # 堆疊段選擇子&lt;br /&gt;&lt;a name="line182"&gt;182&lt;/a&gt;&lt;br /&gt;&lt;a name="line183"&gt;183&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(TopOfStack), %esp&lt;br /&gt;&lt;a name="line184"&gt;184&lt;/a&gt;&lt;br /&gt;&lt;a name="line185"&gt;185&lt;/a&gt; /*&lt;br /&gt;&lt;a name="line186"&gt;186&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    $((80 * 10 + 0) * 2), %edi&lt;br /&gt;&lt;a name="line187"&gt;187&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    $0xC, %ah               # 0000: Black Back 1100: Red Front&lt;br /&gt;&lt;a name="line188"&gt;188&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    $'P', %al&lt;br /&gt;&lt;a name="line189"&gt;189&lt;/a&gt;&lt;br /&gt;&lt;a name="line190"&gt;190&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line191"&gt;191&lt;/a&gt; */&lt;br /&gt;&lt;a name="line192"&gt;192&lt;/a&gt;&lt;br /&gt;&lt;a name="line193"&gt;193&lt;/a&gt;  # print string &lt;span style="color:#008000;"&gt;"In Protect Mode now. ^-^"&lt;/span&gt;&lt;br /&gt;&lt;a name="line194"&gt;194&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $0x0c, %ah # 0000: 黑底    1100: 紅字&lt;br /&gt;&lt;a name="line195"&gt;195&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %esi, %esi&lt;br /&gt;&lt;a name="line196"&gt;196&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %edi, %edi&lt;br /&gt;&lt;a name="line197"&gt;197&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(OffsetPMMessage), %esi # data string offset&lt;br /&gt;&lt;a name="line198"&gt;198&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $((80 * 10 + 0) * 2), %edi # 目的資料偏移。螢幕第 10 行, 第 0 列。&lt;br /&gt;&lt;a name="line199"&gt;199&lt;/a&gt; &lt;strong&gt; cld&lt;/strong&gt; # Clear Direction Flag, ref: http://www.fermi.mn.it/linux/quarta/x86/cld.htm&lt;br /&gt;&lt;a name="line200"&gt;200&lt;/a&gt;             # After CLD is executed, string operations will increment the index&lt;br /&gt;&lt;a name="line201"&gt;201&lt;/a&gt;             # (SI and/or DI) that they use.&lt;br /&gt;&lt;a name="line202"&gt;202&lt;/a&gt; .1:&lt;br /&gt;&lt;a name="line203"&gt;203&lt;/a&gt; &lt;strong&gt; lodsb&lt;/strong&gt; # For legacy mode, Load byte at address DS:(E)SI into AL.&lt;br /&gt;&lt;a name="line204"&gt;204&lt;/a&gt;               # For 64-bit mode load byte at address (R)SI into AL.&lt;br /&gt;&lt;a name="line205"&gt;205&lt;/a&gt;               # ref: http://siyobik.info/main/reference/instruction/LODS%2FLODSB%2FLODSW%2FLODSD%2FLODSQ&lt;br /&gt;&lt;a name="line206"&gt;206&lt;/a&gt; &lt;strong&gt; test&lt;/strong&gt; %al, %al # result is 0, zf sets to 1.&lt;br /&gt;&lt;a name="line207"&gt;207&lt;/a&gt; &lt;strong&gt; jz&lt;/strong&gt; .2 # zf = 1 jump&lt;br /&gt;&lt;a name="line208"&gt;208&lt;/a&gt; # mov [gs:edi], ax&lt;br /&gt;&lt;a name="line209"&gt;209&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line210"&gt;210&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %edi&lt;br /&gt;&lt;a name="line211"&gt;211&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .1&lt;br /&gt;&lt;a name="line212"&gt;212&lt;/a&gt; .2: # 顯示完畢&lt;br /&gt;&lt;a name="line213"&gt;213&lt;/a&gt;&lt;br /&gt;&lt;a name="line214"&gt;214&lt;/a&gt; #push  %eax                       # Multiboot magic number&lt;br /&gt;&lt;a name="line215"&gt;215&lt;/a&gt; #   push  %ebx                       # Multiboot data structure&lt;br /&gt;&lt;a name="line216"&gt;216&lt;/a&gt;&lt;br /&gt;&lt;a name="line217"&gt;217&lt;/a&gt; # call kmain&lt;br /&gt;&lt;a name="line218"&gt;218&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line219"&gt;219&lt;/a&gt;         #movb $0xa9, %al&lt;br /&gt;&lt;a name="line220"&gt;220&lt;/a&gt;  #call DispAL&lt;br /&gt;&lt;a name="line221"&gt;221&lt;/a&gt;&lt;br /&gt;&lt;a name="line222"&gt;222&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; TestRead&lt;br /&gt;&lt;a name="line223"&gt;223&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; TestWrite&lt;br /&gt;&lt;a name="line224"&gt;224&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; TestRead&lt;br /&gt;&lt;a name="line225"&gt;225&lt;/a&gt;&lt;br /&gt;&lt;a name="line226"&gt;226&lt;/a&gt;&lt;br /&gt;&lt;a name="line227"&gt;227&lt;/a&gt; &lt;strong&gt;    ljmpl&lt;/strong&gt;     $SelectorCode16,$0&lt;br /&gt;&lt;a name="line228"&gt;228&lt;/a&gt;     # jmpl     $SelectorCode16,$0 # it works&lt;br /&gt;&lt;a name="line229"&gt;229&lt;/a&gt;&lt;br /&gt;&lt;a name="line230"&gt;230&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line231"&gt;231&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;SetupPaging:&lt;/span&gt;&lt;br /&gt;&lt;a name="line232"&gt;232&lt;/a&gt; /* Directly map linear addresses to physical addresses for simplification */&lt;br /&gt;&lt;a name="line233"&gt;233&lt;/a&gt;     /* Init page directory, %ecx entries. */&lt;br /&gt;&lt;a name="line234"&gt;234&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SELECTOR_PAGE_DIR), %ax&lt;br /&gt;&lt;a name="line235"&gt;235&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line236"&gt;236&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $1024, %ecx     /* Loop counter, num of page tables: 1024 */&lt;br /&gt;&lt;a name="line237"&gt;237&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %edi, %edi&lt;br /&gt;&lt;a name="line238"&gt;238&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line239"&gt;239&lt;/a&gt;     /* Set PDE attributes(flags): P: 1, U/S: 1, R/W: 1. */&lt;br /&gt;&lt;a name="line240"&gt;240&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(PAGE_TBL_BASE | PG_P | PG_USU | PG_RWW), %eax&lt;br /&gt;&lt;a name="line241"&gt;241&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;SP&lt;/span&gt;.1:&lt;br /&gt;&lt;a name="line242"&gt;242&lt;/a&gt; &lt;strong&gt;    stosl&lt;/strong&gt;                   /* Store %eax to %es:%edi consecutively. */&lt;br /&gt;&lt;a name="line243"&gt;243&lt;/a&gt; &lt;strong&gt;    add&lt;/strong&gt;     $4096, %eax     /* Page tables are in sequential format. */&lt;br /&gt;&lt;a name="line244"&gt;244&lt;/a&gt; &lt;strong&gt;    loop&lt;/strong&gt;    SP.1            /* %ecx loops. */&lt;br /&gt;&lt;a name="line245"&gt;245&lt;/a&gt;&lt;br /&gt;&lt;a name="line246"&gt;246&lt;/a&gt;     /* Init page tables, %ecx pages. */&lt;br /&gt;&lt;a name="line247"&gt;247&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SELECTOR_PAGE_TBL), %ax&lt;br /&gt;&lt;a name="line248"&gt;248&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line249"&gt;249&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(1024*1024), %ecx  /* Loop counter, num of pages: 1024^2. */&lt;br /&gt;&lt;a name="line250"&gt;250&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %edi, %edi&lt;br /&gt;&lt;a name="line251"&gt;251&lt;/a&gt;     /* Set PTE attributes(flags): P:1, U/S: 1， R/W: 1. */&lt;br /&gt;&lt;a name="line252"&gt;252&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(PG_P | PG_USU | PG_RWW), %eax&lt;br /&gt;&lt;a name="line253"&gt;253&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;SP&lt;/span&gt;.2:&lt;br /&gt;&lt;a name="line254"&gt;254&lt;/a&gt; &lt;strong&gt;    stosl&lt;/strong&gt;                   /* Store %eax to %es:%edi consecutively. */&lt;br /&gt;&lt;a name="line255"&gt;255&lt;/a&gt; &lt;strong&gt;    add&lt;/strong&gt;     $4096, %eax     /* Pages are in sequential format. */&lt;br /&gt;&lt;a name="line256"&gt;256&lt;/a&gt; &lt;strong&gt;    loop&lt;/strong&gt;    SP.2            /* %ecx loops. */&lt;br /&gt;&lt;a name="line257"&gt;257&lt;/a&gt;&lt;br /&gt;&lt;a name="line258"&gt;258&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(PAGE_DIR_BASE), %eax&lt;br /&gt;&lt;a name="line259"&gt;259&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %eax, %cr3  /* Store base address of page table dir to %cr3. */&lt;br /&gt;&lt;a name="line260"&gt;260&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cr0, %eax&lt;br /&gt;&lt;a name="line261"&gt;261&lt;/a&gt; &lt;strong&gt;    or&lt;/strong&gt;      $0x80000000, %eax&lt;br /&gt;&lt;a name="line262"&gt;262&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %eax, %cr0  /* Enable paging bit in %cr0. */&lt;br /&gt;&lt;a name="line263"&gt;263&lt;/a&gt; &lt;strong&gt;    ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line264"&gt;264&lt;/a&gt; # end SetupPaging:&lt;br /&gt;&lt;a name="line265"&gt;265&lt;/a&gt;&lt;br /&gt;&lt;a name="line266"&gt;266&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;TestRead:&lt;/span&gt;&lt;br /&gt;&lt;a name="line267"&gt;267&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %esi, %esi&lt;br /&gt;&lt;a name="line268"&gt;268&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $8, %ecx&lt;br /&gt;&lt;a name="line269"&gt;269&lt;/a&gt; .loop:&lt;br /&gt;&lt;a name="line270"&gt;270&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %es:(%esi), %al&lt;br /&gt;&lt;a name="line271"&gt;271&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line272"&gt;272&lt;/a&gt; &lt;strong&gt; inc&lt;/strong&gt; %esi&lt;br /&gt;&lt;a name="line273"&gt;273&lt;/a&gt; &lt;strong&gt; loop&lt;/strong&gt; .loop&lt;br /&gt;&lt;a name="line274"&gt;274&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line275"&gt;275&lt;/a&gt;&lt;br /&gt;&lt;a name="line276"&gt;276&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line277"&gt;277&lt;/a&gt; # TestRead 結束-----------------------------------------------------------&lt;br /&gt;&lt;a name="line278"&gt;278&lt;/a&gt;&lt;br /&gt;&lt;a name="line279"&gt;279&lt;/a&gt;&lt;br /&gt;&lt;a name="line280"&gt;280&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line281"&gt;281&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;TestWrite:&lt;/span&gt;&lt;br /&gt;&lt;a name="line282"&gt;282&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %esi&lt;br /&gt;&lt;a name="line283"&gt;283&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %edi&lt;br /&gt;&lt;a name="line284"&gt;284&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %esi, %esi&lt;br /&gt;&lt;a name="line285"&gt;285&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %edi, %edi&lt;br /&gt;&lt;a name="line286"&gt;286&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(OffsetStrTest), %esi # data offset&lt;br /&gt;&lt;a name="line287"&gt;287&lt;/a&gt; &lt;strong&gt; cld&lt;/strong&gt; # Clear Direction Flag, ref: http://www.fermi.mn.it/linux/quarta/x86/cld.htm&lt;br /&gt;&lt;a name="line288"&gt;288&lt;/a&gt;             # After CLD is executed, string operations will increment the index&lt;br /&gt;&lt;a name="line289"&gt;289&lt;/a&gt;             # (SI and/or DI) that they use.&lt;br /&gt;&lt;a name="line290"&gt;290&lt;/a&gt; .6:&lt;br /&gt;&lt;a name="line291"&gt;291&lt;/a&gt; &lt;strong&gt; lodsb&lt;/strong&gt; # For legacy mode, Load byte at address DS:(E)SI into AL.&lt;br /&gt;&lt;a name="line292"&gt;292&lt;/a&gt;               # For 64-bit mode load byte at address (R)SI into AL.&lt;br /&gt;&lt;a name="line293"&gt;293&lt;/a&gt;               # ref: http://siyobik.info/main/reference/instruction/LODS%2FLODSB%2FLODSW%2FLODSD%2FLODSQ&lt;br /&gt;&lt;a name="line294"&gt;294&lt;/a&gt;&lt;br /&gt;&lt;a name="line295"&gt;295&lt;/a&gt; &lt;strong&gt; test&lt;/strong&gt; %al, %al&lt;br /&gt;&lt;a name="line296"&gt;296&lt;/a&gt; &lt;strong&gt; jz&lt;/strong&gt; .5 # zf = 1 jump&lt;br /&gt;&lt;a name="line297"&gt;297&lt;/a&gt; # mov [es:edi], al&lt;br /&gt;&lt;a name="line298"&gt;298&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %al, %es:(%edi)&lt;br /&gt;&lt;a name="line299"&gt;299&lt;/a&gt; &lt;strong&gt; inc&lt;/strong&gt; %edi&lt;br /&gt;&lt;a name="line300"&gt;300&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .6&lt;br /&gt;&lt;a name="line301"&gt;301&lt;/a&gt; .5:&lt;br /&gt;&lt;a name="line302"&gt;302&lt;/a&gt;&lt;br /&gt;&lt;a name="line303"&gt;303&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %edi&lt;br /&gt;&lt;a name="line304"&gt;304&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %esi&lt;br /&gt;&lt;a name="line305"&gt;305&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line306"&gt;306&lt;/a&gt; # TestWrite 結束----------------------------------------------------------&lt;br /&gt;&lt;a name="line307"&gt;307&lt;/a&gt;&lt;br /&gt;&lt;a name="line308"&gt;308&lt;/a&gt;&lt;br /&gt;&lt;a name="line309"&gt;309&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line310"&gt;310&lt;/a&gt; # 顯示 AL 中的數字&lt;br /&gt;&lt;a name="line311"&gt;311&lt;/a&gt; # 默認地:&lt;br /&gt;&lt;a name="line312"&gt;312&lt;/a&gt; # 數字已經存在 AL 中&lt;br /&gt;&lt;a name="line313"&gt;313&lt;/a&gt; # edi 始終指向要顯示的下一個字元的位置&lt;br /&gt;&lt;a name="line314"&gt;314&lt;/a&gt; # 被改變的暫存器:&lt;br /&gt;&lt;a name="line315"&gt;315&lt;/a&gt; # ax, edi&lt;br /&gt;&lt;a name="line316"&gt;316&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line317"&gt;317&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;DispAL:&lt;/span&gt;&lt;br /&gt;&lt;a name="line318"&gt;318&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line319"&gt;319&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line320"&gt;320&lt;/a&gt;&lt;br /&gt;&lt;a name="line321"&gt;321&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $0x0c, %ah # 0000: 黑底    1100: 紅字&lt;br /&gt;&lt;a name="line322"&gt;322&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, %dl&lt;br /&gt;&lt;a name="line323"&gt;323&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $4, %al&lt;br /&gt;&lt;a name="line324"&gt;324&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $2, %ecx&lt;br /&gt;&lt;a name="line325"&gt;325&lt;/a&gt; .begin:&lt;br /&gt;&lt;a name="line326"&gt;326&lt;/a&gt; &lt;strong&gt; andb&lt;/strong&gt; $0x0f, %al&lt;br /&gt;&lt;a name="line327"&gt;327&lt;/a&gt; &lt;strong&gt; cmp&lt;/strong&gt; $9, %al&lt;br /&gt;&lt;a name="line328"&gt;328&lt;/a&gt; &lt;strong&gt; ja&lt;/strong&gt; .3          # cf=0, zf=0, above 9 (&amp;gt;9)&lt;br /&gt;&lt;a name="line329"&gt;329&lt;/a&gt;  #addb $'0', %al&lt;br /&gt;&lt;a name="line330"&gt;330&lt;/a&gt; &lt;strong&gt; addb&lt;/strong&gt; $0x30, %al&lt;br /&gt;&lt;a name="line331"&gt;331&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .4&lt;br /&gt;&lt;a name="line332"&gt;332&lt;/a&gt; .3:&lt;br /&gt;&lt;a name="line333"&gt;333&lt;/a&gt; &lt;strong&gt; sub&lt;/strong&gt; $0x0A, %al&lt;br /&gt;&lt;a name="line334"&gt;334&lt;/a&gt;  #add $'A', %al&lt;br /&gt;&lt;a name="line335"&gt;335&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $0x41, %al&lt;br /&gt;&lt;a name="line336"&gt;336&lt;/a&gt; .4:&lt;br /&gt;&lt;a name="line337"&gt;337&lt;/a&gt;  #mov [gs:edi], ax&lt;br /&gt;&lt;a name="line338"&gt;338&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line339"&gt;339&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %edi&lt;br /&gt;&lt;a name="line340"&gt;340&lt;/a&gt;&lt;br /&gt;&lt;a name="line341"&gt;341&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %dl, %al&lt;br /&gt;&lt;a name="line342"&gt;342&lt;/a&gt; &lt;strong&gt; loop&lt;/strong&gt; .begin&lt;br /&gt;&lt;a name="line343"&gt;343&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %edi&lt;br /&gt;&lt;a name="line344"&gt;344&lt;/a&gt;&lt;br /&gt;&lt;a name="line345"&gt;345&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line346"&gt;346&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line347"&gt;347&lt;/a&gt;&lt;br /&gt;&lt;a name="line348"&gt;348&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line349"&gt;349&lt;/a&gt; # DispAL 結束-------------------------------------------------------------&lt;br /&gt;&lt;a name="line350"&gt;350&lt;/a&gt;&lt;br /&gt;&lt;a name="line351"&gt;351&lt;/a&gt;&lt;br /&gt;&lt;a name="line352"&gt;352&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line353"&gt;353&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;DispReturn:&lt;/span&gt;&lt;br /&gt;&lt;a name="line354"&gt;354&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %eax&lt;br /&gt;&lt;a name="line355"&gt;355&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line356"&gt;356&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %edi, %eax&lt;br /&gt;&lt;a name="line357"&gt;357&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $160, %bl&lt;br /&gt;&lt;a name="line358"&gt;358&lt;/a&gt; &lt;strong&gt; divb&lt;/strong&gt; %bl          # %eax/160, 商 al, 餘數 ah.&lt;br /&gt;&lt;a name="line359"&gt;359&lt;/a&gt; &lt;strong&gt; and&lt;/strong&gt; $0x0FF, %eax&lt;br /&gt;&lt;a name="line360"&gt;360&lt;/a&gt; &lt;strong&gt; inc&lt;/strong&gt; %eax         # ++ %eax&lt;br /&gt;&lt;a name="line361"&gt;361&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $160, %bl&lt;br /&gt;&lt;a name="line362"&gt;362&lt;/a&gt; &lt;strong&gt; mul&lt;/strong&gt; %bl&lt;br /&gt;&lt;a name="line363"&gt;363&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %eax, %edi&lt;br /&gt;&lt;a name="line364"&gt;364&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line365"&gt;365&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %eax&lt;br /&gt;&lt;a name="line366"&gt;366&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line367"&gt;367&lt;/a&gt; # DispReturn 結束---------------------------------------------------------&lt;br /&gt;&lt;a name="line368"&gt;368&lt;/a&gt;&lt;br /&gt;&lt;a name="line369"&gt;369&lt;/a&gt; /*&lt;br /&gt;&lt;a name="line370"&gt;370&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;kmain:&lt;/span&gt;&lt;br /&gt;&lt;a name="line371"&gt;371&lt;/a&gt; &lt;strong&gt;        pushl&lt;/strong&gt;   %ebp&lt;br /&gt;&lt;a name="line372"&gt;372&lt;/a&gt; &lt;strong&gt;        movl&lt;/strong&gt;    %esp, %ebp&lt;br /&gt;&lt;a name="line373"&gt;373&lt;/a&gt; &lt;strong&gt;        popl&lt;/strong&gt;    %ebp&lt;br /&gt;&lt;a name="line374"&gt;374&lt;/a&gt; &lt;strong&gt;        ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line375"&gt;375&lt;/a&gt;         .size   kmain, .-kmain&lt;br /&gt;&lt;a name="line376"&gt;376&lt;/a&gt;         .ident  &lt;span style="color:#008000;"&gt;"GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"&lt;/span&gt;&lt;br /&gt;&lt;a name="line377"&gt;377&lt;/a&gt; */&lt;br /&gt;&lt;a name="line378"&gt;378&lt;/a&gt; #        .section        .note.GNU-stack,&lt;span style="color:#008000;"&gt;""&lt;/span&gt;,@progbits&lt;br /&gt;&lt;a name="line379"&gt;379&lt;/a&gt;&lt;br /&gt;&lt;a name="line380"&gt;380&lt;/a&gt;&lt;br /&gt;&lt;a name="line381"&gt;381&lt;/a&gt; /* Get the length of 32-bit segment code. */&lt;br /&gt;&lt;a name="line382"&gt;382&lt;/a&gt; .set    SegCode32Len, . - LABEL_SEG_CODE32&lt;br /&gt;&lt;a name="line383"&gt;383&lt;/a&gt;&lt;br /&gt;&lt;a name="line384"&gt;384&lt;/a&gt; #[SECTION .data1]         &lt;span style="color:#444444;"&gt;; 資料段&lt;/span&gt;&lt;br /&gt;&lt;a name="line385"&gt;385&lt;/a&gt; #ALIGN   32&lt;br /&gt;&lt;a name="line386"&gt;386&lt;/a&gt; #[BITS   32]&lt;br /&gt;&lt;a name="line387"&gt;387&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DATA:&lt;/span&gt;&lt;br /&gt;&lt;a name="line388"&gt;388&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;SPValueInRealMode:&lt;/span&gt; .2byte 0x0&lt;br /&gt;&lt;a name="line389"&gt;389&lt;/a&gt; # string&lt;br /&gt;&lt;a name="line390"&gt;390&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;PMMessage:&lt;/span&gt;              .ascii      &lt;span style="color:#008000;"&gt;"In Protect Mode now. ^-^&lt;span style="color:#77dd77;"&gt;\0&lt;/span&gt;"&lt;/span&gt;   # 在保護模式中顯示&lt;br /&gt;&lt;a name="line391"&gt;391&lt;/a&gt; .set    OffsetPMMessage, (PMMessage - LABEL_DATA)&lt;br /&gt;&lt;a name="line392"&gt;392&lt;/a&gt; #StrTest:                .ascii &lt;span style="color:#008000;"&gt;"B&lt;span style="color:#77dd77;"&gt;\0&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt;&lt;a name="line393"&gt;393&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;StrTest:&lt;/span&gt;                .ascii &lt;span style="color:#008000;"&gt;"ABCDEFGHIJKLMNOPQRSTUVWXYZ&lt;span style="color:#77dd77;"&gt;\0&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt;&lt;a name="line394"&gt;394&lt;/a&gt; #OffsetStrTest           equ     StrTest - $$&lt;br /&gt;&lt;a name="line395"&gt;395&lt;/a&gt; .set OffsetStrTest , (StrTest - LABEL_DATA)&lt;br /&gt;&lt;a name="line396"&gt;396&lt;/a&gt; #DataLen                 equ     $ - LABEL_DATA&lt;br /&gt;&lt;a name="line397"&gt;397&lt;/a&gt; .set DataLen, .  - LABEL_DATA&lt;br /&gt;&lt;a name="line398"&gt;398&lt;/a&gt; /* 32-bit global stack segment. */&lt;br /&gt;&lt;a name="line399"&gt;399&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_STACK:&lt;/span&gt;&lt;br /&gt;&lt;a name="line400"&gt;400&lt;/a&gt; .space  512, 0&lt;br /&gt;&lt;a name="line401"&gt;401&lt;/a&gt; .set    TopOfStack, (. - LABEL_STACK - 1)&lt;br /&gt;&lt;a name="line402"&gt;402&lt;/a&gt;&lt;br /&gt;&lt;a name="line403"&gt;403&lt;/a&gt; # END of [SECTION .data1]&lt;br /&gt;&lt;a name="line404"&gt;404&lt;/a&gt;&lt;br /&gt;&lt;a name="line405"&gt;405&lt;/a&gt;&lt;br /&gt;&lt;a name="line406"&gt;406&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_SEG_CODE16:&lt;/span&gt;&lt;br /&gt;&lt;a name="line407"&gt;407&lt;/a&gt; .code16&lt;br /&gt;&lt;a name="line408"&gt;408&lt;/a&gt;     #jmp     .&lt;br /&gt;&lt;a name="line409"&gt;409&lt;/a&gt;         # back to real mode&lt;br /&gt;&lt;a name="line410"&gt;410&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     $SelectorNormal, %ax&lt;br /&gt;&lt;a name="line411"&gt;411&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ds&lt;br /&gt;&lt;a name="line412"&gt;412&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line413"&gt;413&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %fs&lt;br /&gt;&lt;a name="line414"&gt;414&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %gs&lt;br /&gt;&lt;a name="line415"&gt;415&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ss&lt;br /&gt;&lt;a name="line416"&gt;416&lt;/a&gt;&lt;br /&gt;&lt;a name="line417"&gt;417&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %cr0, %eax&lt;br /&gt;&lt;a name="line418"&gt;418&lt;/a&gt; &lt;strong&gt;        and&lt;/strong&gt;     $0b11111110, %al&lt;br /&gt;&lt;a name="line419"&gt;419&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %eax, %cr0&lt;br /&gt;&lt;a name="line420"&gt;420&lt;/a&gt;&lt;br /&gt;&lt;a name="line421"&gt;421&lt;/a&gt;&lt;br /&gt;&lt;a name="line422"&gt;422&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_GO_BACK_TO_REAL:&lt;/span&gt;&lt;br /&gt;&lt;a name="line423"&gt;423&lt;/a&gt; #.2byte 0xea66&lt;br /&gt;&lt;a name="line424"&gt;424&lt;/a&gt; #.4byte 0x00000000&lt;br /&gt;&lt;a name="line425"&gt;425&lt;/a&gt; #.2byte LABEL_REAL_ENTRY&lt;br /&gt;&lt;a name="line426"&gt;426&lt;/a&gt; &lt;strong&gt;    jmp&lt;/strong&gt;     $0, $LABEL_REAL_ENTRY      # 段位址會在程序開始處被設置成正確的值&lt;br /&gt;&lt;a name="line427"&gt;427&lt;/a&gt;&lt;br /&gt;&lt;a name="line428"&gt;428&lt;/a&gt;&lt;br /&gt;&lt;a name="line429"&gt;429&lt;/a&gt; .set Code16Len, . - LABEL_SEG_CODE16&lt;br /&gt;&lt;a name="line430"&gt;430&lt;/a&gt;&lt;br /&gt;&lt;a name="line431"&gt;431&lt;/a&gt;&lt;br /&gt;&lt;a name="line432"&gt;432&lt;/a&gt; &lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-8523352836121030475?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/8523352836121030475/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=8523352836121030475' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/8523352836121030475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/8523352836121030475'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/x86-page-table-test.html' title='x86 page table test (0)'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-8525073717532266089</id><published>2012-01-01T20:33:00.006+08:00</published><updated>2012-01-02T16:00:25.688+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='write_os'/><title type='text'>x86: from ring0 to ring3, then enter to ring0</title><content type='html'>終於來到這裡了, 從 ring0 -&amp;gt; ring3 -&amp;gt; ring0, 藉由 call gate 的使用, 慢慢的將權限切換完成了。補上&lt;b&gt;杨文博&lt;/b&gt;沒有的部份, 這段程式碼依照&lt;b&gt;于渊&lt;/b&gt;的版本, 最後會切回 dos/real mode, 並回到 dos prompt。&lt;br /&gt;&lt;br /&gt;學習心得, 有三步驟:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;單純的使用 call gate , &lt;/li&gt;&lt;li&gt;切換到 ring3, &lt;/li&gt;&lt;li&gt;使用步驟一的 call gate 切回到 ring0&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;後面的每一步都會使用前面的程式碼。若要切回 dos/real mode, 還需要使用 ldt, 這算是第零步驟吧！照例, 程式碼的解釋就請參考&lt;a href="http://descent-incoming.blogspot.com/2010/03/blog-post.html"&gt;杨文博&lt;/a&gt;的電子書。&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(68, 68, 255);"&gt;&lt;a name="line289"&gt;289&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SELECT_TSS), %ax    /* Load TSS to TR register */&lt;br /&gt;&lt;a name="line290"&gt;290&lt;/a&gt; &lt;strong&gt;  ltr&lt;/strong&gt; %ax&lt;/span&gt;&lt;/p&gt;ltr 指令用來載入一個 segment selector (指到一個 TSS)。ring3 -&amp;gt; ring0 時, 需要用到這個資料結構。&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;cg_r3_to_r0.S&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt;  1&lt;/a&gt; &lt;span style="color:4444FF;"&gt;/*&lt;br /&gt;&lt;a name="line2"&gt;  2&lt;/a&gt; &lt;strong&gt;   ref&lt;/strong&gt;: Orange'S：一个操作系统的实现&lt;br /&gt;&lt;a name="line3"&gt;  3&lt;/a&gt; &lt;strong&gt;   practice&lt;/strong&gt; enter to ring3.&lt;br /&gt;&lt;a name="line4"&gt;  4&lt;/a&gt;  */&lt;br /&gt;&lt;a name="line5"&gt;  5&lt;/a&gt; /* chapter3/1/loader.S&lt;br /&gt;&lt;a name="line6"&gt;  6&lt;/a&gt;&lt;br /&gt;&lt;a name="line7"&gt;  7&lt;/a&gt; &lt;strong&gt;   Author&lt;/strong&gt;: Wenbo Yang &amp;lt;solrex@gmail.com&amp;gt; &amp;lt;http://solrex.cn&amp;gt;&lt;br /&gt;&lt;a name="line8"&gt;  8&lt;/a&gt;&lt;br /&gt;&lt;a name="line9"&gt;  9&lt;/a&gt; &lt;strong&gt;   This&lt;/strong&gt; file is part of the source code of book &lt;span style="color:#008000;"&gt;"Write Your Own OS with Free&lt;br /&gt;&lt;a name="line10"&gt; 10&lt;/a&gt;    and Open Source Software"&lt;/span&gt;. Homepage @ &amp;lt;http://share.solrex.cn/WriteOS/&amp;gt;.&lt;br /&gt;&lt;a name="line11"&gt; 11&lt;/a&gt;&lt;br /&gt;&lt;a name="line12"&gt; 12&lt;/a&gt; &lt;strong&gt;   This&lt;/strong&gt; file is licensed under the GNU General Public License&lt;span style="color:#444444;"&gt;; either&lt;/span&gt;&lt;br /&gt;&lt;a name="line13"&gt; 13&lt;/a&gt; &lt;strong&gt;   version&lt;/strong&gt; 3 of the License, or (at your option) any later version.&lt;br /&gt;&lt;a name="line14"&gt; 14&lt;/a&gt; */&lt;br /&gt;&lt;a name="line15"&gt; 15&lt;/a&gt; /*&lt;br /&gt;&lt;a name="line16"&gt; 16&lt;/a&gt;  * call gate: r3 -&amp;gt; r0&lt;br /&gt;&lt;a name="line17"&gt; 17&lt;/a&gt;  */&lt;br /&gt;&lt;a name="line18"&gt; 18&lt;/a&gt;&lt;br /&gt;&lt;a name="line19"&gt; 19&lt;/a&gt; #include &lt;span style="color:#008000;"&gt;"pm.h"&lt;/span&gt;&lt;br /&gt;&lt;a name="line20"&gt; 20&lt;/a&gt;&lt;br /&gt;&lt;a name="line21"&gt; 21&lt;/a&gt; #define video_addr_offset (video_addr-LABEL_DATA)&lt;br /&gt;&lt;a name="line22"&gt; 22&lt;/a&gt;&lt;br /&gt;&lt;a name="line23"&gt; 23&lt;/a&gt; .code16&lt;br /&gt;&lt;a name="line24"&gt; 24&lt;/a&gt; .text&lt;br /&gt;&lt;a name="line25"&gt; 25&lt;/a&gt; &lt;strong&gt;    jmp&lt;/strong&gt; LABEL_BEGIN     /* jump over the .data section. */&lt;br /&gt;&lt;a name="line26"&gt; 26&lt;/a&gt;&lt;br /&gt;&lt;a name="line27"&gt; 27&lt;/a&gt; /* NOTE! Wenbo-20080512: Actually here we put the normal .data section into&lt;br /&gt;&lt;a name="line28"&gt; 28&lt;/a&gt; &lt;strong&gt;   the&lt;/strong&gt; .code section. For application SW, it is not allowed. However, we are&lt;br /&gt;&lt;a name="line29"&gt; 29&lt;/a&gt; &lt;strong&gt;   writing&lt;/strong&gt; an OS. That is OK. Because there is no OS to complain about&lt;br /&gt;&lt;a name="line30"&gt; 30&lt;/a&gt; &lt;strong&gt;   that&lt;/strong&gt; behavior. :) */&lt;br /&gt;&lt;a name="line31"&gt; 31&lt;/a&gt;&lt;br /&gt;&lt;a name="line32"&gt; 32&lt;/a&gt; /* Global Descriptor Table */&lt;br /&gt;&lt;a name="line33"&gt; 33&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_GDT:&lt;/span&gt;          Descriptor  0,                        0, 0&lt;br /&gt;&lt;a name="line34"&gt; 34&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_NORMAL:&lt;/span&gt;  Descriptor  0,         0xffff, DA_DRW    # Normal descriptor is for back to real mode.&lt;br /&gt;&lt;a name="line35"&gt; 35&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_CODE32:&lt;/span&gt;  Descriptor  0,       (SegCode32Len - 1), (DA_C + DA_32)&lt;br /&gt;&lt;a name="line36"&gt; 36&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_CODE16:&lt;/span&gt;  Descriptor    0,         0xffff, DA_C      # 非一致程式碼段, 16&lt;br /&gt;&lt;a name="line37"&gt; 37&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_DATA:&lt;/span&gt;   Descriptor    0,      (DataLen-1), DA_DRW    # Data&lt;br /&gt;&lt;a name="line38"&gt; 38&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_STACK:&lt;/span&gt;  Descriptor    0,     TopOfStack, DA_DRWA+DA_32 # Stack, 32 位&lt;br /&gt;&lt;a name="line39"&gt; 39&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_TEST:&lt;/span&gt; Descriptor 0x500000, 0xffff, DA_DRW&lt;br /&gt;&lt;a name="line40"&gt; 40&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_LDT:&lt;/span&gt; Descriptor 0, (LDT_LEN-1), DA_LDT&lt;br /&gt;&lt;a name="line41"&gt; 41&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_VIDEO:&lt;/span&gt;   Descriptor  0xB8000, 0xffff, (DA_DRW+DA_DPL3)&lt;br /&gt;&lt;a name="line42"&gt; 42&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_CODECG:&lt;/span&gt;  Descriptor  0, (SEG_CODE_CG_LEN - 1), (DA_C + DA_32)&lt;br /&gt;&lt;a name="line43"&gt; 43&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_CODER3:&lt;/span&gt;  Descriptor  0, (SEG_CODER3_LEN - 1), (DA_C + DA_32 + DA_DPL3)&lt;br /&gt;&lt;a name="line44"&gt; 44&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_STACKR3:&lt;/span&gt; Descriptor  0, (TopOfStackR3 - 1), (DA_DRWA + DA_32 + DA_DPL3)&lt;br /&gt;&lt;a name="line45"&gt; 45&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_TSS:&lt;/span&gt; Descriptor  0, (TSS_LEN - 1), DA_386TSS&lt;br /&gt;&lt;a name="line46"&gt; 46&lt;/a&gt;&lt;br /&gt;&lt;a name="line47"&gt; 47&lt;/a&gt; # Gates Descriptor&lt;br /&gt;&lt;a name="line48"&gt; 48&lt;/a&gt; #LABEL_CG_TEST:   Gate  SELECT_CODE_CG, 0, 0xffff, (DA_386CGate + DA_DPL0)&lt;br /&gt;&lt;a name="line49"&gt; 49&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_CG_TEST:&lt;/span&gt;   Gate  SELECT_CODE_CG, 0, 0xffff, (DA_386CGate + DA_DPL3)&lt;br /&gt;&lt;a name="line50"&gt; 50&lt;/a&gt;&lt;br /&gt;&lt;a name="line51"&gt; 51&lt;/a&gt; .set GdtLen, (. - LABEL_GDT)  /* GDT Length */&lt;br /&gt;&lt;a name="line52"&gt; 52&lt;/a&gt;&lt;br /&gt;&lt;a name="line53"&gt; 53&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;GdtPtr:&lt;/span&gt; .2byte  (GdtLen - 1)  /* GDT Limit */&lt;br /&gt;&lt;a name="line54"&gt; 54&lt;/a&gt;         .4byte  0             /* GDT Base */&lt;br /&gt;&lt;a name="line55"&gt; 55&lt;/a&gt;&lt;br /&gt;&lt;a name="line56"&gt; 56&lt;/a&gt; /* GDT Selector */&lt;br /&gt;&lt;a name="line57"&gt; 57&lt;/a&gt; .set SelectorNormal, (LABEL_DESC_NORMAL - LABEL_GDT)&lt;br /&gt;&lt;a name="line58"&gt; 58&lt;/a&gt; .set SelectorCode32, (LABEL_DESC_CODE32 - LABEL_GDT)&lt;br /&gt;&lt;a name="line59"&gt; 59&lt;/a&gt; .set SelectorCode16, (LABEL_DESC_CODE16 - LABEL_GDT)&lt;br /&gt;&lt;a name="line60"&gt; 60&lt;/a&gt; .set SelectorData, (LABEL_DESC_DATA         - LABEL_GDT)&lt;br /&gt;&lt;a name="line61"&gt; 61&lt;/a&gt; .set SelectorStack, (LABEL_DESC_STACK        - LABEL_GDT)&lt;br /&gt;&lt;a name="line62"&gt; 62&lt;/a&gt; .set SelectorTest, (LABEL_DESC_TEST         - LABEL_GDT)&lt;br /&gt;&lt;a name="line63"&gt; 63&lt;/a&gt; .set SelectorLDT, (LABEL_DESC_LDT         - LABEL_GDT)&lt;br /&gt;&lt;a name="line64"&gt; 64&lt;/a&gt; .set SelectorVideo,  (LABEL_DESC_VIDEO  - LABEL_GDT)&lt;br /&gt;&lt;a name="line65"&gt; 65&lt;/a&gt; .set SELECT_CODE_CG,  (LABEL_DESC_CODECG  - LABEL_GDT)&lt;br /&gt;&lt;a name="line66"&gt; 66&lt;/a&gt; .set SELECT_CODER3,  (LABEL_DESC_CODER3 - LABEL_GDT + SA_RPL3)&lt;br /&gt;&lt;a name="line67"&gt; 67&lt;/a&gt; .set SELECT_STACKR3,  (LABEL_DESC_STACKR3 - LABEL_GDT + SA_RPL3)&lt;br /&gt;&lt;a name="line68"&gt; 68&lt;/a&gt; .set SELECT_CG_TEST,  (LABEL_CG_TEST - LABEL_GDT + SA_RPL3)&lt;br /&gt;&lt;a name="line69"&gt; 69&lt;/a&gt; .set SELECT_TSS,  (LABEL_DESC_TSS - LABEL_GDT)&lt;br /&gt;&lt;a name="line70"&gt; 70&lt;/a&gt;&lt;br /&gt;&lt;a name="line71"&gt; 71&lt;/a&gt; # LDT&lt;br /&gt;&lt;a name="line72"&gt; 72&lt;/a&gt;&lt;br /&gt;&lt;a name="line73"&gt; 73&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_LDT:&lt;/span&gt;&lt;br /&gt;&lt;a name="line74"&gt; 74&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_LDT_DESC_CODEA:&lt;/span&gt; Descriptor 0, (CodeALen - 1), (DA_C + DA_32) # Code, 32 位&lt;br /&gt;&lt;a name="line75"&gt; 75&lt;/a&gt; .set LDT_LEN, (. - LABEL_LDT)  /* LDT Length */&lt;br /&gt;&lt;a name="line76"&gt; 76&lt;/a&gt;&lt;br /&gt;&lt;a name="line77"&gt; 77&lt;/a&gt; /* LDT Selector (TI flag set)*/&lt;br /&gt;&lt;a name="line78"&gt; 78&lt;/a&gt; .set    SelectorLDTCodeA, (LABEL_LDT_DESC_CODEA - LABEL_LDT + SA_TIL)&lt;br /&gt;&lt;a name="line79"&gt; 79&lt;/a&gt;&lt;br /&gt;&lt;a name="line80"&gt; 80&lt;/a&gt;&lt;br /&gt;&lt;a name="line81"&gt; 81&lt;/a&gt; /* Program starts here. */&lt;br /&gt;&lt;a name="line82"&gt; 82&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_BEGIN:&lt;/span&gt;&lt;br /&gt;&lt;a name="line83"&gt; 83&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax    /* Move code segment address(CS) to data segment */&lt;br /&gt;&lt;a name="line84"&gt; 84&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %ds    /* register(DS), ES and SS. Because we have      */&lt;br /&gt;&lt;a name="line85"&gt; 85&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %es    /* embedded .data section into .code section in  */&lt;br /&gt;&lt;a name="line86"&gt; 86&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %ss    /* the start(mentioned in the NOTE above).       */&lt;br /&gt;&lt;a name="line87"&gt; 87&lt;/a&gt;&lt;br /&gt;&lt;a name="line88"&gt; 88&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;     $0x100, %sp&lt;br /&gt;&lt;a name="line89"&gt; 89&lt;/a&gt; &lt;strong&gt;    nop&lt;/strong&gt;&lt;br /&gt;&lt;a name="line90"&gt; 90&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt; %ax, (LABEL_GO_BACK_TO_REAL+3) # modify segment value, indexed memory mode, ref  professional aeesmbly language p 102.&lt;br /&gt;&lt;a name="line91"&gt; 91&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SPValueInRealMode), %sp&lt;br /&gt;&lt;a name="line92"&gt; 92&lt;/a&gt;&lt;br /&gt;&lt;a name="line93"&gt; 93&lt;/a&gt;     /* Initialize 16-bits code segment descriptor. */&lt;br /&gt;&lt;a name="line94"&gt; 94&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line95"&gt; 95&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line96"&gt; 96&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line97"&gt; 97&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_SEG_CODE16), %eax&lt;br /&gt;&lt;a name="line98"&gt; 98&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_CODE16 + 2)&lt;br /&gt;&lt;a name="line99"&gt; 99&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line100"&gt;100&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_CODE16 + 4)&lt;br /&gt;&lt;a name="line101"&gt;101&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_CODE16 + 7)&lt;br /&gt;&lt;a name="line102"&gt;102&lt;/a&gt;&lt;br /&gt;&lt;a name="line103"&gt;103&lt;/a&gt;     /* Initialize 32-bits code segment descriptor. */&lt;br /&gt;&lt;a name="line104"&gt;104&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line105"&gt;105&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line106"&gt;106&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line107"&gt;107&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_SEG_CODE32), %eax&lt;br /&gt;&lt;a name="line108"&gt;108&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_CODE32 + 2)&lt;br /&gt;&lt;a name="line109"&gt;109&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line110"&gt;110&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_CODE32 + 4)&lt;br /&gt;&lt;a name="line111"&gt;111&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_CODE32 + 7)&lt;br /&gt;&lt;a name="line112"&gt;112&lt;/a&gt;&lt;br /&gt;&lt;a name="line113"&gt;113&lt;/a&gt;&lt;br /&gt;&lt;a name="line114"&gt;114&lt;/a&gt;     # Initialize CODER3 descriptor&lt;br /&gt;&lt;a name="line115"&gt;115&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line116"&gt;116&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line117"&gt;117&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line118"&gt;118&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_SEG_CODER3), %eax&lt;br /&gt;&lt;a name="line119"&gt;119&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_CODER3 + 2)&lt;br /&gt;&lt;a name="line120"&gt;120&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line121"&gt;121&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_CODER3 + 4)&lt;br /&gt;&lt;a name="line122"&gt;122&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_CODER3 + 7)&lt;br /&gt;&lt;a name="line123"&gt;123&lt;/a&gt;&lt;br /&gt;&lt;a name="line124"&gt;124&lt;/a&gt;     # Initialize STACK R3 descriptor&lt;br /&gt;&lt;a name="line125"&gt;125&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line126"&gt;126&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line127"&gt;127&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line128"&gt;128&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_STACKR3), %eax&lt;br /&gt;&lt;a name="line129"&gt;129&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_STACKR3 + 2)&lt;br /&gt;&lt;a name="line130"&gt;130&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line131"&gt;131&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_STACKR3 + 4)&lt;br /&gt;&lt;a name="line132"&gt;132&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_STACKR3 + 7)&lt;br /&gt;&lt;a name="line133"&gt;133&lt;/a&gt;&lt;br /&gt;&lt;a name="line134"&gt;134&lt;/a&gt;&lt;br /&gt;&lt;a name="line135"&gt;135&lt;/a&gt;     /* Initialize call gate code segment descriptor. */&lt;br /&gt;&lt;a name="line136"&gt;136&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line137"&gt;137&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line138"&gt;138&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line139"&gt;139&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_CODE_CG), %eax&lt;br /&gt;&lt;a name="line140"&gt;140&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_CODECG + 2)&lt;br /&gt;&lt;a name="line141"&gt;141&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line142"&gt;142&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_CODECG + 4)&lt;br /&gt;&lt;a name="line143"&gt;143&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_CODECG + 7)&lt;br /&gt;&lt;a name="line144"&gt;144&lt;/a&gt;&lt;br /&gt;&lt;a name="line145"&gt;145&lt;/a&gt;  # initialize data segment descriptor&lt;br /&gt;&lt;a name="line146"&gt;146&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %eax, %eax&lt;br /&gt;&lt;a name="line147"&gt;147&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ds, %ax&lt;br /&gt;&lt;a name="line148"&gt;148&lt;/a&gt; &lt;strong&gt; shl&lt;/strong&gt; $4, %eax&lt;br /&gt;&lt;a name="line149"&gt;149&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $(LABEL_DATA), %eax&lt;br /&gt;&lt;a name="line150"&gt;150&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, (LABEL_DESC_DATA + 2)&lt;br /&gt;&lt;a name="line151"&gt;151&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $16, %eax&lt;br /&gt;&lt;a name="line152"&gt;152&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, (LABEL_DESC_DATA + 4)&lt;br /&gt;&lt;a name="line153"&gt;153&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %ah, (LABEL_DESC_DATA + 7)&lt;br /&gt;&lt;a name="line154"&gt;154&lt;/a&gt;&lt;br /&gt;&lt;a name="line155"&gt;155&lt;/a&gt;  # initialize stack segment descriptor&lt;br /&gt;&lt;a name="line156"&gt;156&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %eax, %eax&lt;br /&gt;&lt;a name="line157"&gt;157&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ds, %ax&lt;br /&gt;&lt;a name="line158"&gt;158&lt;/a&gt; &lt;strong&gt; shl&lt;/strong&gt; $4, %eax&lt;br /&gt;&lt;a name="line159"&gt;159&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $(LABEL_STACK), %eax&lt;br /&gt;&lt;a name="line160"&gt;160&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, (LABEL_DESC_STACK + 2)&lt;br /&gt;&lt;a name="line161"&gt;161&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $16, %eax&lt;br /&gt;&lt;a name="line162"&gt;162&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, (LABEL_DESC_STACK + 4)&lt;br /&gt;&lt;a name="line163"&gt;163&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %ah, (LABEL_DESC_STACK + 7)&lt;br /&gt;&lt;a name="line164"&gt;164&lt;/a&gt;&lt;br /&gt;&lt;a name="line165"&gt;165&lt;/a&gt;     /* Initialize TSS GDT. */&lt;br /&gt;&lt;a name="line166"&gt;166&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %eax, %eax&lt;br /&gt;&lt;a name="line167"&gt;167&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ds, %ax&lt;br /&gt;&lt;a name="line168"&gt;168&lt;/a&gt; &lt;strong&gt; shl&lt;/strong&gt; $4, %eax&lt;br /&gt;&lt;a name="line169"&gt;169&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $(LABEL_TSS), %eax&lt;br /&gt;&lt;a name="line170"&gt;170&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, (LABEL_DESC_TSS + 2)&lt;br /&gt;&lt;a name="line171"&gt;171&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $16, %eax&lt;br /&gt;&lt;a name="line172"&gt;172&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, (LABEL_DESC_TSS + 4)&lt;br /&gt;&lt;a name="line173"&gt;173&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %ah, (LABEL_DESC_TSS + 7)&lt;br /&gt;&lt;a name="line174"&gt;174&lt;/a&gt;&lt;br /&gt;&lt;a name="line175"&gt;175&lt;/a&gt;     /* Initialize LDT descriptor in GDT. */&lt;br /&gt;&lt;a name="line176"&gt;176&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %eax, %eax&lt;br /&gt;&lt;a name="line177"&gt;177&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ds, %ax&lt;br /&gt;&lt;a name="line178"&gt;178&lt;/a&gt; &lt;strong&gt; shl&lt;/strong&gt; $4, %eax&lt;br /&gt;&lt;a name="line179"&gt;179&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $(LABEL_LDT), %eax&lt;br /&gt;&lt;a name="line180"&gt;180&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, (LABEL_DESC_LDT + 2)&lt;br /&gt;&lt;a name="line181"&gt;181&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $16, %eax&lt;br /&gt;&lt;a name="line182"&gt;182&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, (LABEL_DESC_LDT + 4)&lt;br /&gt;&lt;a name="line183"&gt;183&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %ah, (LABEL_DESC_LDT + 7)&lt;br /&gt;&lt;a name="line184"&gt;184&lt;/a&gt;&lt;br /&gt;&lt;a name="line185"&gt;185&lt;/a&gt;    /* Initialize code A descriptor in LDT. */&lt;br /&gt;&lt;a name="line186"&gt;186&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %eax, %eax&lt;br /&gt;&lt;a name="line187"&gt;187&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ds, %ax&lt;br /&gt;&lt;a name="line188"&gt;188&lt;/a&gt; &lt;strong&gt; shl&lt;/strong&gt; $4, %eax&lt;br /&gt;&lt;a name="line189"&gt;189&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $(LABEL_CODE_A), %eax&lt;br /&gt;&lt;a name="line190"&gt;190&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, (LABEL_LDT_DESC_CODEA + 2)&lt;br /&gt;&lt;a name="line191"&gt;191&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $16, %eax&lt;br /&gt;&lt;a name="line192"&gt;192&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, (LABEL_LDT_DESC_CODEA + 4)&lt;br /&gt;&lt;a name="line193"&gt;193&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %ah, (LABEL_LDT_DESC_CODEA + 7)&lt;br /&gt;&lt;a name="line194"&gt;194&lt;/a&gt;&lt;br /&gt;&lt;a name="line195"&gt;195&lt;/a&gt;&lt;br /&gt;&lt;a name="line196"&gt;196&lt;/a&gt;     /* Prepared for loading GDTR */&lt;br /&gt;&lt;a name="line197"&gt;197&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line198"&gt;198&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ds, %ax&lt;br /&gt;&lt;a name="line199"&gt;199&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line200"&gt;200&lt;/a&gt; &lt;strong&gt;    add&lt;/strong&gt;     $(LABEL_GDT), %eax      /* eax &amp;lt;- gdt base*/&lt;br /&gt;&lt;a name="line201"&gt;201&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    %eax, (GdtPtr + 2)&lt;br /&gt;&lt;a name="line202"&gt;202&lt;/a&gt;&lt;br /&gt;&lt;a name="line203"&gt;203&lt;/a&gt;     /* Load GDTR(Global Descriptor Table Register) */&lt;br /&gt;&lt;a name="line204"&gt;204&lt;/a&gt; &lt;strong&gt;    lgdtw&lt;/strong&gt;   GdtPtr&lt;br /&gt;&lt;a name="line205"&gt;205&lt;/a&gt;&lt;br /&gt;&lt;a name="line206"&gt;206&lt;/a&gt;     /* Clear Interrupt Flags */&lt;br /&gt;&lt;a name="line207"&gt;207&lt;/a&gt; &lt;strong&gt;    cli&lt;/strong&gt;&lt;br /&gt;&lt;a name="line208"&gt;208&lt;/a&gt;&lt;br /&gt;&lt;a name="line209"&gt;209&lt;/a&gt;     /* Open A20 line. */&lt;br /&gt;&lt;a name="line210"&gt;210&lt;/a&gt; &lt;strong&gt;    inb&lt;/strong&gt;     $0x92, %al&lt;br /&gt;&lt;a name="line211"&gt;211&lt;/a&gt; &lt;strong&gt;    orb&lt;/strong&gt;     $0b00000010, %al&lt;br /&gt;&lt;a name="line212"&gt;212&lt;/a&gt; &lt;strong&gt;    outb&lt;/strong&gt;    %al, $0x92&lt;br /&gt;&lt;a name="line213"&gt;213&lt;/a&gt;&lt;br /&gt;&lt;a name="line214"&gt;214&lt;/a&gt;     /* Enable protect mode, PE bit of CR0. */&lt;br /&gt;&lt;a name="line215"&gt;215&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    %cr0, %eax&lt;br /&gt;&lt;a name="line216"&gt;216&lt;/a&gt; &lt;strong&gt;    orl&lt;/strong&gt;     $1, %eax&lt;br /&gt;&lt;a name="line217"&gt;217&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    %eax, %cr0&lt;br /&gt;&lt;a name="line218"&gt;218&lt;/a&gt;&lt;br /&gt;&lt;a name="line219"&gt;219&lt;/a&gt;     /* Mixed-Size Jump. */&lt;br /&gt;&lt;a name="line220"&gt;220&lt;/a&gt; &lt;strong&gt;    ljmp&lt;/strong&gt; $SelectorCode32, $0       /* Thanks to earthengine@gmail, I got */&lt;br /&gt;&lt;a name="line221"&gt;221&lt;/a&gt;                                     /* this mixed-size jump insn of gas.  */&lt;br /&gt;&lt;a name="line222"&gt;222&lt;/a&gt;                                     /* this calls far jump (ptr 16:32) in intel manual) */&lt;br /&gt;&lt;a name="line223"&gt;223&lt;/a&gt;&lt;br /&gt;&lt;a name="line224"&gt;224&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_REAL_ENTRY:&lt;/span&gt;               # 從保護模式跳回到實模式就到了這裡&lt;br /&gt;&lt;a name="line225"&gt;225&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %cx, %ax&lt;br /&gt;&lt;a name="line226"&gt;226&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ds&lt;br /&gt;&lt;a name="line227"&gt;227&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line228"&gt;228&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ss&lt;br /&gt;&lt;a name="line229"&gt;229&lt;/a&gt;&lt;br /&gt;&lt;a name="line230"&gt;230&lt;/a&gt;&lt;br /&gt;&lt;a name="line231"&gt;231&lt;/a&gt; &lt;strong&gt;        in&lt;/strong&gt;      $0x92, %al&lt;br /&gt;&lt;a name="line232"&gt;232&lt;/a&gt; &lt;strong&gt;        and&lt;/strong&gt;     $0b11111101, %al   #  close A20 line&lt;br /&gt;&lt;a name="line233"&gt;233&lt;/a&gt; &lt;strong&gt;        out&lt;/strong&gt;     %al, $0x92&lt;br /&gt;&lt;a name="line234"&gt;234&lt;/a&gt;&lt;br /&gt;&lt;a name="line235"&gt;235&lt;/a&gt; &lt;strong&gt;        sti&lt;/strong&gt;                     # 開中斷&lt;br /&gt;&lt;a name="line236"&gt;236&lt;/a&gt;&lt;br /&gt;&lt;a name="line237"&gt;237&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     $0x4c00, %ax&lt;br /&gt;&lt;a name="line238"&gt;238&lt;/a&gt; &lt;strong&gt;        int&lt;/strong&gt;     $0x21             #  回到 DOS&lt;br /&gt;&lt;a name="line239"&gt;239&lt;/a&gt; # END of .code16&lt;br /&gt;&lt;a name="line240"&gt;240&lt;/a&gt;&lt;br /&gt;&lt;a name="line241"&gt;241&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_SEG_CODE32:&lt;/span&gt;&lt;br /&gt;&lt;a name="line242"&gt;242&lt;/a&gt; .code32&lt;br /&gt;&lt;a name="line243"&gt;243&lt;/a&gt;&lt;br /&gt;&lt;a name="line244"&gt;244&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(SelectorData), %ax&lt;br /&gt;&lt;a name="line245"&gt;245&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ax, %ds   # 資料段選擇子&lt;br /&gt;&lt;a name="line246"&gt;246&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(SelectorTest), %ax&lt;br /&gt;&lt;a name="line247"&gt;247&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ax, %es   # 測試段選擇子&lt;br /&gt;&lt;a name="line248"&gt;248&lt;/a&gt;&lt;br /&gt;&lt;a name="line249"&gt;249&lt;/a&gt;&lt;br /&gt;&lt;a name="line250"&gt;250&lt;/a&gt;&lt;br /&gt;&lt;a name="line251"&gt;251&lt;/a&gt;&lt;br /&gt;&lt;a name="line252"&gt;252&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line253"&gt;253&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %gs                /* Video segment selector(dest) */&lt;br /&gt;&lt;a name="line254"&gt;254&lt;/a&gt;&lt;br /&gt;&lt;a name="line255"&gt;255&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(SelectorStack), %ax&lt;br /&gt;&lt;a name="line256"&gt;256&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ax, %ss   # 堆疊段選擇子&lt;br /&gt;&lt;a name="line257"&gt;257&lt;/a&gt;&lt;br /&gt;&lt;a name="line258"&gt;258&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(TopOfStack), %esp&lt;br /&gt;&lt;a name="line259"&gt;259&lt;/a&gt;&lt;br /&gt;&lt;a name="line260"&gt;260&lt;/a&gt; /*&lt;br /&gt;&lt;a name="line261"&gt;261&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    $((80 * 10 + 0) * 2), %edi&lt;br /&gt;&lt;a name="line262"&gt;262&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    $0xC, %ah               # 0000: Black Back 1100: Red Front&lt;br /&gt;&lt;a name="line263"&gt;263&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    $'P', %al&lt;br /&gt;&lt;a name="line264"&gt;264&lt;/a&gt;&lt;br /&gt;&lt;a name="line265"&gt;265&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line266"&gt;266&lt;/a&gt; */&lt;br /&gt;&lt;a name="line267"&gt;267&lt;/a&gt;&lt;br /&gt;&lt;a name="line268"&gt;268&lt;/a&gt;  # print string &lt;span style="color:#008000;"&gt;"In Protect Mode now. ^-^"&lt;/span&gt;&lt;br /&gt;&lt;a name="line269"&gt;269&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $0x0c, %ah # 0000: 黑底    1100: 紅字&lt;br /&gt;&lt;a name="line270"&gt;270&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %esi, %esi&lt;br /&gt;&lt;a name="line271"&gt;271&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %edi, %edi&lt;br /&gt;&lt;a name="line272"&gt;272&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(OffsetPMMessage), %esi # data string offset&lt;br /&gt;&lt;a name="line273"&gt;273&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $((80 * 10 + 0) * 2), %edi # 目的資料偏移。螢幕第 10 行, 第 0 列。&lt;br /&gt;&lt;a name="line274"&gt;274&lt;/a&gt; &lt;strong&gt; cld&lt;/strong&gt; # Clear Direction Flag, ref: http://www.fermi.mn.it/linux/quarta/x86/cld.htm&lt;br /&gt;&lt;a name="line275"&gt;275&lt;/a&gt;             # After CLD is executed, string operations will increment the index&lt;br /&gt;&lt;a name="line276"&gt;276&lt;/a&gt;             # (SI and/or DI) that they use.&lt;br /&gt;&lt;a name="line277"&gt;277&lt;/a&gt; .1:&lt;br /&gt;&lt;a name="line278"&gt;278&lt;/a&gt; &lt;strong&gt; lodsb&lt;/strong&gt; # For legacy mode, Load byte at address DS:(E)SI into AL.&lt;br /&gt;&lt;a name="line279"&gt;279&lt;/a&gt;               # For 64-bit mode load byte at address (R)SI into AL.&lt;br /&gt;&lt;a name="line280"&gt;280&lt;/a&gt;               # ref: http://siyobik.info/main/reference/instruction/LODS%2FLODSB%2FLODSW%2FLODSD%2FLODSQ&lt;br /&gt;&lt;a name="line281"&gt;281&lt;/a&gt; &lt;strong&gt; test&lt;/strong&gt; %al, %al # result is 0, zf sets to 1.&lt;br /&gt;&lt;a name="line282"&gt;282&lt;/a&gt; &lt;strong&gt; jz&lt;/strong&gt; .2 # zf = 1 jump&lt;br /&gt;&lt;a name="line283"&gt;283&lt;/a&gt; # mov [gs:edi], ax&lt;br /&gt;&lt;a name="line284"&gt;284&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line285"&gt;285&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %edi&lt;br /&gt;&lt;a name="line286"&gt;286&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .1&lt;br /&gt;&lt;a name="line287"&gt;287&lt;/a&gt; .2: # 顯示完畢&lt;br /&gt;&lt;a name="line288"&gt;288&lt;/a&gt;&lt;br /&gt;&lt;a name="line289"&gt;289&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SELECT_TSS), %ax    /* Load TSS to TR register */&lt;br /&gt;&lt;a name="line290"&gt;290&lt;/a&gt; &lt;strong&gt;  ltr&lt;/strong&gt; %ax&lt;br /&gt;&lt;a name="line291"&gt;291&lt;/a&gt;&lt;br /&gt;&lt;a name="line292"&gt;292&lt;/a&gt; &lt;strong&gt;  pushl&lt;/strong&gt; $(SELECT_STACKR3)&lt;br /&gt;&lt;a name="line293"&gt;293&lt;/a&gt; &lt;strong&gt;  pushl&lt;/strong&gt; $(TopOfStackR3)&lt;br /&gt;&lt;a name="line294"&gt;294&lt;/a&gt; &lt;strong&gt;  pushl&lt;/strong&gt; $(SELECT_CODER3)&lt;br /&gt;&lt;a name="line295"&gt;295&lt;/a&gt; &lt;strong&gt;  pushl&lt;/strong&gt; $0&lt;br /&gt;&lt;a name="line296"&gt;296&lt;/a&gt; &lt;strong&gt;  lret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line297"&gt;297&lt;/a&gt;&lt;br /&gt;&lt;a name="line298"&gt;298&lt;/a&gt;   # call gate test&lt;br /&gt;&lt;a name="line299"&gt;299&lt;/a&gt;   #lcall $(SELECT_CG_TEST), $0&lt;br /&gt;&lt;a name="line300"&gt;300&lt;/a&gt;&lt;br /&gt;&lt;a name="line301"&gt;301&lt;/a&gt;   # the call gate setting selector&lt;br /&gt;&lt;a name="line302"&gt;302&lt;/a&gt;   #lcall $(SELECT_CODE_CG), $0&lt;br /&gt;&lt;a name="line303"&gt;303&lt;/a&gt;&lt;br /&gt;&lt;a name="line304"&gt;304&lt;/a&gt; #  mov $(SelectorLDT), %ax&lt;br /&gt;&lt;a name="line305"&gt;305&lt;/a&gt; #  lldt %ax&lt;br /&gt;&lt;a name="line306"&gt;306&lt;/a&gt; #  jmp $(SelectorLDTCodeA), $0&lt;br /&gt;&lt;a name="line307"&gt;307&lt;/a&gt;&lt;br /&gt;&lt;a name="line308"&gt;308&lt;/a&gt;&lt;br /&gt;&lt;a name="line309"&gt;309&lt;/a&gt; /*&lt;br /&gt;&lt;a name="line310"&gt;310&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $0, (video_addr_offset)&lt;br /&gt;&lt;a name="line311"&gt;311&lt;/a&gt; &lt;strong&gt;        movb&lt;/strong&gt; $0xb8, %al&lt;br /&gt;&lt;a name="line312"&gt;312&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAL_m&lt;br /&gt;&lt;a name="line313"&gt;313&lt;/a&gt;&lt;br /&gt;&lt;a name="line314"&gt;314&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $(80*(3-1)*2 + (2-1)*2), (video_addr_offset)&lt;br /&gt;&lt;a name="line315"&gt;315&lt;/a&gt; &lt;strong&gt;        movb&lt;/strong&gt; $0xc7, %al&lt;br /&gt;&lt;a name="line316"&gt;316&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAL_m&lt;br /&gt;&lt;a name="line317"&gt;317&lt;/a&gt;&lt;br /&gt;&lt;a name="line318"&gt;318&lt;/a&gt;  #call DispReturn&lt;br /&gt;&lt;a name="line319"&gt;319&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $160, (video_addr_offset)&lt;br /&gt;&lt;a name="line320"&gt;320&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line321"&gt;321&lt;/a&gt; &lt;strong&gt;        movb&lt;/strong&gt; $0xa9, %al&lt;br /&gt;&lt;a name="line322"&gt;322&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line323"&gt;323&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line324"&gt;324&lt;/a&gt; &lt;strong&gt;        movw&lt;/strong&gt; $0xabcd, %ax&lt;br /&gt;&lt;a name="line325"&gt;325&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAX&lt;br /&gt;&lt;a name="line326"&gt;326&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line327"&gt;327&lt;/a&gt; &lt;strong&gt;        movl&lt;/strong&gt; (video_addr_offset), %ax&lt;br /&gt;&lt;a name="line328"&gt;328&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAX&lt;br /&gt;&lt;a name="line329"&gt;329&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line330"&gt;330&lt;/a&gt;&lt;br /&gt;&lt;a name="line331"&gt;331&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $2, (video_addr_offset)&lt;br /&gt;&lt;a name="line332"&gt;332&lt;/a&gt; &lt;strong&gt;        movl&lt;/strong&gt; (video_addr_offset), %ax&lt;br /&gt;&lt;a name="line333"&gt;333&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAX&lt;br /&gt;&lt;a name="line334"&gt;334&lt;/a&gt;&lt;br /&gt;&lt;a name="line335"&gt;335&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; TestRead&lt;br /&gt;&lt;a name="line336"&gt;336&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; TestWrite&lt;br /&gt;&lt;a name="line337"&gt;337&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; TestRead&lt;br /&gt;&lt;a name="line338"&gt;338&lt;/a&gt; */&lt;br /&gt;&lt;a name="line339"&gt;339&lt;/a&gt;&lt;br /&gt;&lt;a name="line340"&gt;340&lt;/a&gt;    # ljmpl     $SelectorCode16,$0&lt;br /&gt;&lt;a name="line341"&gt;341&lt;/a&gt;     # jmpl     $SelectorCode16,$0 # it works&lt;br /&gt;&lt;a name="line342"&gt;342&lt;/a&gt;&lt;br /&gt;&lt;a name="line343"&gt;343&lt;/a&gt;&lt;br /&gt;&lt;a name="line344"&gt;344&lt;/a&gt;&lt;br /&gt;&lt;a name="line345"&gt;345&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line346"&gt;346&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;TestRead:&lt;/span&gt;&lt;br /&gt;&lt;a name="line347"&gt;347&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %esi, %esi&lt;br /&gt;&lt;a name="line348"&gt;348&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $8, %ecx&lt;br /&gt;&lt;a name="line349"&gt;349&lt;/a&gt; .loop:&lt;br /&gt;&lt;a name="line350"&gt;350&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %es:(%esi), %al&lt;br /&gt;&lt;a name="line351"&gt;351&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line352"&gt;352&lt;/a&gt; &lt;strong&gt; inc&lt;/strong&gt; %esi&lt;br /&gt;&lt;a name="line353"&gt;353&lt;/a&gt; &lt;strong&gt; loop&lt;/strong&gt; .loop&lt;br /&gt;&lt;a name="line354"&gt;354&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line355"&gt;355&lt;/a&gt;&lt;br /&gt;&lt;a name="line356"&gt;356&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line357"&gt;357&lt;/a&gt; # TestRead 結束-----------------------------------------------------------&lt;br /&gt;&lt;a name="line358"&gt;358&lt;/a&gt;&lt;br /&gt;&lt;a name="line359"&gt;359&lt;/a&gt;&lt;br /&gt;&lt;a name="line360"&gt;360&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line361"&gt;361&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;TestWrite:&lt;/span&gt;&lt;br /&gt;&lt;a name="line362"&gt;362&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %esi&lt;br /&gt;&lt;a name="line363"&gt;363&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %edi&lt;br /&gt;&lt;a name="line364"&gt;364&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %esi, %esi&lt;br /&gt;&lt;a name="line365"&gt;365&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %edi, %edi&lt;br /&gt;&lt;a name="line366"&gt;366&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(OffsetStrTest), %esi # data offset&lt;br /&gt;&lt;a name="line367"&gt;367&lt;/a&gt; &lt;strong&gt; cld&lt;/strong&gt; # Clear Direction Flag, ref: http://www.fermi.mn.it/linux/quarta/x86/cld.htm&lt;br /&gt;&lt;a name="line368"&gt;368&lt;/a&gt;             # After CLD is executed, string operations will increment the index&lt;br /&gt;&lt;a name="line369"&gt;369&lt;/a&gt;             # (SI and/or DI) that they use.&lt;br /&gt;&lt;a name="line370"&gt;370&lt;/a&gt; .6:&lt;br /&gt;&lt;a name="line371"&gt;371&lt;/a&gt; &lt;strong&gt; lodsb&lt;/strong&gt; # For legacy mode, Load byte at address DS:(E)SI into AL.&lt;br /&gt;&lt;a name="line372"&gt;372&lt;/a&gt;               # For 64-bit mode load byte at address (R)SI into AL.&lt;br /&gt;&lt;a name="line373"&gt;373&lt;/a&gt;               # ref: http://siyobik.info/main/reference/instruction/LODS%2FLODSB%2FLODSW%2FLODSD%2FLODSQ&lt;br /&gt;&lt;a name="line374"&gt;374&lt;/a&gt;&lt;br /&gt;&lt;a name="line375"&gt;375&lt;/a&gt; &lt;strong&gt; test&lt;/strong&gt; %al, %al&lt;br /&gt;&lt;a name="line376"&gt;376&lt;/a&gt; &lt;strong&gt; jz&lt;/strong&gt; .5 # zf = 1 jump&lt;br /&gt;&lt;a name="line377"&gt;377&lt;/a&gt; # mov [es:edi], al&lt;br /&gt;&lt;a name="line378"&gt;378&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %al, %es:(%edi)&lt;br /&gt;&lt;a name="line379"&gt;379&lt;/a&gt; &lt;strong&gt; inc&lt;/strong&gt; %edi&lt;br /&gt;&lt;a name="line380"&gt;380&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .6&lt;br /&gt;&lt;a name="line381"&gt;381&lt;/a&gt; .5:&lt;br /&gt;&lt;a name="line382"&gt;382&lt;/a&gt;&lt;br /&gt;&lt;a name="line383"&gt;383&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %edi&lt;br /&gt;&lt;a name="line384"&gt;384&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %esi&lt;br /&gt;&lt;a name="line385"&gt;385&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line386"&gt;386&lt;/a&gt; # TestWrite 結束----------------------------------------------------------&lt;br /&gt;&lt;a name="line387"&gt;387&lt;/a&gt;&lt;br /&gt;&lt;a name="line388"&gt;388&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;DispAX:&lt;/span&gt;&lt;br /&gt;&lt;a name="line389"&gt;389&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line390"&gt;390&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line391"&gt;391&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line392"&gt;392&lt;/a&gt;&lt;br /&gt;&lt;a name="line393"&gt;393&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, %dx&lt;br /&gt;&lt;a name="line394"&gt;394&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $8, %ax # ah -&amp;gt; al&lt;br /&gt;&lt;a name="line395"&gt;395&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $2, %ecx&lt;br /&gt;&lt;a name="line396"&gt;396&lt;/a&gt; .b:&lt;br /&gt;&lt;a name="line397"&gt;397&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAL_m&lt;br /&gt;&lt;a name="line398"&gt;398&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %dx, %ax&lt;br /&gt;&lt;a name="line399"&gt;399&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $4, (video_addr_offset)&lt;br /&gt;&lt;a name="line400"&gt;400&lt;/a&gt; # call DispAL_m&lt;br /&gt;&lt;a name="line401"&gt;401&lt;/a&gt; #   andw 0xff, %ax&lt;br /&gt;&lt;a name="line402"&gt;402&lt;/a&gt; &lt;strong&gt; loop&lt;/strong&gt; .b&lt;br /&gt;&lt;a name="line403"&gt;403&lt;/a&gt;&lt;br /&gt;&lt;a name="line404"&gt;404&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line405"&gt;405&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line406"&gt;406&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line407"&gt;407&lt;/a&gt;&lt;br /&gt;&lt;a name="line408"&gt;408&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line409"&gt;409&lt;/a&gt; # end DispAX&lt;br /&gt;&lt;a name="line410"&gt;410&lt;/a&gt;&lt;br /&gt;&lt;a name="line411"&gt;411&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line412"&gt;412&lt;/a&gt; # 顯示 AL 中的數字&lt;br /&gt;&lt;a name="line413"&gt;413&lt;/a&gt; # 默認地:&lt;br /&gt;&lt;a name="line414"&gt;414&lt;/a&gt; # 數字已經存在 AL 中&lt;br /&gt;&lt;a name="line415"&gt;415&lt;/a&gt; # edi 始終指向要顯示的下一個字元的位置&lt;br /&gt;&lt;a name="line416"&gt;416&lt;/a&gt; # 被改變的暫存器:&lt;br /&gt;&lt;a name="line417"&gt;417&lt;/a&gt; # ax, edi&lt;br /&gt;&lt;a name="line418"&gt;418&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line419"&gt;419&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;DispAL:&lt;/span&gt;&lt;br /&gt;&lt;a name="line420"&gt;420&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line421"&gt;421&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line422"&gt;422&lt;/a&gt;&lt;br /&gt;&lt;a name="line423"&gt;423&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $0x0c, %ah # 0000: 黑底    1100: 紅字&lt;br /&gt;&lt;a name="line424"&gt;424&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, %dl&lt;br /&gt;&lt;a name="line425"&gt;425&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $4, %al&lt;br /&gt;&lt;a name="line426"&gt;426&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $2, %ecx&lt;br /&gt;&lt;a name="line427"&gt;427&lt;/a&gt; .begin:&lt;br /&gt;&lt;a name="line428"&gt;428&lt;/a&gt; &lt;strong&gt; andb&lt;/strong&gt; $0x0f, %al&lt;br /&gt;&lt;a name="line429"&gt;429&lt;/a&gt; &lt;strong&gt; cmp&lt;/strong&gt; $9, %al&lt;br /&gt;&lt;a name="line430"&gt;430&lt;/a&gt; &lt;strong&gt; ja&lt;/strong&gt; .3          # cf=0, zf=0, above 9 (&amp;gt;9)&lt;br /&gt;&lt;a name="line431"&gt;431&lt;/a&gt;  #addb $'0', %al&lt;br /&gt;&lt;a name="line432"&gt;432&lt;/a&gt; &lt;strong&gt; addb&lt;/strong&gt; $0x30, %al&lt;br /&gt;&lt;a name="line433"&gt;433&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .4&lt;br /&gt;&lt;a name="line434"&gt;434&lt;/a&gt; .3:&lt;br /&gt;&lt;a name="line435"&gt;435&lt;/a&gt; &lt;strong&gt; sub&lt;/strong&gt; $0x0A, %al&lt;br /&gt;&lt;a name="line436"&gt;436&lt;/a&gt;  #add $'A', %al&lt;br /&gt;&lt;a name="line437"&gt;437&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $0x41, %al&lt;br /&gt;&lt;a name="line438"&gt;438&lt;/a&gt; .4:&lt;br /&gt;&lt;a name="line439"&gt;439&lt;/a&gt;  #mov [gs:edi], ax&lt;br /&gt;&lt;a name="line440"&gt;440&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line441"&gt;441&lt;/a&gt; # mov %ax, %gs:(video_addr_offset)&lt;br /&gt;&lt;a name="line442"&gt;442&lt;/a&gt;  #mov %ax, %gs:(0)&lt;br /&gt;&lt;a name="line443"&gt;443&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %edi&lt;br /&gt;&lt;a name="line444"&gt;444&lt;/a&gt;&lt;br /&gt;&lt;a name="line445"&gt;445&lt;/a&gt; # addl $2, (video_addr_offset)&lt;br /&gt;&lt;a name="line446"&gt;446&lt;/a&gt;&lt;br /&gt;&lt;a name="line447"&gt;447&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %dl, %al&lt;br /&gt;&lt;a name="line448"&gt;448&lt;/a&gt; &lt;strong&gt; loop&lt;/strong&gt; .begin&lt;br /&gt;&lt;a name="line449"&gt;449&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %edi&lt;br /&gt;&lt;a name="line450"&gt;450&lt;/a&gt;  #add $2, (video_addr_offset)&lt;br /&gt;&lt;a name="line451"&gt;451&lt;/a&gt;&lt;br /&gt;&lt;a name="line452"&gt;452&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line453"&gt;453&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line454"&gt;454&lt;/a&gt;&lt;br /&gt;&lt;a name="line455"&gt;455&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line456"&gt;456&lt;/a&gt; # DispAL 結束-------------------------------------------------------------&lt;br /&gt;&lt;a name="line457"&gt;457&lt;/a&gt;&lt;br /&gt;&lt;a name="line458"&gt;458&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;DispAL_m:&lt;/span&gt;&lt;br /&gt;&lt;a name="line459"&gt;459&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line460"&gt;460&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line461"&gt;461&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line462"&gt;462&lt;/a&gt;&lt;br /&gt;&lt;a name="line463"&gt;463&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; (video_addr_offset), %ebx&lt;br /&gt;&lt;a name="line464"&gt;464&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $0x0c, %ah # 0000: 黑底    1100: 紅字&lt;br /&gt;&lt;a name="line465"&gt;465&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, %dl&lt;br /&gt;&lt;a name="line466"&gt;466&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $4, %al&lt;br /&gt;&lt;a name="line467"&gt;467&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $2, %ecx&lt;br /&gt;&lt;a name="line468"&gt;468&lt;/a&gt; .begin_1:&lt;br /&gt;&lt;a name="line469"&gt;469&lt;/a&gt; &lt;strong&gt; andb&lt;/strong&gt; $0x0f, %al&lt;br /&gt;&lt;a name="line470"&gt;470&lt;/a&gt; &lt;strong&gt; cmp&lt;/strong&gt; $9, %al&lt;br /&gt;&lt;a name="line471"&gt;471&lt;/a&gt; &lt;strong&gt; ja&lt;/strong&gt; .31          # cf=0, zf=0, above 9 (&amp;gt;9)&lt;br /&gt;&lt;a name="line472"&gt;472&lt;/a&gt;  #addb $'0', %al&lt;br /&gt;&lt;a name="line473"&gt;473&lt;/a&gt; &lt;strong&gt; addb&lt;/strong&gt; $0x30, %al&lt;br /&gt;&lt;a name="line474"&gt;474&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .41&lt;br /&gt;&lt;a name="line475"&gt;475&lt;/a&gt; .31:&lt;br /&gt;&lt;a name="line476"&gt;476&lt;/a&gt; &lt;strong&gt; sub&lt;/strong&gt; $0x0A, %al&lt;br /&gt;&lt;a name="line477"&gt;477&lt;/a&gt;  #add $'A', %al&lt;br /&gt;&lt;a name="line478"&gt;478&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $0x41, %al&lt;br /&gt;&lt;a name="line479"&gt;479&lt;/a&gt; .41:&lt;br /&gt;&lt;a name="line480"&gt;480&lt;/a&gt;  #mov [gs:edi], ax&lt;br /&gt;&lt;a name="line481"&gt;481&lt;/a&gt;  #mov %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line482"&gt;482&lt;/a&gt; #if 0&lt;br /&gt;&lt;a name="line483"&gt;483&lt;/a&gt; &lt;strong&gt;        movw&lt;/strong&gt; (video_addr_offset), %ax&lt;br /&gt;&lt;a name="line484"&gt;484&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line485"&gt;485&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAX&lt;br /&gt;&lt;a name="line486"&gt;486&lt;/a&gt; #endif&lt;br /&gt;&lt;a name="line487"&gt;487&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, %gs:(%ebx)&lt;br /&gt;&lt;a name="line488"&gt;488&lt;/a&gt;  #mov %ax, %gs:(0)&lt;br /&gt;&lt;a name="line489"&gt;489&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %ebx&lt;br /&gt;&lt;a name="line490"&gt;490&lt;/a&gt;&lt;br /&gt;&lt;a name="line491"&gt;491&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %dl, %al&lt;br /&gt;&lt;a name="line492"&gt;492&lt;/a&gt; &lt;strong&gt; loop&lt;/strong&gt; .begin_1&lt;br /&gt;&lt;a name="line493"&gt;493&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $2, %ebx&lt;br /&gt;&lt;a name="line494"&gt;494&lt;/a&gt;&lt;br /&gt;&lt;a name="line495"&gt;495&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line496"&gt;496&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line497"&gt;497&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line498"&gt;498&lt;/a&gt;&lt;br /&gt;&lt;a name="line499"&gt;499&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line500"&gt;500&lt;/a&gt; # DispAL_m 結束-------------------------------------------------------------&lt;br /&gt;&lt;a name="line501"&gt;501&lt;/a&gt;&lt;br /&gt;&lt;a name="line502"&gt;502&lt;/a&gt;&lt;br /&gt;&lt;a name="line503"&gt;503&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line504"&gt;504&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;DispReturn:&lt;/span&gt;&lt;br /&gt;&lt;a name="line505"&gt;505&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %eax&lt;br /&gt;&lt;a name="line506"&gt;506&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line507"&gt;507&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %edi, %eax&lt;br /&gt;&lt;a name="line508"&gt;508&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $160, %bl&lt;br /&gt;&lt;a name="line509"&gt;509&lt;/a&gt; &lt;strong&gt; divb&lt;/strong&gt; %bl          # %eax/160, 商 al, 餘數 ah.&lt;br /&gt;&lt;a name="line510"&gt;510&lt;/a&gt; &lt;strong&gt; and&lt;/strong&gt; $0x0FF, %eax&lt;br /&gt;&lt;a name="line511"&gt;511&lt;/a&gt; &lt;strong&gt; inc&lt;/strong&gt; %eax         # ++ %eax&lt;br /&gt;&lt;a name="line512"&gt;512&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $160, %bl&lt;br /&gt;&lt;a name="line513"&gt;513&lt;/a&gt; &lt;strong&gt; mul&lt;/strong&gt; %bl&lt;br /&gt;&lt;a name="line514"&gt;514&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %eax, %edi&lt;br /&gt;&lt;a name="line515"&gt;515&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line516"&gt;516&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %eax&lt;br /&gt;&lt;a name="line517"&gt;517&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line518"&gt;518&lt;/a&gt; # DispReturn 結束---------------------------------------------------------&lt;br /&gt;&lt;a name="line519"&gt;519&lt;/a&gt;&lt;br /&gt;&lt;a name="line520"&gt;520&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_STACKR3:&lt;/span&gt;&lt;br /&gt;&lt;a name="line521"&gt;521&lt;/a&gt; .space 512, 0&lt;br /&gt;&lt;a name="line522"&gt;522&lt;/a&gt; .set TopOfStackR3, . - LABEL_STACKR3&lt;br /&gt;&lt;a name="line523"&gt;523&lt;/a&gt;&lt;br /&gt;&lt;a name="line524"&gt;524&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_TSS:&lt;/span&gt;&lt;br /&gt;&lt;a name="line525"&gt;525&lt;/a&gt;     .4byte  0           /* Back Link */&lt;br /&gt;&lt;a name="line526"&gt;526&lt;/a&gt;     .4byte  TopOfStack  /* ESP0 */&lt;br /&gt;&lt;a name="line527"&gt;527&lt;/a&gt;     .4byte  SelectorStack /* SS0 */&lt;br /&gt;&lt;a name="line528"&gt;528&lt;/a&gt;     .4byte  0           /* ESP1 */&lt;br /&gt;&lt;a name="line529"&gt;529&lt;/a&gt;     .4byte  0           /* SS1 */&lt;br /&gt;&lt;a name="line530"&gt;530&lt;/a&gt;     .4byte  0           /* ESP2 */&lt;br /&gt;&lt;a name="line531"&gt;531&lt;/a&gt;     .4byte  0           /* SS2 */&lt;br /&gt;&lt;a name="line532"&gt;532&lt;/a&gt;     .4byte  0           /* CR3(PDBR) */&lt;br /&gt;&lt;a name="line533"&gt;533&lt;/a&gt;     .4byte  0           /* EIP */&lt;br /&gt;&lt;a name="line534"&gt;534&lt;/a&gt;     .4byte  0           /* EFLAGS */&lt;br /&gt;&lt;a name="line535"&gt;535&lt;/a&gt;     .4byte  0           /* EAX */&lt;br /&gt;&lt;a name="line536"&gt;536&lt;/a&gt;     .4byte  0           /* ECX */&lt;br /&gt;&lt;a name="line537"&gt;537&lt;/a&gt;     .4byte  0           /* EDX */&lt;br /&gt;&lt;a name="line538"&gt;538&lt;/a&gt;     .4byte  0           /* EBX */&lt;br /&gt;&lt;a name="line539"&gt;539&lt;/a&gt;     .4byte  0           /* ESP */&lt;br /&gt;&lt;a name="line540"&gt;540&lt;/a&gt;     .4byte  0           /* EBP */&lt;br /&gt;&lt;a name="line541"&gt;541&lt;/a&gt;     .4byte  0           /* ESI */&lt;br /&gt;&lt;a name="line542"&gt;542&lt;/a&gt;     .4byte  0           /* EDI */&lt;br /&gt;&lt;a name="line543"&gt;543&lt;/a&gt;     .4byte  0           /* ES */&lt;br /&gt;&lt;a name="line544"&gt;544&lt;/a&gt;     .4byte  0           /* CS */&lt;br /&gt;&lt;a name="line545"&gt;545&lt;/a&gt;     .4byte  0           /* SS */&lt;br /&gt;&lt;a name="line546"&gt;546&lt;/a&gt;     .4byte  0           /* DS */&lt;br /&gt;&lt;a name="line547"&gt;547&lt;/a&gt;     .4byte  0           /* FS */&lt;br /&gt;&lt;a name="line548"&gt;548&lt;/a&gt;     .4byte  0           /* GS */&lt;br /&gt;&lt;a name="line549"&gt;549&lt;/a&gt;     .4byte  0           /* LDT Segment Selector */&lt;br /&gt;&lt;a name="line550"&gt;550&lt;/a&gt;     .2byte  0           /* Trap Flag: 1-bit */&lt;br /&gt;&lt;a name="line551"&gt;551&lt;/a&gt;     .2byte  (. - LABEL_TSS + 2)     /* I/O Map Base Address */&lt;br /&gt;&lt;a name="line552"&gt;552&lt;/a&gt;     .byte   0xff        /* End */&lt;br /&gt;&lt;a name="line553"&gt;553&lt;/a&gt; .set    TSS_LEN, (. - LABEL_TSS)&lt;br /&gt;&lt;a name="line554"&gt;554&lt;/a&gt;&lt;br /&gt;&lt;a name="line555"&gt;555&lt;/a&gt; # ring 3 code&lt;br /&gt;&lt;a name="line556"&gt;556&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_SEG_CODER3:&lt;/span&gt;&lt;br /&gt;&lt;a name="line557"&gt;557&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line558"&gt;558&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs&lt;br /&gt;&lt;a name="line559"&gt;559&lt;/a&gt; &lt;strong&gt;  movl&lt;/strong&gt; $((80*11+1) *2 ), %edi&lt;br /&gt;&lt;a name="line560"&gt;560&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $0xC, %ah&lt;br /&gt;&lt;a name="line561"&gt;561&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $'3', %al&lt;br /&gt;&lt;a name="line562"&gt;562&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line563"&gt;563&lt;/a&gt;&lt;br /&gt;&lt;a name="line564"&gt;564&lt;/a&gt;   # call gate test&lt;br /&gt;&lt;a name="line565"&gt;565&lt;/a&gt; &lt;strong&gt;  lcall&lt;/strong&gt; $(SELECT_CG_TEST), $0&lt;br /&gt;&lt;a name="line566"&gt;566&lt;/a&gt;&lt;br /&gt;&lt;a name="line567"&gt;567&lt;/a&gt; &lt;strong&gt;  jmp&lt;/strong&gt; .&lt;br /&gt;&lt;a name="line568"&gt;568&lt;/a&gt; .set SEG_CODER3_LEN, . - LABEL_SEG_CODER3&lt;br /&gt;&lt;a name="line569"&gt;569&lt;/a&gt;&lt;br /&gt;&lt;a name="line570"&gt;570&lt;/a&gt; # test call gate&lt;br /&gt;&lt;a name="line571"&gt;571&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_CODE_CG:&lt;/span&gt;&lt;br /&gt;&lt;a name="line572"&gt;572&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line573"&gt;573&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs&lt;br /&gt;&lt;a name="line574"&gt;574&lt;/a&gt; &lt;strong&gt;  movl&lt;/strong&gt; $((80*11+0) *2 ), %edi&lt;br /&gt;&lt;a name="line575"&gt;575&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $0xC, %ah&lt;br /&gt;&lt;a name="line576"&gt;576&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $'C', %al&lt;br /&gt;&lt;a name="line577"&gt;577&lt;/a&gt;&lt;br /&gt;&lt;a name="line578"&gt;578&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line579"&gt;579&lt;/a&gt;&lt;br /&gt;&lt;a name="line580"&gt;580&lt;/a&gt;&lt;br /&gt;&lt;a name="line581"&gt;581&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorLDT), %ax&lt;br /&gt;&lt;a name="line582"&gt;582&lt;/a&gt; &lt;strong&gt;  lldt&lt;/strong&gt; %ax&lt;br /&gt;&lt;a name="line583"&gt;583&lt;/a&gt; &lt;strong&gt;  jmp&lt;/strong&gt; $(SelectorLDTCodeA), $0&lt;br /&gt;&lt;a name="line584"&gt;584&lt;/a&gt;&lt;br /&gt;&lt;a name="line585"&gt;585&lt;/a&gt;   #lret # long return command&lt;br /&gt;&lt;a name="line586"&gt;586&lt;/a&gt; .set SEG_CODE_CG_LEN, . - LABEL_CODE_CG&lt;br /&gt;&lt;a name="line587"&gt;587&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_CODE_A:&lt;/span&gt;&lt;br /&gt;&lt;a name="line588"&gt;588&lt;/a&gt; #if 0&lt;br /&gt;&lt;a name="line589"&gt;589&lt;/a&gt; # intel syntax&lt;br /&gt;&lt;a name="line590"&gt;590&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     ax, SelectorVideo&lt;br /&gt;&lt;a name="line591"&gt;591&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     gs, ax                  &lt;span style="color:#444444;"&gt;; 視頻段選擇子(目的)&lt;/span&gt;&lt;br /&gt;&lt;a name="line592"&gt;592&lt;/a&gt;&lt;br /&gt;&lt;a name="line593"&gt;593&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     edi, (80 * 12 + 0) * 2  &lt;span style="color:#444444;"&gt;; 螢幕第 10 行, 第 0 列。&lt;/span&gt;&lt;br /&gt;&lt;a name="line594"&gt;594&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     ah, 0Ch                 &lt;span style="color:#444444;"&gt;; 0000: 黑底    1100: 紅字&lt;/span&gt;&lt;br /&gt;&lt;a name="line595"&gt;595&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     al, 'L'&lt;br /&gt;&lt;a name="line596"&gt;596&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     [gs:edi], ax&lt;br /&gt;&lt;a name="line597"&gt;597&lt;/a&gt; #else&lt;br /&gt;&lt;a name="line598"&gt;598&lt;/a&gt; # at&amp;amp;t syntax&lt;br /&gt;&lt;a name="line599"&gt;599&lt;/a&gt;  #if 1&lt;br /&gt;&lt;a name="line600"&gt;600&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line601"&gt;601&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs&lt;br /&gt;&lt;a name="line602"&gt;602&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $((80 * 12 + 0) * 2), %edi&lt;br /&gt;&lt;a name="line603"&gt;603&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $0x0c, %ah&lt;br /&gt;&lt;a name="line604"&gt;604&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $'L', %al&lt;br /&gt;&lt;a name="line605"&gt;605&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line606"&gt;606&lt;/a&gt;   #else&lt;br /&gt;&lt;a name="line607"&gt;607&lt;/a&gt;   /* can call DispAL function */&lt;br /&gt;&lt;a name="line608"&gt;608&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $0xef, %al&lt;br /&gt;&lt;a name="line609"&gt;609&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line610"&gt;610&lt;/a&gt;   #endif&lt;br /&gt;&lt;a name="line611"&gt;611&lt;/a&gt;   /* jump to real mode code16 and return to dos. */&lt;br /&gt;&lt;a name="line612"&gt;612&lt;/a&gt; &lt;strong&gt;  ljmpl&lt;/strong&gt;     $SelectorCode16,$0&lt;br /&gt;&lt;a name="line613"&gt;613&lt;/a&gt;&lt;br /&gt;&lt;a name="line614"&gt;614&lt;/a&gt; #endif&lt;br /&gt;&lt;a name="line615"&gt;615&lt;/a&gt; .set CodeALen, (. - LABEL_CODE_A)&lt;br /&gt;&lt;a name="line616"&gt;616&lt;/a&gt;&lt;br /&gt;&lt;a name="line617"&gt;617&lt;/a&gt; /*&lt;br /&gt;&lt;a name="line618"&gt;618&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;kmain:&lt;/span&gt;&lt;br /&gt;&lt;a name="line619"&gt;619&lt;/a&gt; &lt;strong&gt;        pushl&lt;/strong&gt;   %ebp&lt;br /&gt;&lt;a name="line620"&gt;620&lt;/a&gt; &lt;strong&gt;        movl&lt;/strong&gt;    %esp, %ebp&lt;br /&gt;&lt;a name="line621"&gt;621&lt;/a&gt; &lt;strong&gt;        popl&lt;/strong&gt;    %ebp&lt;br /&gt;&lt;a name="line622"&gt;622&lt;/a&gt; &lt;strong&gt;        ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line623"&gt;623&lt;/a&gt;         .size   kmain, .-kmain&lt;br /&gt;&lt;a name="line624"&gt;624&lt;/a&gt;         .ident  &lt;span style="color:#008000;"&gt;"GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"&lt;/span&gt;&lt;br /&gt;&lt;a name="line625"&gt;625&lt;/a&gt; */&lt;br /&gt;&lt;a name="line626"&gt;626&lt;/a&gt; #        .section        .note.GNU-stack,&lt;span style="color:#008000;"&gt;""&lt;/span&gt;,@progbits&lt;br /&gt;&lt;a name="line627"&gt;627&lt;/a&gt;&lt;br /&gt;&lt;a name="line628"&gt;628&lt;/a&gt;&lt;br /&gt;&lt;a name="line629"&gt;629&lt;/a&gt; /* Get the length of 32-bit segment code. */&lt;br /&gt;&lt;a name="line630"&gt;630&lt;/a&gt; .set    SegCode32Len, . - LABEL_SEG_CODE32&lt;br /&gt;&lt;a name="line631"&gt;631&lt;/a&gt;&lt;br /&gt;&lt;a name="line632"&gt;632&lt;/a&gt; #[SECTION .data1]         &lt;span style="color:#444444;"&gt;; 資料段&lt;/span&gt;&lt;br /&gt;&lt;a name="line633"&gt;633&lt;/a&gt; #ALIGN   32&lt;br /&gt;&lt;a name="line634"&gt;634&lt;/a&gt; #[BITS   32]&lt;br /&gt;&lt;a name="line635"&gt;635&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DATA:&lt;/span&gt;&lt;br /&gt;&lt;a name="line636"&gt;636&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;SPValueInRealMode:&lt;/span&gt; .2byte 0x0&lt;br /&gt;&lt;a name="line637"&gt;637&lt;/a&gt; # string&lt;br /&gt;&lt;a name="line638"&gt;638&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;PMMessage:&lt;/span&gt;              .ascii      &lt;span style="color:#008000;"&gt;"In Protect Mode now. ^-^&lt;span style="color:#77dd77;"&gt;\0&lt;/span&gt;"&lt;/span&gt;   # 在保護模式中顯示&lt;br /&gt;&lt;a name="line639"&gt;639&lt;/a&gt; .set    OffsetPMMessage, (PMMessage - LABEL_DATA)&lt;br /&gt;&lt;a name="line640"&gt;640&lt;/a&gt; #StrTest:                .ascii &lt;span style="color:#008000;"&gt;"B&lt;span style="color:#77dd77;"&gt;\0&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt;&lt;a name="line641"&gt;641&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;StrTest:&lt;/span&gt;                .ascii &lt;span style="color:#008000;"&gt;"ABCDEFGHIJKLMNOPQRSTUVWXYZ&lt;span style="color:#77dd77;"&gt;\0&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt;&lt;a name="line642"&gt;642&lt;/a&gt; #OffsetStrTest           equ     StrTest - $$&lt;br /&gt;&lt;a name="line643"&gt;643&lt;/a&gt; .set OffsetStrTest , (StrTest - LABEL_DATA)&lt;br /&gt;&lt;a name="line644"&gt;644&lt;/a&gt; #DataLen                 equ     $ - LABEL_DATA&lt;br /&gt;&lt;a name="line645"&gt;645&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;video_addr:&lt;/span&gt;              .int    0&lt;br /&gt;&lt;a name="line646"&gt;646&lt;/a&gt; .set DataLen, .  - LABEL_DATA&lt;br /&gt;&lt;a name="line647"&gt;647&lt;/a&gt; /* 32-bit global stack segment. */&lt;br /&gt;&lt;a name="line648"&gt;648&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_STACK:&lt;/span&gt;&lt;br /&gt;&lt;a name="line649"&gt;649&lt;/a&gt; .space  512, 0&lt;br /&gt;&lt;a name="line650"&gt;650&lt;/a&gt; .set    TopOfStack, (. - LABEL_STACK - 1)&lt;br /&gt;&lt;a name="line651"&gt;651&lt;/a&gt;&lt;br /&gt;&lt;a name="line652"&gt;652&lt;/a&gt; # END of [SECTION .data1]&lt;br /&gt;&lt;a name="line653"&gt;653&lt;/a&gt;&lt;br /&gt;&lt;a name="line654"&gt;654&lt;/a&gt;&lt;br /&gt;&lt;a name="line655"&gt;655&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_SEG_CODE16:&lt;/span&gt;&lt;br /&gt;&lt;a name="line656"&gt;656&lt;/a&gt; .code16&lt;br /&gt;&lt;a name="line657"&gt;657&lt;/a&gt;     #jmp     .&lt;br /&gt;&lt;a name="line658"&gt;658&lt;/a&gt;         # back to real mode&lt;br /&gt;&lt;a name="line659"&gt;659&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     $SelectorNormal, %ax&lt;br /&gt;&lt;a name="line660"&gt;660&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ds&lt;br /&gt;&lt;a name="line661"&gt;661&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line662"&gt;662&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %fs&lt;br /&gt;&lt;a name="line663"&gt;663&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %gs&lt;br /&gt;&lt;a name="line664"&gt;664&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ss&lt;br /&gt;&lt;a name="line665"&gt;665&lt;/a&gt;&lt;br /&gt;&lt;a name="line666"&gt;666&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %cr0, %eax&lt;br /&gt;&lt;a name="line667"&gt;667&lt;/a&gt; &lt;strong&gt;        and&lt;/strong&gt;     $0b11111110, %al&lt;br /&gt;&lt;a name="line668"&gt;668&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %eax, %cr0&lt;br /&gt;&lt;a name="line669"&gt;669&lt;/a&gt;&lt;br /&gt;&lt;a name="line670"&gt;670&lt;/a&gt;&lt;br /&gt;&lt;a name="line671"&gt;671&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_GO_BACK_TO_REAL:&lt;/span&gt;&lt;br /&gt;&lt;a name="line672"&gt;672&lt;/a&gt; #.2byte 0xea66&lt;br /&gt;&lt;a name="line673"&gt;673&lt;/a&gt; #.4byte 0x00000000&lt;br /&gt;&lt;a name="line674"&gt;674&lt;/a&gt; #.2byte LABEL_REAL_ENTRY&lt;br /&gt;&lt;a name="line675"&gt;675&lt;/a&gt; &lt;strong&gt;    jmp&lt;/strong&gt;     $0, $LABEL_REAL_ENTRY      # 段位址會在程序開始處被設置成正確的值&lt;br /&gt;&lt;a name="line676"&gt;676&lt;/a&gt;&lt;br /&gt;&lt;a name="line677"&gt;677&lt;/a&gt;&lt;br /&gt;&lt;a name="line678"&gt;678&lt;/a&gt; .set Code16Len, . - LABEL_SEG_CODE16&lt;br /&gt;&lt;a name="line679"&gt;679&lt;/a&gt;&lt;br /&gt;&lt;a name="line680"&gt;680&lt;/a&gt; &lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-8525073717532266089?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/8525073717532266089/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=8525073717532266089' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/8525073717532266089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/8525073717532266089'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2012/01/x86-from-ring0-enter-to-ring3-then.html' title='x86: from ring0 to ring3, then enter to ring0'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-2170436171975252840</id><published>2011-12-31T18:14:00.005+08:00</published><updated>2012-02-01T16:02:16.612+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>擷取網站檔案</title><content type='html'>&lt;fieldset&gt;&lt;legend&gt;http_c0.py&lt;/legend&gt;&lt;br /&gt;&lt;pre&gt;&lt;a name="line1"&gt;  1&lt;/a&gt; &lt;span style="color:#444444;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;&lt;a name="line2"&gt;  2&lt;/a&gt; &lt;span style="color:#444444;"&gt;#encoding=utf-8&lt;/span&gt;&lt;br /&gt;&lt;a name="line3"&gt;  3&lt;/a&gt; &lt;span style="color:#444444;"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;br /&gt;&lt;a name="line4"&gt;  4&lt;/a&gt; &lt;span style="color:#444444;"&gt;#ref: http://www.cnblogs.com/chenzehe/archive/2010/08/30/1812995.html &lt;/span&gt;&lt;br /&gt;&lt;a name="line5"&gt;  5&lt;/a&gt;&lt;br /&gt;&lt;a name="line6"&gt;  6&lt;/a&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;httplib&lt;/span&gt;&lt;br /&gt;&lt;a name="line7"&gt;  7&lt;/a&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;commands&lt;/span&gt;&lt;br /&gt;&lt;a name="line8"&gt;  8&lt;/a&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;shutil&lt;/span&gt;&lt;br /&gt;&lt;a name="line9"&gt;  9&lt;/a&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;re&lt;/span&gt;&lt;br /&gt;&lt;a name="line10"&gt; 10&lt;/a&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;&lt;br /&gt;&lt;a name="line11"&gt; 11&lt;/a&gt;&lt;br /&gt;&lt;a name="line12"&gt; 12&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;def&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;get_fn&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;fp&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line13"&gt; 13&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;a&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;fp&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;rfind&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;'/'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line14"&gt; 14&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;a&lt;/span&gt;&lt;span style="color:4444FF;"&gt;+&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;a name="line15"&gt; 15&lt;/a&gt;     &lt;strong&gt;return&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;fp&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;a&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;a name="line16"&gt; 16&lt;/a&gt;&lt;br /&gt;&lt;a name="line17"&gt; 17&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;def&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;get_href&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;page_html&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line18"&gt; 18&lt;/a&gt;     &lt;span style="color:#444444;"&gt;#return get_page('href.*"', page_html)&lt;/span&gt;&lt;br /&gt;&lt;a name="line19"&gt; 19&lt;/a&gt;     &lt;strong&gt;return&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;get_page&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;'[0-9_]*.shtml'&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;page_html&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line20"&gt; 20&lt;/a&gt;&lt;br /&gt;&lt;a name="line21"&gt; 21&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;def&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;get_page&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;page_pattern&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;page_html&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line22"&gt; 22&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;s&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;''&lt;/span&gt;&lt;br /&gt;&lt;a name="line23"&gt; 23&lt;/a&gt;     &lt;strong&gt;if&lt;/strong&gt; &lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;re&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;search&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;page_pattern&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;page_html&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line24"&gt; 24&lt;/a&gt;         &lt;span style="color:#2040a0;"&gt;m&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;re&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;search&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;page_pattern&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;page_html&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line25"&gt; 25&lt;/a&gt;         &lt;span style="color:#444444;"&gt;#print "found:", m.group()&lt;/span&gt;&lt;br /&gt;&lt;a name="line26"&gt; 26&lt;/a&gt;         &lt;span style="color:#2040a0;"&gt;s&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;m&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;group&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line27"&gt; 27&lt;/a&gt;     &lt;strong&gt;else&lt;/strong&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line28"&gt; 28&lt;/a&gt;         &lt;strong&gt;pass&lt;/strong&gt;&lt;span style="color:#444444;"&gt;#print "not found"&lt;/span&gt;&lt;br /&gt;&lt;a name="line29"&gt; 29&lt;/a&gt;     &lt;strong&gt;return&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;s&lt;/span&gt;&lt;br /&gt;&lt;a name="line30"&gt; 30&lt;/a&gt;&lt;br /&gt;&lt;a name="line31"&gt; 31&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;def&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;get_next_page&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;page_html&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line32"&gt; 32&lt;/a&gt;     &lt;strong&gt;return&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;get_page&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;'&amp;lt;a href=.*&amp;gt;下一页&amp;lt;/a&amp;gt;'&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;page_html&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line33"&gt; 33&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;def&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;get_previous_page&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;page_html&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line34"&gt; 34&lt;/a&gt;     &lt;strong&gt;return&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;get_page&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;'&amp;lt;a href=.*&amp;gt;上一页&amp;lt;/a&amp;gt;'&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;page_html&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line35"&gt; 35&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;def&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;get_file_url&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;page_html&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line36"&gt; 36&lt;/a&gt;     &lt;strong&gt;return&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;get_page&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;'http://.*.jpg'&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;page_html&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line37"&gt; 37&lt;/a&gt;&lt;br /&gt;&lt;a name="line38"&gt; 38&lt;/a&gt; &lt;span style="color:#444444;"&gt;#http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl&lt;/span&gt;&lt;br /&gt;&lt;a name="line39"&gt; 39&lt;/a&gt;&lt;br /&gt;&lt;a name="line40"&gt; 40&lt;/a&gt; &lt;span style="color:#444444;"&gt;#url = 'www.webxml.com.cn'&lt;/span&gt;&lt;br /&gt;&lt;a name="line41"&gt; 41&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;url&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#008000;"&gt;'www.google.com'&lt;/span&gt;&lt;br /&gt;&lt;a name="line42"&gt; 42&lt;/a&gt; &lt;span style="color:#444444;"&gt;#url = 'pic.076.com/ComicList/201008/2911_68.shtml'&lt;/span&gt;&lt;br /&gt;&lt;a name="line43"&gt; 43&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;url&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;'files.076.com'&lt;/span&gt;&lt;br /&gt;&lt;a name="line44"&gt; 44&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;url&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#008000;"&gt;'pic.076.com'&lt;/span&gt;&lt;br /&gt;&lt;a name="line45"&gt; 45&lt;/a&gt;&lt;br /&gt;&lt;a name="line46"&gt; 46&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;conn&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;httplib&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;HTTPConnection&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;host&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;url&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line47"&gt; 47&lt;/a&gt;&lt;br /&gt;&lt;a name="line48"&gt; 48&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;h&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:4444FF;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;'User-agent'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt; &lt;span style="color:#008000;"&gt;'python-httplib'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="line49"&gt; 49&lt;/a&gt;&lt;br /&gt;&lt;a name="line50"&gt; 50&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;req_path&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#008000;"&gt;'/'&lt;/span&gt;&lt;br /&gt;&lt;a name="line51"&gt; 51&lt;/a&gt; &lt;span style="color:#444444;"&gt;#req_path = '/WebServices/WeatherWebService.asmx?wsdl'&lt;/span&gt;&lt;br /&gt;&lt;a name="line52"&gt; 52&lt;/a&gt; &lt;span style="color:#444444;"&gt;#conn.request("GET", "/", headers=h)&lt;/span&gt;&lt;br /&gt;&lt;a name="line53"&gt; 53&lt;/a&gt; &lt;span style="color:#444444;"&gt;#conn.request("GET", req_path, headers=h)&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="line54"&gt; 54&lt;/a&gt; &lt;span style="color:#444444;"&gt;#path='2911_69.shtml'&lt;/span&gt;&lt;br /&gt;&lt;a name="line55"&gt; 55&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;'/201008/20100830145757244358.jpg'&lt;/span&gt;&lt;br /&gt;&lt;a name="line56"&gt; 56&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;'/ComicList/201008/'&lt;/span&gt;&lt;br /&gt;&lt;a name="line57"&gt; 57&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;p&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;'2818.shtml'&lt;/span&gt;&lt;br /&gt;&lt;a name="line58"&gt; 58&lt;/a&gt; &lt;span style="color:#444444;"&gt;#p='2818_32.shtml'&lt;/span&gt;&lt;br /&gt;&lt;a name="line59"&gt; 59&lt;/a&gt;&lt;br /&gt;&lt;a name="line60"&gt; 60&lt;/a&gt;&lt;br /&gt;&lt;a name="line61"&gt; 61&lt;/a&gt; &lt;span style="color:#444444;"&gt;#conn.request("GET", path+p, headers=h)&lt;/span&gt;&lt;br /&gt;&lt;a name="line62"&gt; 62&lt;/a&gt; &lt;span style="color:#444444;"&gt;#r1 = conn.getresponse()&lt;/span&gt;&lt;br /&gt;&lt;a name="line63"&gt; 63&lt;/a&gt; &lt;span style="color:#444444;"&gt;#print r1.status, r1.reason&lt;/span&gt;&lt;br /&gt;&lt;a name="line64"&gt; 64&lt;/a&gt; &lt;span style="color:#444444;"&gt;#print "msg:", r1.msg&lt;/span&gt;&lt;br /&gt;&lt;a name="line65"&gt; 65&lt;/a&gt; &lt;span style="color:#444444;"&gt;#print "version:", r1.version&lt;/span&gt;&lt;br /&gt;&lt;a name="line66"&gt; 66&lt;/a&gt; &lt;span style="color:#444444;"&gt;#print "headers:", r1.getheaders()&lt;/span&gt;&lt;br /&gt;&lt;a name="line67"&gt; 67&lt;/a&gt; &lt;span style="color:#444444;"&gt;#data1 = r1.read()&lt;/span&gt;&lt;br /&gt;&lt;a name="line68"&gt; 68&lt;/a&gt; &lt;span style="color:#444444;"&gt;#print type(data1)&lt;/span&gt;&lt;br /&gt;&lt;a name="line69"&gt; 69&lt;/a&gt; &lt;span style="color:#444444;"&gt;#print "len:", len(data1)&lt;/span&gt;&lt;br /&gt;&lt;a name="line70"&gt; 70&lt;/a&gt; &lt;span style="color:#444444;"&gt;#print data1&lt;/span&gt;&lt;br /&gt;&lt;a name="line71"&gt; 71&lt;/a&gt;&lt;br /&gt;&lt;a name="line72"&gt; 72&lt;/a&gt; &lt;span style="color:#444444;"&gt;#f=open('c.jpg', 'w')&lt;/span&gt;&lt;br /&gt;&lt;a name="line73"&gt; 73&lt;/a&gt; &lt;span style="color:#444444;"&gt;#f.write(data1)&lt;/span&gt;&lt;br /&gt;&lt;a name="line74"&gt; 74&lt;/a&gt; &lt;span style="color:#444444;"&gt;#f.close()&lt;/span&gt;&lt;br /&gt;&lt;a name="line75"&gt; 75&lt;/a&gt;&lt;br /&gt;&lt;a name="line76"&gt; 76&lt;/a&gt; &lt;span style="color:#444444;"&gt;#print get_file_url(data1)&lt;/span&gt;&lt;br /&gt;&lt;a name="line77"&gt; 77&lt;/a&gt; &lt;span style="color:#444444;"&gt;#ppage=get_previous_page(data1)&lt;/span&gt;&lt;br /&gt;&lt;a name="line78"&gt; 78&lt;/a&gt; &lt;span style="color:#444444;"&gt;#print ppage&lt;/span&gt;&lt;br /&gt;&lt;a name="line79"&gt; 79&lt;/a&gt; &lt;span style="color:#444444;"&gt;#ppage_page=get_href(ppage)&lt;/span&gt;&lt;br /&gt;&lt;a name="line80"&gt; 80&lt;/a&gt; &lt;span style="color:#444444;"&gt;#print ppage_page&lt;/span&gt;&lt;br /&gt;&lt;a name="line81"&gt; 81&lt;/a&gt;&lt;br /&gt;&lt;a name="line82"&gt; 82&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;move_dir&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;join&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;getcwd&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;, &lt;span style="color:#008000;"&gt;'jpg/'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line83"&gt; 83&lt;/a&gt;&lt;br /&gt;&lt;a name="line84"&gt; 84&lt;/a&gt; &lt;strong&gt;try&lt;/strong&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line85"&gt; 85&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;mkdir&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;move_dir&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line86"&gt; 86&lt;/a&gt; &lt;strong&gt;except&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;Exception&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;as&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;err&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line87"&gt; 87&lt;/a&gt;     &lt;strong&gt;if&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;err&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;errno&lt;/span&gt; &lt;span style="color:4444FF;"&gt;!&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;17&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt; &lt;span style="color:#444444;"&gt;# the directory already exists&lt;/span&gt;&lt;br /&gt;&lt;a name="line88"&gt; 88&lt;/a&gt;         &lt;strong&gt;print&lt;/strong&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;"warn"&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;err&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line89"&gt; 89&lt;/a&gt;     &lt;strong&gt;else&lt;/strong&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line90"&gt; 90&lt;/a&gt;         &lt;strong&gt;print&lt;/strong&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;"ERROR"&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;err&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line91"&gt; 91&lt;/a&gt;&lt;br /&gt;&lt;a name="line92"&gt; 92&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;fc&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;a name="line93"&gt; 93&lt;/a&gt; &lt;strong&gt;while&lt;/strong&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;1&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line94"&gt; 94&lt;/a&gt;&lt;br /&gt;&lt;a name="line95"&gt; 95&lt;/a&gt;     &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#008000;"&gt;'req path:'&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;&lt;span style="color:4444FF;"&gt;+&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;p&lt;/span&gt;&lt;br /&gt;&lt;a name="line96"&gt; 96&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;conn&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;request&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;"GET"&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;&lt;span style="color:4444FF;"&gt;+&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;p&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;headers&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;h&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line97"&gt; 97&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;r1&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;conn&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;getresponse&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line98"&gt; 98&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;data1&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;r1&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;read&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line99"&gt; 99&lt;/a&gt;&lt;br /&gt;&lt;a name="line100"&gt;100&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;furl&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;get_file_url&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;data1&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line101"&gt;101&lt;/a&gt;&lt;br /&gt;&lt;a name="line102"&gt;102&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;fn&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;get_fn&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;furl&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line103"&gt;103&lt;/a&gt;     &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#008000;"&gt;'get file:'&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;furl&lt;/span&gt;&lt;br /&gt;&lt;a name="line104"&gt;104&lt;/a&gt;     &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#008000;"&gt;'fn:'&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;fn&lt;/span&gt;&lt;br /&gt;&lt;a name="line105"&gt;105&lt;/a&gt;&lt;br /&gt;&lt;a name="line106"&gt;106&lt;/a&gt; &lt;span style="color:#444444;"&gt;#    os.spawnl(os.P_NOWAIT, cmd)&lt;/span&gt;&lt;br /&gt;&lt;a name="line107"&gt;107&lt;/a&gt;&lt;br /&gt;&lt;a name="line108"&gt;108&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;cmd&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#008000;"&gt;"/usr/bin/wget "&lt;/span&gt; &lt;span style="color:4444FF;"&gt;+&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;furl&lt;/span&gt;&lt;br /&gt;&lt;a name="line109"&gt;109&lt;/a&gt;     &lt;span style="color:4444FF;"&gt;(&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;stat&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;output&lt;/span&gt; &lt;span style="color:4444FF;"&gt;)&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;commands&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;getstatusoutput&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;cmd&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line110"&gt;110&lt;/a&gt;     &lt;strong&gt;if&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;stat&lt;/span&gt;&lt;span style="color:4444FF;"&gt;!&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;0&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line111"&gt;111&lt;/a&gt;         &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;output&lt;/span&gt;&lt;br /&gt;&lt;a name="line112"&gt;112&lt;/a&gt;     &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#008000;"&gt;"move"&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;join&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;getcwd&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;fn&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;, &lt;span style="color:#008000;"&gt;"to"&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;join&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;getcwd&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;, &lt;span style="color:#008000;"&gt;'jpg/'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;+&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;str&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;fc&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt; &lt;span style="color:4444FF;"&gt;+&lt;/span&gt; &lt;span style="color:#008000;"&gt;'.jpg'&lt;/span&gt;&lt;br /&gt;&lt;a name="line113"&gt;113&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;shutil&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;move&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;path&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;join&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;os&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;getcwd&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;fn&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;move_dir&lt;/span&gt; &lt;span style="color:4444FF;"&gt;+&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;str&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;fc&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt; &lt;span style="color:4444FF;"&gt;+&lt;/span&gt; &lt;span style="color:#008000;"&gt;'.jpg'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line114"&gt;114&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;fc&lt;/span&gt;&lt;span style="color:4444FF;"&gt;+&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;a name="line115"&gt;115&lt;/a&gt;&lt;br /&gt;&lt;a name="line116"&gt;116&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;npage&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;get_next_page&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;data1&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line117"&gt;117&lt;/a&gt;     &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;npage&lt;/span&gt;&lt;br /&gt;&lt;a name="line118"&gt;118&lt;/a&gt; &lt;span style="color:#444444;"&gt;#    if npage.find('_101')!=-1:&lt;/span&gt;&lt;br /&gt;&lt;a name="line119"&gt;119&lt;/a&gt; &lt;span style="color:#444444;"&gt;#        break&lt;/span&gt;&lt;br /&gt;&lt;a name="line120"&gt;120&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;npage_page&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;get_href&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;npage&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line121"&gt;121&lt;/a&gt;     &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;npage_page&lt;/span&gt;&lt;br /&gt;&lt;a name="line122"&gt;122&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;p&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;npage_page&lt;/span&gt;&lt;br /&gt;&lt;a name="line123"&gt;123&lt;/a&gt;     &lt;strong&gt;if&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;fc&lt;/span&gt; &lt;span style="color:4444FF;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;100&lt;/span&gt; &lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line124"&gt;124&lt;/a&gt;         &lt;strong&gt;break&lt;/strong&gt;&lt;br /&gt;&lt;a name="line125"&gt;125&lt;/a&gt;&lt;br /&gt;&lt;a name="line126"&gt;126&lt;/a&gt;     &lt;span style="color:#444444;"&gt;#print data1&lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;&lt;br /&gt;這是一個練習程式, 把漫畫網站的圖檔抓下來, 這樣就不用辛苦的一一點選上一頁/下一頁, 不過這程式有好幾個缺點。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;需要使用 wget&lt;/li&gt;&lt;li&gt;只能針對特定網站, 可能需要改寫其他規則才能用在其他網站上。&lt;/li&gt;&lt;li&gt;依序把所有檔案抓下來, 前一個圖檔抓完, 才能抓下一個。&lt;/li&gt;&lt;li&gt;停止條件很粗糙。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;若是網站圖檔 url 使用 javascript 產生, 那就無法處理了, 這需要一個 javascript interpreter, 這工程可能有點麻煩。&lt;/li&gt;&lt;/ul&gt;不過已經比慢慢等著圖檔傳輸, 按著上一頁/下一頁好很多了。&lt;br /&gt;&lt;br /&gt;這裡有更多技巧:&lt;br /&gt;&lt;a href="http://www.pythonclub.org/python-network-application/observer-spider"&gt;http://www.pythonclub.org/python-network-application/observer-spider&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-2170436171975252840?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/2170436171975252840/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=2170436171975252840' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/2170436171975252840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/2170436171975252840'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/blog-post_31.html' title='擷取網站檔案'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-2374760668954546014</id><published>2011-12-31T14:12:00.007+08:00</published><updated>2012-01-11T11:35:32.616+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='廢鐵號單車遊記'/><title type='text'>20111231 轉動台灣向前行-台南北區 (西海岸活蝦餐廳)</title><content type='html'>這是為了破記錄和紀念民國 100 年而生的活動, 我並沒有報名, 去參加只是湊湊熱鬧, 覺得看到大量的單車是一件有興趣的事情。&lt;br /&gt;&lt;br /&gt;我參加的路段是從&lt;b&gt;台南北區 (西海岸活蝦餐廳)&lt;/b&gt;到&lt;b&gt;永康交流道&lt;/b&gt;, 據說大概是五公里的路程, 不過由於廢鐵上面沒有碼表, 我無法得知真正的路徑。&lt;br /&gt;&lt;br /&gt;20111231 09:40 出發, 抵達&lt;b&gt;西海岸活蝦餐廳&lt;/b&gt;大約十點, 這種活動等到真正進行, 多少都會拖點時間, 在我到達的時候, 長長的車輛已經排得遠遠的, 我右轉進入小巷弄中, 排在人群後方。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/2DiPf9AANSIeYTo4OL8IY9MTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh6.googleusercontent.com/-9BUiZGe7wDo/Tv6fwkl9CxI/AAAAAAAAYTc/pcIw4X7YbB4/s288/P1020005.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/fTRb8mou71bm-8NJbcYIGtMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-eoe_By0lbd8/Tv6f6ftcTRI/AAAAAAAAYTo/2MNt98fWY-M/s288/P1020008.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;可能因為分散了人潮, 這個區域並沒有像一般的大拜拜一樣, 有著超擁擠的人車, 這樣騎車的品質也會比較好。等了一會兒, 人們開始往前移動了, 沿路上很容易見到全家出動的場景, 小朋友們有的自己騎著單車, 有的讓父母載著, 不過有對母子的方式實在有趣。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/2CfjH7H9GfhGjIXR4SJ0MtMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-OuCXUhFMFfo/Tv6hfO84k7I/AAAAAAAAYWE/PxdXH31_18Q/s288/P1020047.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/FCSwzFpek9_UyqYIlkreQ9MTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh6.googleusercontent.com/-INtmwL4oj4c/Tv6hYp_pY5I/AAAAAAAAYV8/gbVgi6ZLBR4/s288/P1020045.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;媽媽用一條繩子連著後面的小三輪車, 小弟弟的造型也很生動, 可愛的小熊耳朵, 小小的身影騎著迷你的三輪車, 真是可愛。&lt;br /&gt;&lt;br /&gt;沿途又遇到騎著 fixed gear 的車友, 他的 fixed gear 沒有安裝上煞車, 我不免好奇, 跟了上去, 並詢問他一些問題。&lt;br /&gt;&lt;br /&gt;他的 fixed gear 是自己組裝的, 花了大概 5000 左右, 這是我比較能接受的價位, 動輒要花上 10000 以上的價位, 以簡單為原則的 fixed gear, 似乎貴了點。他們的單車也許不夠華麗, 但也樸實簡潔, 一樣有著自己的特色。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/HJp44o8fKYjV65HAG4T1sdMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-m1FAijx43Ug/Tv6iqg8C__I/AAAAAAAAYX0/khykwd_LL8E/s640/P1020075.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;我對於不安裝煞車的 fixed gear 能否真實上路實在頗有疑問, 現在真正看到了, 已經沒有懷疑, 原來真的可以憑著煞車技巧, 來完成一般道路的騎承, 心理覺得很厲害阿！&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/Coaunsmddeccxxvt65ccNNMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-H0BU19YB45s/Tv6igR4xT8I/AAAAAAAAYXk/Sy7Q0O5ccfA/s640/P1020071.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;他還秀了很酷的照相機讓我看, 就這樣帶在手上, 像手錶一樣, 據說這是玩極限運動的人在用的, 有防水盒的版本要價 9000 左右, 看來實在方便。&lt;br /&gt;&lt;br /&gt;沿路上會看到其他的活動集合地點, 工作人員也會為參與活動的朋友大聲加油, 頂著熱鬧的加油聲, 配合著大量的單車, 活動似乎很有活力的展現台灣的生命力。我, 好久好久沒參加這樣的大活動了。&lt;br /&gt;&lt;br /&gt;沿途部有大量的交管警力, 這麼多的單車一同出現的確對交通上有些影響, 我就遇到不耐煩的汽車駕駛按著兇狠的喇叭, 我超個車借一下快車道, 不會影響你太久, 別這麼兇嘛！&lt;br /&gt;&lt;br /&gt;抵達 481 終點站時, 雨漸漸地大了起來, 我並沒有報名, 不需要那張證書, 留下回憶的照片後, 趕緊加足油門往回而去。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/J43-ZZbMuAPoljoFnoeyxdMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-4yJQ1AHcbJ4/Tv6jGhoOYtI/AAAAAAAAYYg/3NOtVJuc6RE/s640/P1020086.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;雨勢越來越大, 上半身裹著 gore-tex 外套沒問題, 不過下半身隨著雨勢的增強, 褲子愈來愈濕, 我更是加快腳步, 往回程的路上而去。&lt;br /&gt;&lt;br /&gt;見到龐大的車隊、盛大的活動, 總算滿足了湊熱鬧的情緒, 而轉動踏版盡情的縱橫馳騁在公路上, 淋著綿綿細雨, 完成這次的活動, 痛快!!&lt;br /&gt;&lt;br /&gt;&lt;embed type="application/x-shockwave-flash" src="https://picasaweb.google.com/s/c/bin/slideshow.swf" flashvars="host=picasaweb.google.com&amp;amp;hl=en_US&amp;amp;feat=flashalbum&amp;amp;RGB=0x000000&amp;amp;feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2F105103177642172932400%2Falbumid%2F5692162406939903425%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer" height="400" width="600"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-2374760668954546014?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/2374760668954546014/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=2374760668954546014' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/2374760668954546014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/2374760668954546014'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/20111231.html' title='20111231 轉動台灣向前行-台南北區 (西海岸活蝦餐廳)'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-9BUiZGe7wDo/Tv6fwkl9CxI/AAAAAAAAYTc/pcIw4X7YbB4/s72-c/P1020005.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-6665677995417975793</id><published>2011-12-30T17:25:00.004+08:00</published><updated>2011-12-30T21:45:54.867+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='二手書店'/><title type='text'>頑皮族舊書店</title><content type='html'>&lt;a href="https://picasaweb.google.com/lh/photo/MnQlxd78_XtgCX5_adMOu4Ae_j8iBxJaHNgRVFUAQrs?feat=embedwebsite"&gt;&lt;img style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;" src="https://lh5.googleusercontent.com/-4mZmyP41M88/TvGSwuHN8OI/AAAAAAAAXZU/T5aK-_AQws0/s400/P1010113.JPG" height="400" width="300" /&gt;&lt;/a&gt;20111230 扛著兩本微積分的舊原文書籍 (1992, 1994) 共五公斤, 找了三家舊書店, 都不收, 頑皮族舊書店則可以秤斤回收, 一公斤 4.X 元, 換得 23 元。不過又在那裡買了三本漫畫, 花了 90 元, 賺的比花的多。XD&lt;br /&gt;&lt;br /&gt;最近逛了好幾間的舊書店, 這間的特色在於豐富的漫畫, 如果不特別注意, 還以為來到一間賣漫畫的漫畫書店。因為每一本漫畫和新的漫畫一樣, 會用相同的塑膠封模封住, 不注意看還以為是新的; 而和一般的漫畫店不同的是這邊的漫畫都是二手的, 價錢也便宜不少, 大多在五折左右, 當然還是會有一些稀有的漫畫, 那就不便宜了。像是&lt;b&gt;魁男塾&lt;/b&gt;, 賣的可是比原價還貴哦！&lt;br /&gt;&lt;br /&gt;頑皮族舊書店位於台南市東區育樂街 113 號, 除了舊書之外, 老闆娘還兼賣線上遊戲點數, 還有監獄受刑人製作的食品, 例如上過電視的蛋捲, 不過在過年前這段時間, 似乎很搶手, 沒有現貨, 我也向老闆娘訂了兩包, 20 支 105 元。有不少口味, 例如原味、芝麻、巧克力、海苔 ... 一大堆。&lt;br /&gt;&lt;br /&gt;沒想到現在連二手書店都要多角化經營, 現在連漫畫書似乎也都不那麼好賣, 可能由於網路上充斥著大量的漫畫資訊, 很多人都在網路上看完了, 造成紙本銷售的下滑。不過紙本對我來說還是有特殊的感情存在, 我還是喜歡翻閱紙本的感覺。&lt;br /&gt;&lt;br /&gt;&lt;embed type="application/x-shockwave-flash" src="https://picasaweb.google.com/s/c/bin/slideshow.swf" flashvars="host=picasaweb.google.com&amp;amp;hl=en_US&amp;amp;feat=flashalbum&amp;amp;RGB=0x000000&amp;amp;feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2F105103177642172932400%2Falbumid%2F5691916486081175969%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer" height="400" width="600"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-6665677995417975793?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/6665677995417975793/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=6665677995417975793' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/6665677995417975793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/6665677995417975793'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/blog-post_30.html' title='頑皮族舊書店'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-4mZmyP41M88/TvGSwuHN8OI/AAAAAAAAXZU/T5aK-_AQws0/s72-c/P1010113.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-3081466936743685686</id><published>2011-12-29T21:34:00.007+08:00</published><updated>2012-01-20T13:26:36.603+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book_list'/><category scheme='http://www.blogger.com/atom/ns#' term='computer book'/><title type='text'>我也想看這些中文書籍</title><content type='html'>&lt;h1&gt;     &lt;span&gt;学习GNU Emacs（第二版）&lt;/span&gt;     &lt;/h1&gt;                                        &lt;div class="subject clearfix"&gt;              &lt;div id="mainpic"&gt;&lt;a class="nbg" href="http://img1.douban.com/lpic/s1436452.jpg" title="学习GNU Emacs（第二版）"&gt;                  &lt;img src="http://img1.douban.com/mpic/s1436452.jpg" title="点击看大图" alt="学习GNU Emacs（第二版）" rel="v:photo" /&gt;              &lt;/a&gt;&lt;br /&gt;    &lt;/div&gt;&lt;div id="info"&gt;&lt;span&gt;&lt;span class="pl"&gt;作者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/%28%E7%BE%8E%29%E5%8D%A1%E9%A9%AC%E4%BC%A6%20%E6%9D%A8%E6%B6%9B%20%E7%AD%89"&gt;(美)卡马伦 杨涛 等&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="pl"&gt;译者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/%E6%9D%A8%E6%B6%9B%20%E6%9D%A8%E6%99%93%E4%BA%91%20%E7%8E%8B%E5%BB%BA%E6%A1%A5"&gt;杨涛 杨晓云 王建桥&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pl"&gt;出版社:&lt;/span&gt; 机械工业出版社&lt;br /&gt;&lt;span class="pl"&gt;出版年:&lt;/span&gt; 2003-06-01&lt;br /&gt;&lt;span class="pl"&gt;页数:&lt;/span&gt; 584&lt;br /&gt;&lt;span class="pl"&gt;定价:&lt;/span&gt; 68.00元&lt;br /&gt;&lt;span class="pl"&gt;ISBN:&lt;/span&gt; 9787111103486&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;     &lt;span&gt;GNU Emacs Lisp 编程入门&lt;/span&gt;     &lt;/h1&gt;                                        &lt;div class="subject clearfix"&gt;              &lt;div id="mainpic"&gt;&lt;a class="nbg" href="http://img3.douban.com/lpic/s2143099.jpg" title="GNU Emacs Lisp 编程入门"&gt;                  &lt;img src="http://img3.douban.com/mpic/s2143099.jpg" title="点击看大图" alt="GNU Emacs Lisp 编程入门" rel="v:photo" /&gt;              &lt;/a&gt;&lt;br /&gt;    &lt;/div&gt;&lt;div id="info"&gt;&lt;span&gt;&lt;span class="pl"&gt;作者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/%28%E7%BE%8E%29%20Robert%20J.Chassell"&gt;(美) Robert J.Chassell&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="pl"&gt;译者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/%E6%AF%9B%E6%96%87%E6%B6%9B%20%E5%90%95%E8%8A%B3"&gt;毛文涛 吕芳&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pl"&gt;出版社:&lt;/span&gt; 机械工业出版社&lt;br /&gt;&lt;span class="pl"&gt;出版年:&lt;/span&gt; 2001-05-01&lt;br /&gt;&lt;span class="pl"&gt;页数:&lt;/span&gt; 216&lt;br /&gt;&lt;span class="pl"&gt;定价:&lt;/span&gt; 38.00元&lt;br /&gt;&lt;span class="pl"&gt;ISBN:&lt;/span&gt; 9787111088622&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;     &lt;span&gt;C++语言的设计和演化&lt;/span&gt;     &lt;/h1&gt;                                        &lt;div class="subject clearfix"&gt;              &lt;div id="mainpic"&gt;&lt;a class="nbg" href="http://img1.douban.com/lpic/s1081652.jpg" title="C++语言的设计和演化"&gt;                  &lt;img src="http://img1.douban.com/mpic/s1081652.jpg" title="点击看大图" alt="C++语言的设计和演化" rel="v:photo" /&gt;              &lt;/a&gt;&lt;br /&gt;    &lt;/div&gt;&lt;div id="info"&gt;&lt;span&gt;&lt;span class="pl"&gt;作者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/%5B%E7%BE%8E%5D%20Bjarne%20Stroustrup"&gt;[美] Bjarne Stroustrup&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="pl"&gt;译者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/%E8%A3%98%E5%AE%97%E7%87%95"&gt;裘宗燕&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pl"&gt;出版社:&lt;/span&gt; 机械工业出版社&lt;br /&gt;&lt;span class="pl"&gt;出版年:&lt;/span&gt; 2002-1&lt;br /&gt;&lt;span class="pl"&gt;页数:&lt;/span&gt; 370&lt;br /&gt;&lt;span class="pl"&gt;定价:&lt;/span&gt; 48.00元&lt;br /&gt;&lt;span class="pl"&gt;装帧:&lt;/span&gt; 平装16开&lt;br /&gt;&lt;span class="pl"&gt;ISBN:&lt;/span&gt; 9787111090984&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;     &lt;span&gt;图形程序开发人员指南&lt;/span&gt;     &lt;/h1&gt;                                                      &lt;div id="mainpic"&gt;&lt;a class="nbg" href="http://img3.douban.com/lpic/s1449826.jpg" title="图形程序开发人员指南"&gt;                  &lt;img src="http://img3.douban.com/mpic/s1449826.jpg" title="点击看大图" alt="图形程序开发人员指南" rel="v:photo" /&gt;              &lt;/a&gt;&lt;br /&gt;   &lt;/div&gt;&lt;span class="pl"&gt;副标题:&lt;/span&gt; Michael Abrash's Graphics Programming Balck Book Special Edition&lt;br /&gt;&lt;span&gt;&lt;span class="pl"&gt;作者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/Michael%20Abrash"&gt;Michael Abrash&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="pl"&gt;译者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/%E5%89%8D%E5%AF%BC%E5%B7%A5%E4%BD%9C%E5%AE%A4"&gt;前导工作室&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pl"&gt;出版社:&lt;/span&gt; 机械工业出版社&lt;br /&gt;&lt;span class="pl"&gt;出版年:&lt;/span&gt; 1998&lt;br /&gt;&lt;span class="pl"&gt;页数:&lt;/span&gt; 1064&lt;br /&gt;&lt;span class="pl"&gt;定价:&lt;/span&gt; 128&lt;br /&gt;&lt;span class="pl"&gt;装帧:&lt;/span&gt; 平装&lt;br /&gt;&lt;span class="pl"&gt;ISBN:&lt;/span&gt; 9787111063964&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;     &lt;span&gt;DOOM启世录&lt;/span&gt;     &lt;/h1&gt;                                                      &lt;div id="mainpic"&gt;&lt;a class="nbg" href="http://img3.douban.com/lpic/s1488795.jpg" title="DOOM启世录"&gt;                  &lt;img src="http://img3.douban.com/mpic/s1488795.jpg" title="点击看大图" alt="DOOM启世录" rel="v:photo" /&gt;              &lt;/a&gt;&lt;br /&gt;   &lt;/div&gt;&lt;span&gt;&lt;span class="pl"&gt;作者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/David%20Kushner"&gt;David Kushner&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="pl"&gt;译者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/%E5%AD%99%E6%8C%AF%E5%8D%97"&gt;孙振南&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pl"&gt;出版社:&lt;/span&gt; 电子工业出版社&lt;br /&gt;&lt;span class="pl"&gt;出版年:&lt;/span&gt; 2004-04-01&lt;br /&gt;&lt;span class="pl"&gt;页数:&lt;/span&gt; 318&lt;br /&gt;&lt;span class="pl"&gt;定价:&lt;/span&gt; 29&lt;br /&gt;&lt;span class="pl"&gt;ISBN:&lt;/span&gt; 9787505396814&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;     &lt;span&gt;程序员修炼之道&lt;/span&gt;     &lt;/h1&gt;                                                      &lt;div id="mainpic"&gt;&lt;a class="nbg" href="http://img3.douban.com/lpic/s3957204.jpg" title="程序员修炼之道"&gt;                  &lt;img src="http://img3.douban.com/mpic/s3957204.jpg" title="点击看大图" alt="程序员修炼之道" rel="v:photo" /&gt;              &lt;/a&gt;&lt;br /&gt;   &lt;/div&gt;&lt;span class="pl"&gt;副标题:&lt;/span&gt; 从小工到专家&lt;br /&gt;&lt;span&gt;&lt;span class="pl"&gt;作者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/Andrew%20Hunt"&gt;Andrew Hunt&lt;/a&gt; / &lt;a href="http://book.douban.com/search/David%20Thomas"&gt;David Thomas&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pl"&gt;出版社:&lt;/span&gt; 电子工业出版社&lt;br /&gt;&lt;span class="pl"&gt;出版年:&lt;/span&gt; 2004-3-1&lt;br /&gt;&lt;span class="pl"&gt;页数:&lt;/span&gt; 360&lt;br /&gt;&lt;span class="pl"&gt;定价:&lt;/span&gt; 48.00&lt;br /&gt;&lt;span class="pl"&gt;装帧:&lt;/span&gt; 平装(无盘)&lt;br /&gt;&lt;span class="pl"&gt;ISBN:&lt;/span&gt; 9787505397194&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;ref: &lt;a href="http://book.douban.com/subject/1096216/"&gt;http://book.douban.com/subject/1096216/&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;中國雖然有其體制上的問題, 但有時候真的很羨慕他們的電腦專業圖書, 上述的書籍有些我已經有英文版本, 但由於我的英文能力實在無法消化這些書籍。如果因為語言的問題而不能得到這些書裡頭的知識, 實在可惜。&lt;br /&gt;&lt;br /&gt;不過幸運的是, 簡體中文的閱讀再怎麼不習慣, 也不會比英文慢, 目前透過&lt;b&gt;&lt;a href="http://www.wa5.com.tw/index.asp"&gt;挖書網&lt;/a&gt;&lt;/b&gt;看能不能購得這些書籍。&lt;br /&gt;&lt;br /&gt;有在做對岸電腦圖書的出版社, 要不要出個繁體中文版阿！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-3081466936743685686?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/3081466936743685686/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=3081466936743685686' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/3081466936743685686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/3081466936743685686'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/blog-post_29.html' title='我也想看這些中文書籍'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-638950812945981365</id><published>2011-12-28T23:30:00.013+08:00</published><updated>2012-02-01T13:18:06.917+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='電腦相關'/><category scheme='http://www.blogger.com/atom/ns#' term='雜七雜八'/><category scheme='http://www.blogger.com/atom/ns#' term='computer book'/><title type='text'>聊聊作業系統書籍 - Orange's 一個作業系統的實現</title><content type='html'>對於需要或有興趣的專業書籍, 我一向不吝嗇, 有人肯出這樣的書我就很高興了, 怎麼會嫌貴呢？這裡提到我購買的三本中文書籍。其他有名的英文大作或是教科書就不提了。&lt;br /&gt;&lt;br /&gt;我並不喜歡教科書的內容, 那只能有個基本概念, 無法實作出作業系統, 而無法實作的東西, 我認為要稱得上「了解」二字, 恐怕會如同 0 到 1 這般的遙遠。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/ToUA_sn1d39ptYcJa0NvxNMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-GTMxHU6alHQ/TnnkvKBtcmI/AAAAAAAATXM/MVMiL3mXIok/s288/IMGA0831.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/fj0d4KvrHMFJ9duBkwMtVNMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-vkkzjMW3MBM/TuNU0Ed95NI/AAAAAAAAXTY/swp8M4txQTA/s288/P1010035.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;基本上我是&lt;a href="http://www.tenlong.com.tw/items/9867309537?item_id=56264"&gt;以Orange's 一個作業系統的實現&lt;/a&gt;為主, 其他兩本為輔, 因為其他兩本有提到 GUI 的實作, 這也是我有興趣的部份, 早期是以&lt;a href="http://www.tenlong.com.tw/items/9867199642?item_id=32028"&gt;世紀末軟體革命&lt;/a&gt;作為我研究 GUI 實作書籍, 不過該書在這部份寫的不是很詳細, 現在有其他兩本可以輔助了, 而且完全用自己寫的程式碼來實作, 使用 c/bios function call, 那不算是自己完成所有的東西, library 實在幫我們完成太多工作了。這本定價也是三本當中最便宜的, 定價是 580, 其實不算便宜, 但以書中的內容來說實在是太便宜了。本書使用 nasm 為組譯器, 我參考&lt;a href="http://descent-incoming.blogspot.com/2010/03/blog-post.html"&gt;杨文博&lt;/a&gt;的電子書學習 gas at &amp;amp; t syntax 的版本, 我還是比較習慣 gnu toolchain。&lt;br /&gt;&lt;br /&gt;很巧的是, 這三本書分別是中國、日本、台灣的作者, 真是高興台灣的作者也能出版這樣的書籍, 也很高興台灣的出版社願意出版, 雖然高達 750 的定價 (作業系統開發實戰手冊：以開發一個視窗多工作業系統為例), 但我依然覺得以這樣的知識來說實在值得; 日本人寫的&lt;b&gt;30天打造OS！作業系統自作入門&lt;/b&gt;則是 780, 在這三本書當中是最貴的, 基本上不知道是不是翻譯的關係, 有點覺得怪怪的, 但還不至於影響理解, 我覺得讀來也算有趣。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/SPFLCIzk7w-aCJHCyuOw19MTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-arr70Kl8GfY/TvvWaOfb9GI/AAAAAAAAXzE/ENghCKEKk6E/s288/IMGP7504.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/2JBcM4sL409qvR8l3argp9MTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-juvY32RIlsU/TnnkuUj98pI/AAAAAAAATXM/h1-Tun_lKlE/s288/IMGA0830.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;左邊是第一版, 右邊是第二版, 第一版還沒消化完畢又出第二版了, 我的學習實在太慢。可惜這本好書被製作的很糟糕, &lt;b&gt;松崗&lt;/b&gt;得好好加油才是, 以同樣製作中國出版社的電腦書籍來說, 碁峰的&lt;a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010456858"&gt;程式設計師的自我修養：連結、載入、程式庫&lt;/a&gt;就製作的很棒, 描述語句、翻譯辭彙在在令人讀來輕鬆愉快, 沒有奇怪的辭彙、惱人的中國技術術語。真是可惜了這本書, 直接買簡體版可能不會差太多。製作簡體中文的書籍難度應該容易許多, 如果因為出版社的不用心, 只做做繁體中文的工作, 那實在也太不尊重台灣支持你的讀者了。&lt;br /&gt;&lt;br /&gt;這書上有好多我的筆記, 不過大多不是心得, 而是我得把他的句子稍做改寫, 要不然讀來實在不愉快。明明組合語言對岸是稱為&lt;b&gt;匯編&lt;/b&gt;, 真不知道為什麼繁體中文版本變成&lt;b&gt;編譯&lt;/b&gt;, 偏偏這又會讓人誤會是要編譯 C 語言的那個意思, 這可讓我手動改了不少次。還有&lt;b&gt;使用者/被使用者&lt;/b&gt;這兩個詞, 我看了很久之後才知道這是指 caller/callee, 台灣應該是翻譯成&lt;b&gt;呼叫者/被呼叫者&lt;/b&gt;, 讓我在權限 stack 切換那邊卡了很久。&lt;br /&gt;&lt;br /&gt;書中第三章的保護模式介紹我非常喜愛, 在 dos 環境下可以一個功能慢慢測試, 從進入保護模式、權限切換、ldt 的使用、分頁表 ... 得把這些程式都看懂, 執行過一遍, 那才能稱上了解了 x86 保護模式。不過我看得異常辛苦, 這章的知識實在是太硬, 我已經挑戰好幾次。總算有點懂了。&lt;br /&gt;&lt;br /&gt;我遇到的一開始困難是組合語言, 我不算是會組合語言, 第三章有關組合語言的程式碼實在讓我大吃苦頭, 但在努力學習之下, 我還是不會組合語言 ... 冏。不過那沒關係, 只要學習到寫 OS 夠用的就可以了, 但也不輕鬆, 畢竟操作 gdt 切入 x86 保護模式, page tabe, idt, 這些組合語言在一般的 os 環境下, 根本不會用到, 要熟悉他們其實是很困難的。還有 x86 其特的 segment 定址方式, 在記憶體內容的變數, 幾乎都和使用 C 語言宣告變數不同, 每每總是將錯誤的位址填到所執行的組合語言指令, 如何 debug 也是很麻煩的問題, 我試過書上幾種方式, 成效總是不章, 還是靠著很多苦功才找出錯誤。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;再來是 x86 的硬體知識, 怎麼切入保護模式、權限切換、page tabe ... 疑 ... 怎麼和上面一樣? 因為本來就有相關, 你也不能說我一直在寫重複的東西。這些知識並不容易理解, 而且必須搭配程式碼的實作, 才能真正的知道。&lt;br /&gt;&lt;br /&gt;使用 gas at&amp;amp;t 語法也讓我的學習之路上佈滿荊棘, 我非常堅持要使用 gas at&amp;amp;t 語法, 偏偏這本書使用的是 nasm intel 語法, 好在有&lt;a href="http://descent-incoming.blogspot.com/2010/03/blog-post.html"&gt;杨文博&lt;/a&gt;的版本, 讓我一步一步把本書的程式改成 at&amp;amp;t 語法, 也當作是 gas at&amp;amp;t 的練習, 現在我已經比較習慣 at&amp;amp;t 的語法了。&lt;br /&gt;&lt;br /&gt;後面還有長長的章節, 要繼續慢慢克服了。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;這是&lt;a href="http://www.tenlong.com.tw/items/9867309537?item_id=56264"&gt;以Orange's 一個作業系統的實現&lt;/a&gt; google group 論壇: &lt;a href="https://groups.google.com/group/osfromscratch/topics"&gt;https://groups.google.com/group/osfromscratch/topics&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-638950812945981365?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/638950812945981365/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=638950812945981365' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/638950812945981365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/638950812945981365'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/oranges.html' title='聊聊作業系統書籍 - Orange&apos;s 一個作業系統的實現'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-GTMxHU6alHQ/TnnkvKBtcmI/AAAAAAAATXM/MVMiL3mXIok/s72-c/IMGA0831.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-5838654284409850008</id><published>2011-12-27T14:50:00.004+08:00</published><updated>2011-12-27T14:58:17.859+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='電腦相關'/><title type='text'>將 e-mail 用 base64 編碼</title><content type='html'>在網路上直接放上 email 會被搜尋引擎找到, 有侵犯隱私的風險,&lt;br /&gt;所以有人會轉成圖檔的方式來避免這問題。&lt;br /&gt;ref: &lt;a href="http://img4me.com/"&gt;http://img4me.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;在 &lt;a href="http://solrex.org/"&gt;http://solrex.org/&lt;/a&gt; 看到用 base 64 來編碼, 也可以避免被搜尋引擎找到。&lt;br /&gt;&lt;br /&gt;encode:&lt;br /&gt;echo -n 'name@mail.com'|base64&lt;br /&gt;&lt;br /&gt;decode:&lt;br /&gt;echo -n 'ZGVzY2VudDBAZ21haWwuY29t' | base64 -d&lt;br /&gt;&lt;br /&gt;上述指令在 linux 下執行。噁 ... 我透露出我的 e-mail 了。XD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-5838654284409850008?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/5838654284409850008/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=5838654284409850008' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/5838654284409850008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/5838654284409850008'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/e-mail-base64.html' title='將 e-mail 用 base64 編碼'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-4165178610067348738</id><published>2011-12-24T21:17:00.002+08:00</published><updated>2011-12-24T21:20:50.164+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜七雜八'/><title type='text'>烏克麗麗/ukulele</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://portable.tv/wp-content/uploads/2011/07/elvis_ukulele.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px; height: 497px;" src="http://portable.tv/wp-content/uploads/2011/07/elvis_ukulele.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;很有趣的小樂器, 騎單車背吉他實在太大隻, 這個好多了。&lt;br /&gt;&lt;br /&gt;烏克麗麗: &lt;a href="http://zh.wikipedia.org/wiki/%E7%83%8F%E5%85%8B%E9%BA%97%E9%BA%97"&gt;http://zh.wikipedia.org/wiki/%E7%83%8F%E5%85%8B%E9%BA%97%E9%BA%97&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-4165178610067348738?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/4165178610067348738/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=4165178610067348738' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/4165178610067348738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/4165178610067348738'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/ukulele.html' title='烏克麗麗/ukulele'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-7745137085795405400</id><published>2011-12-23T14:52:00.000+08:00</published><updated>2011-12-23T14:53:04.955+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜七雜八'/><title type='text'>taaze 的二手書販賣服務</title><content type='html'>家裡書不少的可以參考看看。&lt;br /&gt;&lt;a href="http://www.taaze.tw/sell_used_books.html"&gt;http://www.taaze.tw/sell_used_books.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-7745137085795405400?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/7745137085795405400/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=7745137085795405400' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7745137085795405400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7745137085795405400'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/taaze.html' title='taaze 的二手書販賣服務'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-2966565117776007976</id><published>2011-12-23T10:49:00.007+08:00</published><updated>2011-12-25T14:50:57.877+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='廢鐵號單車遊記'/><title type='text'>20111222 台南星光小徑夜騎-耶誕燈飾</title><content type='html'>騎乘日期: 20111222&lt;br /&gt;踩踏里程: ?? KM&lt;br /&gt;難易程度: 易&lt;br /&gt;車種: 廢鐵&lt;br /&gt;&lt;br /&gt;我決定給&lt;b&gt;廢鐵號&lt;/b&gt;一個 label 了, 因為它不只是我的通勤車, 在慢慢習慣腳煞的方式後, 我也打算用它來完成某些單車旅行。&lt;br /&gt;&lt;br /&gt;今天跟的團體是&lt;a href="http://www.facebook.com/groups/234851949866953/?notif_t=group_activity"&gt;台南星光小徑&lt;/a&gt;, 在網路世界中花了點時間, 找到這個團體, 我已經好久好久沒有跟團騎車, 這段期間甚至也沒踩下多少踏版, 人體汽肛都快縮缸了。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/7G7QbetS27qmy6KE3_M-utMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-AQ11aRDd2Pc/TvPFq5MQpxI/AAAAAAAAXbs/6usBs-6mqDc/s288/P1010158.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/DKlWcxUZZSY0Y7CfO4Q8-dMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-8cWaYz5s0Qw/TvPFtSM8XGI/AAAAAAAAXbw/IUsoyNuOCTI/s288/P1010159.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;20:00 先到集合地點台南新天地新光三越集合, 今天晚氣溫偏冷, 穿著大外套出門, 一開始的寒風令人畏懼, 不過在幾分鐘的踩踏過程中, 已經將所有寒意驅逐完畢, 一股暖流則是慢慢的竄進全身。「好舒服阿！已經有一陣子沒這麼踩著踏版了！」&lt;br /&gt;&lt;br /&gt;到集合地點一看到大家的車, 我心裡頭有點疑惑:「怎麼小徑團來的都是大車??」讓我感到新奇的是 fixed gear, 我終於看到實車了, 這次來了四台, 每一台都有其特色, 造型很亮麗、鮮穎, 由於安全考量, 這幾台 fixed gear 都有安裝前煞車, 一起騎行時, 也看到車友們是如何讓 fixed gear 停下來, 很酷的煞車方式, 不過煞車的確需要技巧, 真的很有趣。&lt;br /&gt;&lt;br /&gt;這團的車友不少, 讓我有點驚訝, 在單車風潮退去的這時, 還能吸引這麼多的車友, 實在不容易, 我來預計有十個就不錯了。&lt;br /&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/smelAz45KoDkmnEj2x9NFNMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-FLlZAfQ8rds/TvP5zf8kZwI/AAAAAAAAXh8/k9FrmLKpEMI/s640/396121_319424828077615_100000303012947_1197735_1250366426_n.jpg" height="425" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="https://picasaweb.google.com/105103177642172932400/20111222?authuser=0&amp;amp;feat=embedwebsite"&gt;20111222 台南星光小徑夜騎-耶誕燈飾&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;總是會有的大合照, 裡頭完全沒有認識的人。XD 出發吧！&lt;br /&gt;&lt;br /&gt;第一站是&lt;a href="http://zh.wikipedia.org/wiki/%E8%87%BA%E5%8D%97%E9%83%BD%E6%9C%83%E5%85%AC%E5%9C%92"&gt;台南都會公園&lt;/a&gt;, 聽起來很厲害的公園, 不過位置有點偏僻, 得花上好幾輪的踩踏, 才能到達。大隊人馬的速度不快, 緩慢輕鬆的騎著, 比起&lt;a href="http://www.mobile01.com/topicdetail.php?f=312&amp;amp;t=1393015&amp;amp;p=52#30195167"&gt;新竹某團&lt;/a&gt;的輕鬆騎真的輕鬆不少。XD&lt;br /&gt;&lt;br /&gt;台一線上有些地方較為昏暗, 沒有大隊人馬, 騎來可能有點危險, 大約半小時之後, 整群人抵達了&lt;a href="http://zh.wikipedia.org/wiki/%E8%87%BA%E5%8D%97%E9%83%BD%E6%9C%83%E5%85%AC%E5%9C%92"&gt;台南都會公園&lt;/a&gt;, 這裡人煙稀少, 晚上沒人陪的話可千萬不要自己一人過來, 廁所的燈光無法點亮, 有些工程還在繼續的施工, 白天來會精彩些。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/v16xUiOC_FN0JASmbFHhPNMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;" src="https://lh4.googleusercontent.com/-lToPlLHmALE/TvPGzxURPII/AAAAAAAAXd0/prkZBqF37Gk/s400/P1010192.JPG" height="400" width="300" /&gt;&lt;/a&gt;在這裡停留不少時間, 和不認識的車友們聊個天, 談談單車, 總是有些共同話題。我非常喜愛其中一位車友的改裝, 這是用來載他的愛犬, 讓我想到火影忍者裡頭的牙和赤丸, 人犬一車, 那模樣實在可愛, 也難怪該車友願意打造如此的優質環境。&lt;br /&gt;&lt;br /&gt;後面的鐵架是該車友自己打造, 我一向對貨架有著無比的興趣, 特殊自製的貨架一定不能放過, 仔細的聽著主人述說如何完成, 我也想打造自己心中夢幻貨架。&lt;br /&gt;&lt;br /&gt;回到市區, 拜最近的耶誕節之賜, 台南市政府在民生綠園週邊打造了不少耶誕節的裝飾, 架上了高高的耶誕樹, 霓虹閃爍的燈光, 還真有耶誕節的氣氛。&lt;br /&gt;&lt;br /&gt;現場早已圍繞不少的遊客、路人, 甚至還有特地來拍照的攝影師, 架起專業的攝影腳架, 仔細注視著鏡頭, 抓取最後的攝影角度, 原來, 台南也是這麼美麗。&lt;br /&gt;&lt;br /&gt;附近的消防局也應景, 將一輛消防車裝飾起來, 雖然漂亮, 不過和平常的救護、打火印象, 還是覺得格格不入。&lt;br /&gt;&lt;br /&gt;圓環週邊還有座教堂, 不用說, 當然也是滿滿的耶誕裝飾, 前方好幾顆耶誕樹點綴了兩旁的空間, 教堂本身則佈滿了各式各樣的燈泡, 白光、黃光彼此交錯, 五顏六色, 令人目不暇給。聽說只到 12/25 凌晨左右, 台南的朋友有空就去繞繞, 在整片燈光的照映下, 真的很有過節的氛圍。&lt;br /&gt;&lt;br /&gt;將圓環附近都繞過拍照後, 時間已晚, 活動也在這時候結束, 這次的跟團不累、輕鬆愉快, 我踩著踏板, 準備下個階段的美食,吃個熱騰騰的湯圓, 今天可是冬至呢！&lt;br /&gt;&lt;br /&gt;&lt;embed type="application/x-shockwave-flash" src="https://picasaweb.google.com/s/c/bin/slideshow.swf" flashvars="host=picasaweb.google.com&amp;amp;hl=en_US&amp;amp;feat=flashalbum&amp;amp;RGB=0x000000&amp;amp;feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2F105103177642172932400%2Falbumid%2F5689108040200667985%3Falt%3Drss%26kind%3Dphoto%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer" height="400" width="600"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-2966565117776007976?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/2966565117776007976/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=2966565117776007976' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/2966565117776007976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/2966565117776007976'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/20111222.html' title='20111222 台南星光小徑夜騎-耶誕燈飾'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-AQ11aRDd2Pc/TvPFq5MQpxI/AAAAAAAAXbs/6usBs-6mqDc/s72-c/P1010158.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-3969722168064003384</id><published>2011-12-23T10:30:00.004+08:00</published><updated>2011-12-29T17:36:17.077+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='廢鐵號單車遊記'/><title type='text'>保安車站</title><content type='html'>騎乘日期: 20111221&lt;br /&gt;踩踏里程: ?? KM&lt;br /&gt;難易程度: 易&lt;br /&gt;車種: 廢鐵&lt;br /&gt;&lt;br /&gt;總算把廢鐵號打足了氣, 已經沈寂很久的廢鐵號, 再不騎出去, 真的要變成廢鐵了。廢鐵號是台很精簡的腳煞單車, 不過不是什麼高貴的車子, 所以沒有輕快的踏板, 輕量化的車身, 說實在的, 踩起來還蠻費力的。不過這不影響我對他的喜愛, 五大名車中, 我對每一台的喜愛都是一樣的。&lt;br /&gt;&lt;br /&gt;好久沒能放縱的鼓動踏板, 今天計劃的地方可以小試伸手, 從台南火車站出發, 到保安車站, 來回大概一小時左右, 對廢鐵號來說, 嗯！應該沒問題吧！&lt;br /&gt;&lt;br /&gt;從北門路一路直走, 接到台一線, 車輛不多, 騎來舒暢愉快, 有好久沒能像這樣盡情的踩著踏板, 果然, 在我的生命中, 一天沒讀書不至於面目可憎, 但一天不轉動輪胎, 那還真的有點不舒服。人體汽肛已經好久沒有單車相關文章出現了。&lt;br /&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/aNlA8eTSBtS5X9wzyxck-nwffJId5mmZq9Wo8tjbPA0?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-bRrIQYjQriw/TvGQxLcvtAI/AAAAAAAAXaM/OUIGvXTeZSM/s640/P1010120.JPG" width="640" height="480" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="https://picasaweb.google.com/105103177642172932400/20111221?authuser=0&amp;amp;authkey=Gv1sRgCNLMtKyBoLqRYw&amp;amp;feat=embedwebsite"&gt;20111221 保安車站&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;老樣子, 雖然最後沒照著 google map 上的路線, 但還是讓我找到保安車站了, 小小月台挺在那, 稀疏的旅客來來去去, 另一邊則群聚了一少數人, 喝茶聊天, 南部的生活也許沒台北那麼奢華亮麗, 但總是給人淳樸安寧的恬靜氣息。我似乎愛上了這樣緩慢的步調, 就像我踩著單車, 慢慢的轉動著。&lt;br /&gt;&lt;br /&gt;大車站有大車站的繁華熱鬧, 小車站則讓人疼愛, 感受車站附近的寧靜, 殘破古老的民房, 訴說著過去的歷史, 也讓我回想過去的磚瓦建築, 在高樓大廈到處林立的現代, 還能不能保有這些古意盎然的建築呢？&lt;br /&gt;&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/ieCIqXZWegSUjetSmJFiFnwffJId5mmZq9Wo8tjbPA0?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-mUMWtk-Y7sM/TvGRV0m4_1I/AAAAAAAAXYA/4JAJSepTgwI/s640/P1010132.JPG" width="640" height="480" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;回頭的鐵橋倒映在水面上, 看得我直呼驚奇, 不禁拿出相機把握這一刻, 附近的人們也許已經司空見慣, 但對我來說是驚豔的一幕。騎了稍長的距離後, 對於腳煞單車似乎又習慣了點, 無法自由自在的倒踩是讓我覺得最困擾的一點, 騎車有個習慣, 總是會不由自主地倒踩, 就讓廢鐵讓我改變這個習慣吧！&lt;br /&gt;&lt;br /&gt;「呼！」全身覺得舒服多了, 果然, 還是要騎車晃晃, 身體才覺得舒服。&lt;br /&gt;&lt;br /&gt;&lt;embed type="application/x-shockwave-flash" src="https://picasaweb.google.com/s/c/bin/slideshow.swf" flashvars="host=picasaweb.google.com&amp;amp;hl=en_US&amp;amp;feat=flashalbum&amp;amp;RGB=0x000000&amp;amp;feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2F105103177642172932400%2Falbumid%2F5688486812128404369%3Falt%3Drss%26kind%3Dphoto%26authkey%3DGv1sRgCNLMtKyBoLqRYw%26hl%3Den_US" pluginspage="http://www.macromedia.com/go/getflashplayer" width="600" height="400"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-3969722168064003384?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/3969722168064003384/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=3969722168064003384' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/3969722168064003384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/3969722168064003384'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/blog-post_23.html' title='保安車站'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-bRrIQYjQriw/TvGQxLcvtAI/AAAAAAAAXaM/OUIGvXTeZSM/s72-c/P1010120.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-1930343532730260238</id><published>2011-12-23T10:28:00.000+08:00</published><updated>2011-12-23T10:29:43.754+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rabbitmq'/><title type='text'>Why does RabbitMQ keep breaking from a corrupt persister log file?</title><content type='html'>&lt;div&gt;ref: &lt;a href="http://stackoverflow.com/questions/8371659/why-does-rabbitmq-keep-breaking-from-a-corrupt-persister-log-file"&gt;http://stackoverflow.com/questions/8371659/why-does-rabbitmq-keep-breaking-from-a-corrupt-persister-log-file&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;/var/log/rabbitmq/startup_log&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Starting all nodes...&lt;/div&gt;&lt;div&gt;Starting node rabbit@ubuntu...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;+---+   +---+&lt;/div&gt;&lt;div&gt;|   |   |   |&lt;/div&gt;&lt;div&gt;|   |   |   |&lt;/div&gt;&lt;div&gt;|   |   |   |&lt;/div&gt;&lt;div&gt;|   +---+   +-------+&lt;/div&gt;&lt;div&gt;|                   |&lt;/div&gt;&lt;div&gt;| RabbitMQ  +---+   |&lt;/div&gt;&lt;div&gt;|           |   |   |&lt;/div&gt;&lt;div&gt;|   v1.7.2  +---+   |&lt;/div&gt;&lt;div&gt;|                   |&lt;/div&gt;&lt;div&gt;+-------------------+&lt;/div&gt;&lt;div&gt;AMQP 8-0&lt;/div&gt;&lt;div&gt;Copyright (C) 2007-2010 LShift Ltd., Cohesive Financial Technologies LLC., and Rabbit Technologies Ltd.&lt;/div&gt;&lt;div&gt;Licensed under the MPL.  See http://www.rabbitmq.com/&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;node          : rabbit@ubuntu&lt;/div&gt;&lt;div&gt;app descriptor: /usr/lib/rabbitmq/lib/rabbitmq_server-1.7.2/sbin/../ebin/rabbit.app&lt;/div&gt;&lt;div&gt;home dir      : /var/lib/rabbitmq&lt;/div&gt;&lt;div&gt;cookie hash   : VXmIpXwD/hkaDDQ+FkVMJA==&lt;/div&gt;&lt;div&gt;log           : /var/log/rabbitmq/rabbit.log&lt;/div&gt;&lt;div&gt;sasl log      : /var/log/rabbitmq/rabbit-sasl.log&lt;/div&gt;&lt;div&gt;database dir  : /var/lib/rabbitmq/mnesia/rabbit&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;starting internal event notification system                           ...done&lt;/div&gt;&lt;div&gt;starting logging server                                               ...done&lt;/div&gt;&lt;div&gt;starting database                                                     ...done&lt;/div&gt;&lt;div&gt;-- kernel ready&lt;/div&gt;&lt;div&gt;starting alarm handler                                                ...done&lt;/div&gt;&lt;div&gt;starting queue supervisor                                             ...done&lt;/div&gt;&lt;div&gt;starting node monitor                                                 ...done&lt;/div&gt;&lt;div&gt;starting cluster router                                               ...done&lt;/div&gt;&lt;div&gt;-- core initialized&lt;/div&gt;&lt;div&gt;starting empty DB check                                               ...done&lt;/div&gt;&lt;div&gt;starting codec correctness check                                      ...done&lt;/div&gt;&lt;div&gt;starting exchange recovery                                            ...done&lt;/div&gt;&lt;div&gt;starting queue recovery                                               ...done&lt;/div&gt;&lt;div&gt;starting persister                                                    ...BOOT ERROR: FAILED&lt;/div&gt;&lt;div&gt;Reason: {{badmatch,&lt;/div&gt;&lt;div&gt;             {error,&lt;/div&gt;&lt;div&gt;                 {{{case_clause,&lt;/div&gt;&lt;div&gt;                       {error,&lt;/div&gt;&lt;div&gt;                           {not_a_log_file,&lt;/div&gt;&lt;div&gt;                               "/var/lib/rabbitmq/mnesia/rabbit/rabbit_persister.LOG"}}},&lt;/div&gt;&lt;div&gt;                   [{rabbit_persister,init,1},&lt;/div&gt;&lt;div&gt;                    {gen_server,init_it,6},&lt;/div&gt;&lt;div&gt;                    {proc_lib,init_p_do_apply,3}]},&lt;/div&gt;&lt;div&gt;                  {child,undefined,rabbit_persister,&lt;/div&gt;&lt;div&gt;                      {rabbit_persister,start_link,[]},&lt;/div&gt;&lt;div&gt;                      transient,100,worker,&lt;/div&gt;&lt;div&gt;                      [rabbit_persister]}}}},&lt;/div&gt;&lt;div&gt;         [{rabbit_sup,start_child,2},&lt;/div&gt;&lt;div&gt;          {rabbit,'-run_boot_step/1-lc$^1/1-1-',1},&lt;/div&gt;&lt;div&gt;          {rabbit,run_boot_step,1},&lt;/div&gt;&lt;div&gt;          {rabbit,'-start/2-lc$^0/1-0-',1},&lt;/div&gt;&lt;div&gt;          {rabbit,start,2},&lt;/div&gt;&lt;div&gt;          {application_master,start_it_old,4}]}&lt;/div&gt;&lt;div&gt;{"init terminating in do_boot",{{nocatch,{error,{cannot_start_application,rabbit,{bad_return,{{rabbit,start,[normal,[]]},{'EXIT',{rabbit,failure_during_boot}}}}}}},[{init,start_it,1},{init,start_em,1}]}}&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-1930343532730260238?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/1930343532730260238/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=1930343532730260238' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/1930343532730260238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/1930343532730260238'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/why-does-rabbitmq-keep-breaking-from.html' title='Why does RabbitMQ keep breaking from a corrupt persister log file?'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-6926982401245469295</id><published>2011-12-18T01:31:00.004+08:00</published><updated>2011-12-18T01:45:14.756+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='write_os'/><title type='text'>x86: enter to ring3</title><content type='html'>照著&lt;b&gt;自己動手寫作業系統 (杨文博和于渊這兩本)&lt;/b&gt;, 終於來到了權限切換, 進度真是緩慢, 這才不過是第三章一半 (&lt;b&gt;于渊版本&lt;/b&gt;) 的內容。我離完成整個 OS 還有多遠呢？翻翻後面的章節, 還真的蠻遠的 ...&lt;br /&gt;&lt;br /&gt;這次的內容很簡單, 從 ring0 切換到 ring3, code 也很簡單。&lt;br /&gt;&lt;br /&gt;設定好 ring3 的 stack 和程式碼區段還有各自的 gtd descriptor, selector 配合下面的五行 push 指令, 就可以從 ring0 切換到 ring3 了。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line273"&gt;273&lt;/a&gt; &lt;strong&gt;  pushl&lt;/strong&gt; $(SELECT_STACKR3)&lt;br /&gt;&lt;a name="line274"&gt;274&lt;/a&gt; &lt;strong&gt;  pushl&lt;/strong&gt; $(TopOfStackR3)&lt;br /&gt;&lt;a name="line275"&gt;275&lt;/a&gt; &lt;strong&gt;  pushl&lt;/strong&gt; $(SELECT_CODER3)&lt;br /&gt;&lt;a name="line276"&gt;276&lt;/a&gt; &lt;strong&gt;  pushl&lt;/strong&gt; $0&lt;br /&gt;&lt;a name="line277"&gt;277&lt;/a&gt; &lt;strong&gt;  lret&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;從 ring3 切到 ring0 就沒這麼容易了, 得花點時間消化。&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;cg_to_r3.S&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt;  1&lt;/a&gt; &lt;span style="color:4444FF;"&gt;/*&lt;br /&gt;&lt;a name="line2"&gt;  2&lt;/a&gt; &lt;strong&gt;   ref&lt;/strong&gt;: Orange'S：一个操作系统的实现&lt;br /&gt;&lt;a name="line3"&gt;  3&lt;/a&gt; &lt;strong&gt;   practice&lt;/strong&gt; enter to ring3.&lt;br /&gt;&lt;a name="line4"&gt;  4&lt;/a&gt;  */&lt;br /&gt;&lt;a name="line5"&gt;  5&lt;/a&gt; /* chapter3/1/loader.S&lt;br /&gt;&lt;a name="line6"&gt;  6&lt;/a&gt;&lt;br /&gt;&lt;a name="line7"&gt;  7&lt;/a&gt; &lt;strong&gt;   Author&lt;/strong&gt;: Wenbo Yang &amp;lt;solrex@gmail.com&amp;gt; &amp;lt;http://solrex.cn&amp;gt;&lt;br /&gt;&lt;a name="line8"&gt;  8&lt;/a&gt;&lt;br /&gt;&lt;a name="line9"&gt;  9&lt;/a&gt; &lt;strong&gt;   This&lt;/strong&gt; file is part of the source code of book &lt;span style="color:#008000;"&gt;"Write Your Own OS with Free&lt;br /&gt;&lt;a name="line10"&gt; 10&lt;/a&gt;    and Open Source Software"&lt;/span&gt;. Homepage @ &amp;lt;http://share.solrex.cn/WriteOS/&amp;gt;.&lt;br /&gt;&lt;a name="line11"&gt; 11&lt;/a&gt;&lt;br /&gt;&lt;a name="line12"&gt; 12&lt;/a&gt; &lt;strong&gt;   This&lt;/strong&gt; file is licensed under the GNU General Public License&lt;span style="color:#444444;"&gt;; either&lt;/span&gt;&lt;br /&gt;&lt;a name="line13"&gt; 13&lt;/a&gt; &lt;strong&gt;   version&lt;/strong&gt; 3 of the License, or (at your option) any later version.&lt;br /&gt;&lt;a name="line14"&gt; 14&lt;/a&gt; */&lt;br /&gt;&lt;a name="line15"&gt; 15&lt;/a&gt;&lt;br /&gt;&lt;a name="line16"&gt; 16&lt;/a&gt; #include &lt;span style="color:#008000;"&gt;"pm.h"&lt;/span&gt;&lt;br /&gt;&lt;a name="line17"&gt; 17&lt;/a&gt;&lt;br /&gt;&lt;a name="line18"&gt; 18&lt;/a&gt; #define video_addr_offset (video_addr-LABEL_DATA)&lt;br /&gt;&lt;a name="line19"&gt; 19&lt;/a&gt;&lt;br /&gt;&lt;a name="line20"&gt; 20&lt;/a&gt; .code16&lt;br /&gt;&lt;a name="line21"&gt; 21&lt;/a&gt; .text&lt;br /&gt;&lt;a name="line22"&gt; 22&lt;/a&gt; &lt;strong&gt;    jmp&lt;/strong&gt; LABEL_BEGIN     /* jump over the .data section. */&lt;br /&gt;&lt;a name="line23"&gt; 23&lt;/a&gt;&lt;br /&gt;&lt;a name="line24"&gt; 24&lt;/a&gt; /* NOTE! Wenbo-20080512: Actually here we put the normal .data section into&lt;br /&gt;&lt;a name="line25"&gt; 25&lt;/a&gt; &lt;strong&gt;   the&lt;/strong&gt; .code section. For application SW, it is not allowed. However, we are&lt;br /&gt;&lt;a name="line26"&gt; 26&lt;/a&gt; &lt;strong&gt;   writing&lt;/strong&gt; an OS. That is OK. Because there is no OS to complain about&lt;br /&gt;&lt;a name="line27"&gt; 27&lt;/a&gt; &lt;strong&gt;   that&lt;/strong&gt; behavior. :) */&lt;br /&gt;&lt;a name="line28"&gt; 28&lt;/a&gt;&lt;br /&gt;&lt;a name="line29"&gt; 29&lt;/a&gt; /* Global Descriptor Table */&lt;br /&gt;&lt;a name="line30"&gt; 30&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_GDT:&lt;/span&gt;          Descriptor  0,                        0, 0&lt;br /&gt;&lt;a name="line31"&gt; 31&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_NORMAL:&lt;/span&gt;  Descriptor  0,         0xffff, DA_DRW    # Normal descriptor is for back to real mode.&lt;br /&gt;&lt;a name="line32"&gt; 32&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_CODE32:&lt;/span&gt;  Descriptor  0,       (SegCode32Len - 1), (DA_C + DA_32)&lt;br /&gt;&lt;a name="line33"&gt; 33&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_CODE16:&lt;/span&gt;  Descriptor    0,         0xffff, DA_C      # 非一致程式碼段, 16&lt;br /&gt;&lt;a name="line34"&gt; 34&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_DATA:&lt;/span&gt;   Descriptor    0,      (DataLen-1), DA_DRW    # Data&lt;br /&gt;&lt;a name="line35"&gt; 35&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_STACK:&lt;/span&gt;  Descriptor    0,     TopOfStack, DA_DRWA+DA_32 # Stack, 32 位&lt;br /&gt;&lt;a name="line36"&gt; 36&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_TEST:&lt;/span&gt; Descriptor 0x500000, 0xffff, DA_DRW&lt;br /&gt;&lt;a name="line37"&gt; 37&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_LDT:&lt;/span&gt; Descriptor 0, (LDT_LEN-1), DA_LDT&lt;br /&gt;&lt;a name="line38"&gt; 38&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_VIDEO:&lt;/span&gt;   Descriptor  0xB8000, 0xffff, (DA_DRW+DA_DPL3)&lt;br /&gt;&lt;a name="line39"&gt; 39&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_CODECG:&lt;/span&gt;  Descriptor  0, (SEG_CODE_CG_LEN - 1), (DA_C + DA_32)&lt;br /&gt;&lt;a name="line40"&gt; 40&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_CODER3:&lt;/span&gt;  Descriptor  0, (SEG_CODER3_LEN - 1), (DA_C + DA_32 + DA_DPL3)&lt;br /&gt;&lt;a name="line41"&gt; 41&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DESC_STACKR3:&lt;/span&gt; Descriptor  0, (TopOfStackR3 - 1), (DA_DRWA + DA_32 + DA_DPL3)&lt;br /&gt;&lt;a name="line42"&gt; 42&lt;/a&gt;&lt;br /&gt;&lt;a name="line43"&gt; 43&lt;/a&gt; # Gates Descriptor&lt;br /&gt;&lt;a name="line44"&gt; 44&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_CG_TEST:&lt;/span&gt;   Gate  SELECT_CODE_CG, 0, 0xffff, (DA_386CGate + DA_DPL0)&lt;br /&gt;&lt;a name="line45"&gt; 45&lt;/a&gt;&lt;br /&gt;&lt;a name="line46"&gt; 46&lt;/a&gt; .set GdtLen, (. - LABEL_GDT)  /* GDT Length */&lt;br /&gt;&lt;a name="line47"&gt; 47&lt;/a&gt;&lt;br /&gt;&lt;a name="line48"&gt; 48&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;GdtPtr:&lt;/span&gt; .2byte  (GdtLen - 1)  /* GDT Limit */&lt;br /&gt;&lt;a name="line49"&gt; 49&lt;/a&gt;         .4byte  0             /* GDT Base */&lt;br /&gt;&lt;a name="line50"&gt; 50&lt;/a&gt;&lt;br /&gt;&lt;a name="line51"&gt; 51&lt;/a&gt; /* GDT Selector */&lt;br /&gt;&lt;a name="line52"&gt; 52&lt;/a&gt; .set SelectorNormal, (LABEL_DESC_NORMAL - LABEL_GDT)&lt;br /&gt;&lt;a name="line53"&gt; 53&lt;/a&gt; .set SelectorCode32, (LABEL_DESC_CODE32 - LABEL_GDT)&lt;br /&gt;&lt;a name="line54"&gt; 54&lt;/a&gt; .set SelectorCode16, (LABEL_DESC_CODE16 - LABEL_GDT)&lt;br /&gt;&lt;a name="line55"&gt; 55&lt;/a&gt; .set SelectorData, (LABEL_DESC_DATA         - LABEL_GDT)&lt;br /&gt;&lt;a name="line56"&gt; 56&lt;/a&gt; .set SelectorStack, (LABEL_DESC_STACK        - LABEL_GDT)&lt;br /&gt;&lt;a name="line57"&gt; 57&lt;/a&gt; .set SelectorTest, (LABEL_DESC_TEST         - LABEL_GDT)&lt;br /&gt;&lt;a name="line58"&gt; 58&lt;/a&gt; .set SelectorLDT, (LABEL_DESC_LDT         - LABEL_GDT)&lt;br /&gt;&lt;a name="line59"&gt; 59&lt;/a&gt; .set SelectorVideo,  (LABEL_DESC_VIDEO  - LABEL_GDT)&lt;br /&gt;&lt;a name="line60"&gt; 60&lt;/a&gt; .set SELECT_CODE_CG,  (LABEL_DESC_CODECG  - LABEL_GDT)&lt;br /&gt;&lt;a name="line61"&gt; 61&lt;/a&gt; .set SELECT_CODER3,  (LABEL_DESC_CODER3 - LABEL_GDT + SA_RPL3)&lt;br /&gt;&lt;a name="line62"&gt; 62&lt;/a&gt; .set SELECT_STACKR3,  (LABEL_DESC_STACKR3 - LABEL_GDT + SA_RPL3)&lt;br /&gt;&lt;a name="line63"&gt; 63&lt;/a&gt; .set SELECT_CG_TEST,  (LABEL_CG_TEST - LABEL_GDT)&lt;br /&gt;&lt;a name="line64"&gt; 64&lt;/a&gt;&lt;br /&gt;&lt;a name="line65"&gt; 65&lt;/a&gt; # LDT&lt;br /&gt;&lt;a name="line66"&gt; 66&lt;/a&gt;&lt;br /&gt;&lt;a name="line67"&gt; 67&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_LDT:&lt;/span&gt;&lt;br /&gt;&lt;a name="line68"&gt; 68&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_LDT_DESC_CODEA:&lt;/span&gt; Descriptor 0, (CodeALen - 1), (DA_C + DA_32) # Code, 32 位&lt;br /&gt;&lt;a name="line69"&gt; 69&lt;/a&gt; .set LDT_LEN, (. - LABEL_LDT)  /* LDT Length */&lt;br /&gt;&lt;a name="line70"&gt; 70&lt;/a&gt;&lt;br /&gt;&lt;a name="line71"&gt; 71&lt;/a&gt; /* LDT Selector (TI flag set)*/&lt;br /&gt;&lt;a name="line72"&gt; 72&lt;/a&gt; .set    SelectorLDTCodeA, (LABEL_LDT_DESC_CODEA - LABEL_LDT + SA_TIL)&lt;br /&gt;&lt;a name="line73"&gt; 73&lt;/a&gt;&lt;br /&gt;&lt;a name="line74"&gt; 74&lt;/a&gt;&lt;br /&gt;&lt;a name="line75"&gt; 75&lt;/a&gt; /* Program starts here. */&lt;br /&gt;&lt;a name="line76"&gt; 76&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_BEGIN:&lt;/span&gt;&lt;br /&gt;&lt;a name="line77"&gt; 77&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax    /* Move code segment address(CS) to data segment */&lt;br /&gt;&lt;a name="line78"&gt; 78&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %ds    /* register(DS), ES and SS. Because we have      */&lt;br /&gt;&lt;a name="line79"&gt; 79&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %es    /* embedded .data section into .code section in  */&lt;br /&gt;&lt;a name="line80"&gt; 80&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %ss    /* the start(mentioned in the NOTE above).       */&lt;br /&gt;&lt;a name="line81"&gt; 81&lt;/a&gt;&lt;br /&gt;&lt;a name="line82"&gt; 82&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;     $0x100, %sp&lt;br /&gt;&lt;a name="line83"&gt; 83&lt;/a&gt; &lt;strong&gt;    nop&lt;/strong&gt;&lt;br /&gt;&lt;a name="line84"&gt; 84&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt; %ax, (LABEL_GO_BACK_TO_REAL+3) # modify segment value, indexed memory mode, ref  professional aeesmbly language p 102.&lt;br /&gt;&lt;a name="line85"&gt; 85&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SPValueInRealMode), %sp&lt;br /&gt;&lt;a name="line86"&gt; 86&lt;/a&gt;&lt;br /&gt;&lt;a name="line87"&gt; 87&lt;/a&gt;     /* Initialize 16-bits code segment descriptor. */&lt;br /&gt;&lt;a name="line88"&gt; 88&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line89"&gt; 89&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line90"&gt; 90&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line91"&gt; 91&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_SEG_CODE16), %eax&lt;br /&gt;&lt;a name="line92"&gt; 92&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_CODE16 + 2)&lt;br /&gt;&lt;a name="line93"&gt; 93&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line94"&gt; 94&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_CODE16 + 4)&lt;br /&gt;&lt;a name="line95"&gt; 95&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_CODE16 + 7)&lt;br /&gt;&lt;a name="line96"&gt; 96&lt;/a&gt;&lt;br /&gt;&lt;a name="line97"&gt; 97&lt;/a&gt;     /* Initialize 32-bits code segment descriptor. */&lt;br /&gt;&lt;a name="line98"&gt; 98&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line99"&gt; 99&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line100"&gt;100&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line101"&gt;101&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_SEG_CODE32), %eax&lt;br /&gt;&lt;a name="line102"&gt;102&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_CODE32 + 2)&lt;br /&gt;&lt;a name="line103"&gt;103&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line104"&gt;104&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_CODE32 + 4)&lt;br /&gt;&lt;a name="line105"&gt;105&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_CODE32 + 7)&lt;br /&gt;&lt;a name="line106"&gt;106&lt;/a&gt;&lt;br /&gt;&lt;a name="line107"&gt;107&lt;/a&gt;&lt;br /&gt;&lt;a name="line108"&gt;108&lt;/a&gt;     # Initialize CODER3 descriptor&lt;br /&gt;&lt;a name="line109"&gt;109&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line110"&gt;110&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line111"&gt;111&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line112"&gt;112&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_SEG_CODER3), %eax&lt;br /&gt;&lt;a name="line113"&gt;113&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_CODER3 + 2)&lt;br /&gt;&lt;a name="line114"&gt;114&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line115"&gt;115&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_CODER3 + 4)&lt;br /&gt;&lt;a name="line116"&gt;116&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_CODER3 + 7)&lt;br /&gt;&lt;a name="line117"&gt;117&lt;/a&gt;&lt;br /&gt;&lt;a name="line118"&gt;118&lt;/a&gt;     # Initialize STACK R3 descriptor&lt;br /&gt;&lt;a name="line119"&gt;119&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line120"&gt;120&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line121"&gt;121&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line122"&gt;122&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_STACKR3), %eax&lt;br /&gt;&lt;a name="line123"&gt;123&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_STACKR3 + 2)&lt;br /&gt;&lt;a name="line124"&gt;124&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line125"&gt;125&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_STACKR3 + 4)&lt;br /&gt;&lt;a name="line126"&gt;126&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_STACKR3 + 7)&lt;br /&gt;&lt;a name="line127"&gt;127&lt;/a&gt;&lt;br /&gt;&lt;a name="line128"&gt;128&lt;/a&gt;&lt;br /&gt;&lt;a name="line129"&gt;129&lt;/a&gt;     /* Initialize call gate code segment descriptor. */&lt;br /&gt;&lt;a name="line130"&gt;130&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line131"&gt;131&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %cs, %ax&lt;br /&gt;&lt;a name="line132"&gt;132&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line133"&gt;133&lt;/a&gt; &lt;strong&gt;    addl&lt;/strong&gt;    $(LABEL_CODE_CG), %eax&lt;br /&gt;&lt;a name="line134"&gt;134&lt;/a&gt; &lt;strong&gt;    movw&lt;/strong&gt;    %ax, (LABEL_DESC_CODECG + 2)&lt;br /&gt;&lt;a name="line135"&gt;135&lt;/a&gt; &lt;strong&gt;    shr&lt;/strong&gt;     $16, %eax&lt;br /&gt;&lt;a name="line136"&gt;136&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %al, (LABEL_DESC_CODECG + 4)&lt;br /&gt;&lt;a name="line137"&gt;137&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    %ah, (LABEL_DESC_CODECG + 7)&lt;br /&gt;&lt;a name="line138"&gt;138&lt;/a&gt;&lt;br /&gt;&lt;a name="line139"&gt;139&lt;/a&gt;  # initialize data segment descriptor&lt;br /&gt;&lt;a name="line140"&gt;140&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %eax, %eax&lt;br /&gt;&lt;a name="line141"&gt;141&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ds, %ax&lt;br /&gt;&lt;a name="line142"&gt;142&lt;/a&gt; &lt;strong&gt; shl&lt;/strong&gt; $4, %eax&lt;br /&gt;&lt;a name="line143"&gt;143&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $(LABEL_DATA), %eax&lt;br /&gt;&lt;a name="line144"&gt;144&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, (LABEL_DESC_DATA + 2)&lt;br /&gt;&lt;a name="line145"&gt;145&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $16, %eax&lt;br /&gt;&lt;a name="line146"&gt;146&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, (LABEL_DESC_DATA + 4)&lt;br /&gt;&lt;a name="line147"&gt;147&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %ah, (LABEL_DESC_DATA + 7)&lt;br /&gt;&lt;a name="line148"&gt;148&lt;/a&gt;&lt;br /&gt;&lt;a name="line149"&gt;149&lt;/a&gt;  # initialize stack segment descriptor&lt;br /&gt;&lt;a name="line150"&gt;150&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %eax, %eax&lt;br /&gt;&lt;a name="line151"&gt;151&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ds, %ax&lt;br /&gt;&lt;a name="line152"&gt;152&lt;/a&gt; &lt;strong&gt; shl&lt;/strong&gt; $4, %eax&lt;br /&gt;&lt;a name="line153"&gt;153&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $(LABEL_STACK), %eax&lt;br /&gt;&lt;a name="line154"&gt;154&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, (LABEL_DESC_STACK + 2)&lt;br /&gt;&lt;a name="line155"&gt;155&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $16, %eax&lt;br /&gt;&lt;a name="line156"&gt;156&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, (LABEL_DESC_STACK + 4)&lt;br /&gt;&lt;a name="line157"&gt;157&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %ah, (LABEL_DESC_STACK + 7)&lt;br /&gt;&lt;a name="line158"&gt;158&lt;/a&gt;&lt;br /&gt;&lt;a name="line159"&gt;159&lt;/a&gt;     /* Initialize LDT descriptor in GDT. */&lt;br /&gt;&lt;a name="line160"&gt;160&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %eax, %eax&lt;br /&gt;&lt;a name="line161"&gt;161&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ds, %ax&lt;br /&gt;&lt;a name="line162"&gt;162&lt;/a&gt; &lt;strong&gt; shl&lt;/strong&gt; $4, %eax&lt;br /&gt;&lt;a name="line163"&gt;163&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $(LABEL_LDT), %eax&lt;br /&gt;&lt;a name="line164"&gt;164&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, (LABEL_DESC_LDT + 2)&lt;br /&gt;&lt;a name="line165"&gt;165&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $16, %eax&lt;br /&gt;&lt;a name="line166"&gt;166&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, (LABEL_DESC_LDT + 4)&lt;br /&gt;&lt;a name="line167"&gt;167&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %ah, (LABEL_DESC_LDT + 7)&lt;br /&gt;&lt;a name="line168"&gt;168&lt;/a&gt;&lt;br /&gt;&lt;a name="line169"&gt;169&lt;/a&gt;    /* Initialize code A descriptor in LDT. */&lt;br /&gt;&lt;a name="line170"&gt;170&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %eax, %eax&lt;br /&gt;&lt;a name="line171"&gt;171&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ds, %ax&lt;br /&gt;&lt;a name="line172"&gt;172&lt;/a&gt; &lt;strong&gt; shl&lt;/strong&gt; $4, %eax&lt;br /&gt;&lt;a name="line173"&gt;173&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $(LABEL_CODE_A), %eax&lt;br /&gt;&lt;a name="line174"&gt;174&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, (LABEL_LDT_DESC_CODEA + 2)&lt;br /&gt;&lt;a name="line175"&gt;175&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $16, %eax&lt;br /&gt;&lt;a name="line176"&gt;176&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, (LABEL_LDT_DESC_CODEA + 4)&lt;br /&gt;&lt;a name="line177"&gt;177&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %ah, (LABEL_LDT_DESC_CODEA + 7)&lt;br /&gt;&lt;a name="line178"&gt;178&lt;/a&gt;&lt;br /&gt;&lt;a name="line179"&gt;179&lt;/a&gt;&lt;br /&gt;&lt;a name="line180"&gt;180&lt;/a&gt;     /* Prepared for loading GDTR */&lt;br /&gt;&lt;a name="line181"&gt;181&lt;/a&gt; &lt;strong&gt;    xor&lt;/strong&gt;     %eax, %eax&lt;br /&gt;&lt;a name="line182"&gt;182&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ds, %ax&lt;br /&gt;&lt;a name="line183"&gt;183&lt;/a&gt; &lt;strong&gt;    shl&lt;/strong&gt;     $4, %eax&lt;br /&gt;&lt;a name="line184"&gt;184&lt;/a&gt; &lt;strong&gt;    add&lt;/strong&gt;     $(LABEL_GDT), %eax      /* eax &amp;lt;- gdt base*/&lt;br /&gt;&lt;a name="line185"&gt;185&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    %eax, (GdtPtr + 2)&lt;br /&gt;&lt;a name="line186"&gt;186&lt;/a&gt;&lt;br /&gt;&lt;a name="line187"&gt;187&lt;/a&gt;     /* Load GDTR(Global Descriptor Table Register) */&lt;br /&gt;&lt;a name="line188"&gt;188&lt;/a&gt; &lt;strong&gt;    lgdtw&lt;/strong&gt;   GdtPtr&lt;br /&gt;&lt;a name="line189"&gt;189&lt;/a&gt;&lt;br /&gt;&lt;a name="line190"&gt;190&lt;/a&gt;     /* Clear Interrupt Flags */&lt;br /&gt;&lt;a name="line191"&gt;191&lt;/a&gt; &lt;strong&gt;    cli&lt;/strong&gt;&lt;br /&gt;&lt;a name="line192"&gt;192&lt;/a&gt;&lt;br /&gt;&lt;a name="line193"&gt;193&lt;/a&gt;     /* Open A20 line. */&lt;br /&gt;&lt;a name="line194"&gt;194&lt;/a&gt; &lt;strong&gt;    inb&lt;/strong&gt;     $0x92, %al&lt;br /&gt;&lt;a name="line195"&gt;195&lt;/a&gt; &lt;strong&gt;    orb&lt;/strong&gt;     $0b00000010, %al&lt;br /&gt;&lt;a name="line196"&gt;196&lt;/a&gt; &lt;strong&gt;    outb&lt;/strong&gt;    %al, $0x92&lt;br /&gt;&lt;a name="line197"&gt;197&lt;/a&gt;&lt;br /&gt;&lt;a name="line198"&gt;198&lt;/a&gt;     /* Enable protect mode, PE bit of CR0. */&lt;br /&gt;&lt;a name="line199"&gt;199&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    %cr0, %eax&lt;br /&gt;&lt;a name="line200"&gt;200&lt;/a&gt; &lt;strong&gt;    orl&lt;/strong&gt;     $1, %eax&lt;br /&gt;&lt;a name="line201"&gt;201&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    %eax, %cr0&lt;br /&gt;&lt;a name="line202"&gt;202&lt;/a&gt;&lt;br /&gt;&lt;a name="line203"&gt;203&lt;/a&gt;     /* Mixed-Size Jump. */&lt;br /&gt;&lt;a name="line204"&gt;204&lt;/a&gt; &lt;strong&gt;    ljmp&lt;/strong&gt; $SelectorCode32, $0       /* Thanks to earthengine@gmail, I got */&lt;br /&gt;&lt;a name="line205"&gt;205&lt;/a&gt;                                     /* this mixed-size jump insn of gas.  */&lt;br /&gt;&lt;a name="line206"&gt;206&lt;/a&gt;                                     /* this calls far jump (ptr 16:32) in intel manual) */&lt;br /&gt;&lt;a name="line207"&gt;207&lt;/a&gt;&lt;br /&gt;&lt;a name="line208"&gt;208&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_REAL_ENTRY:&lt;/span&gt;               # 從保護模式跳回到實模式就到了這裡&lt;br /&gt;&lt;a name="line209"&gt;209&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %cx, %ax&lt;br /&gt;&lt;a name="line210"&gt;210&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ds&lt;br /&gt;&lt;a name="line211"&gt;211&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line212"&gt;212&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ss&lt;br /&gt;&lt;a name="line213"&gt;213&lt;/a&gt;&lt;br /&gt;&lt;a name="line214"&gt;214&lt;/a&gt;&lt;br /&gt;&lt;a name="line215"&gt;215&lt;/a&gt; &lt;strong&gt;        in&lt;/strong&gt;      $0x92, %al&lt;br /&gt;&lt;a name="line216"&gt;216&lt;/a&gt; &lt;strong&gt;        and&lt;/strong&gt;     $0b11111101, %al   #  close A20 line&lt;br /&gt;&lt;a name="line217"&gt;217&lt;/a&gt; &lt;strong&gt;        out&lt;/strong&gt;     %al, $0x92&lt;br /&gt;&lt;a name="line218"&gt;218&lt;/a&gt;&lt;br /&gt;&lt;a name="line219"&gt;219&lt;/a&gt; &lt;strong&gt;        sti&lt;/strong&gt;                     # 開中斷&lt;br /&gt;&lt;a name="line220"&gt;220&lt;/a&gt;&lt;br /&gt;&lt;a name="line221"&gt;221&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     $0x4c00, %ax&lt;br /&gt;&lt;a name="line222"&gt;222&lt;/a&gt; &lt;strong&gt;        int&lt;/strong&gt;     $0x21             #  回到 DOS&lt;br /&gt;&lt;a name="line223"&gt;223&lt;/a&gt; # END of .code16&lt;br /&gt;&lt;a name="line224"&gt;224&lt;/a&gt;&lt;br /&gt;&lt;a name="line225"&gt;225&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_SEG_CODE32:&lt;/span&gt;&lt;br /&gt;&lt;a name="line226"&gt;226&lt;/a&gt; .code32&lt;br /&gt;&lt;a name="line227"&gt;227&lt;/a&gt;&lt;br /&gt;&lt;a name="line228"&gt;228&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(SelectorData), %ax&lt;br /&gt;&lt;a name="line229"&gt;229&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ax, %ds   # 資料段選擇子&lt;br /&gt;&lt;a name="line230"&gt;230&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(SelectorTest), %ax&lt;br /&gt;&lt;a name="line231"&gt;231&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ax, %es   # 測試段選擇子&lt;br /&gt;&lt;a name="line232"&gt;232&lt;/a&gt;&lt;br /&gt;&lt;a name="line233"&gt;233&lt;/a&gt;&lt;br /&gt;&lt;a name="line234"&gt;234&lt;/a&gt;&lt;br /&gt;&lt;a name="line235"&gt;235&lt;/a&gt;&lt;br /&gt;&lt;a name="line236"&gt;236&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line237"&gt;237&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %gs                /* Video segment selector(dest) */&lt;br /&gt;&lt;a name="line238"&gt;238&lt;/a&gt;&lt;br /&gt;&lt;a name="line239"&gt;239&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(SelectorStack), %ax&lt;br /&gt;&lt;a name="line240"&gt;240&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ax, %ss   # 堆疊段選擇子&lt;br /&gt;&lt;a name="line241"&gt;241&lt;/a&gt;&lt;br /&gt;&lt;a name="line242"&gt;242&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(TopOfStack), %esp&lt;br /&gt;&lt;a name="line243"&gt;243&lt;/a&gt;&lt;br /&gt;&lt;a name="line244"&gt;244&lt;/a&gt; /*&lt;br /&gt;&lt;a name="line245"&gt;245&lt;/a&gt; &lt;strong&gt;    movl&lt;/strong&gt;    $((80 * 10 + 0) * 2), %edi&lt;br /&gt;&lt;a name="line246"&gt;246&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    $0xC, %ah               # 0000: Black Back 1100: Red Front&lt;br /&gt;&lt;a name="line247"&gt;247&lt;/a&gt; &lt;strong&gt;    movb&lt;/strong&gt;    $'P', %al&lt;br /&gt;&lt;a name="line248"&gt;248&lt;/a&gt;&lt;br /&gt;&lt;a name="line249"&gt;249&lt;/a&gt; &lt;strong&gt;    mov&lt;/strong&gt;     %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line250"&gt;250&lt;/a&gt; */&lt;br /&gt;&lt;a name="line251"&gt;251&lt;/a&gt;&lt;br /&gt;&lt;a name="line252"&gt;252&lt;/a&gt;  # print string &lt;span style="color:#008000;"&gt;"In Protect Mode now. ^-^"&lt;/span&gt;&lt;br /&gt;&lt;a name="line253"&gt;253&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $0x0c, %ah # 0000: 黑底    1100: 紅字&lt;br /&gt;&lt;a name="line254"&gt;254&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %esi, %esi&lt;br /&gt;&lt;a name="line255"&gt;255&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %edi, %edi&lt;br /&gt;&lt;a name="line256"&gt;256&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(OffsetPMMessage), %esi # data string offset&lt;br /&gt;&lt;a name="line257"&gt;257&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $((80 * 10 + 0) * 2), %edi # 目的資料偏移。螢幕第 10 行, 第 0 列。&lt;br /&gt;&lt;a name="line258"&gt;258&lt;/a&gt; &lt;strong&gt; cld&lt;/strong&gt; # Clear Direction Flag, ref: http://www.fermi.mn.it/linux/quarta/x86/cld.htm&lt;br /&gt;&lt;a name="line259"&gt;259&lt;/a&gt;             # After CLD is executed, string operations will increment the index&lt;br /&gt;&lt;a name="line260"&gt;260&lt;/a&gt;             # (SI and/or DI) that they use.&lt;br /&gt;&lt;a name="line261"&gt;261&lt;/a&gt; .1:&lt;br /&gt;&lt;a name="line262"&gt;262&lt;/a&gt; &lt;strong&gt; lodsb&lt;/strong&gt; # For legacy mode, Load byte at address DS:(E)SI into AL.&lt;br /&gt;&lt;a name="line263"&gt;263&lt;/a&gt;               # For 64-bit mode load byte at address (R)SI into AL.&lt;br /&gt;&lt;a name="line264"&gt;264&lt;/a&gt;               # ref: http://siyobik.info/main/reference/instruction/LODS%2FLODSB%2FLODSW%2FLODSD%2FLODSQ&lt;br /&gt;&lt;a name="line265"&gt;265&lt;/a&gt; &lt;strong&gt; test&lt;/strong&gt; %al, %al # result is 0, zf sets to 1.&lt;br /&gt;&lt;a name="line266"&gt;266&lt;/a&gt; &lt;strong&gt; jz&lt;/strong&gt; .2 # zf = 1 jump&lt;br /&gt;&lt;a name="line267"&gt;267&lt;/a&gt; # mov [gs:edi], ax&lt;br /&gt;&lt;a name="line268"&gt;268&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line269"&gt;269&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %edi&lt;br /&gt;&lt;a name="line270"&gt;270&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .1&lt;br /&gt;&lt;a name="line271"&gt;271&lt;/a&gt; .2: # 顯示完畢&lt;br /&gt;&lt;a name="line272"&gt;272&lt;/a&gt;&lt;br /&gt;&lt;a name="line273"&gt;273&lt;/a&gt; &lt;strong&gt;  pushl&lt;/strong&gt; $(SELECT_STACKR3)&lt;br /&gt;&lt;a name="line274"&gt;274&lt;/a&gt; &lt;strong&gt;  pushl&lt;/strong&gt; $(TopOfStackR3)&lt;br /&gt;&lt;a name="line275"&gt;275&lt;/a&gt; &lt;strong&gt;  pushl&lt;/strong&gt; $(SELECT_CODER3)&lt;br /&gt;&lt;a name="line276"&gt;276&lt;/a&gt; &lt;strong&gt;  pushl&lt;/strong&gt; $0&lt;br /&gt;&lt;a name="line277"&gt;277&lt;/a&gt; &lt;strong&gt;  lret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line278"&gt;278&lt;/a&gt;&lt;br /&gt;&lt;a name="line279"&gt;279&lt;/a&gt;   # call gate test&lt;br /&gt;&lt;a name="line280"&gt;280&lt;/a&gt;   #lcall $(SELECT_CG_TEST), $0&lt;br /&gt;&lt;a name="line281"&gt;281&lt;/a&gt;&lt;br /&gt;&lt;a name="line282"&gt;282&lt;/a&gt;   # the call gate setting selector&lt;br /&gt;&lt;a name="line283"&gt;283&lt;/a&gt;   #lcall $(SELECT_CODE_CG), $0&lt;br /&gt;&lt;a name="line284"&gt;284&lt;/a&gt;&lt;br /&gt;&lt;a name="line285"&gt;285&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorLDT), %ax&lt;br /&gt;&lt;a name="line286"&gt;286&lt;/a&gt; &lt;strong&gt;  lldt&lt;/strong&gt; %ax&lt;br /&gt;&lt;a name="line287"&gt;287&lt;/a&gt; &lt;strong&gt;  jmp&lt;/strong&gt; $(SelectorLDTCodeA), $0&lt;br /&gt;&lt;a name="line288"&gt;288&lt;/a&gt;&lt;br /&gt;&lt;a name="line289"&gt;289&lt;/a&gt;&lt;br /&gt;&lt;a name="line290"&gt;290&lt;/a&gt; /*&lt;br /&gt;&lt;a name="line291"&gt;291&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $0, (video_addr_offset)&lt;br /&gt;&lt;a name="line292"&gt;292&lt;/a&gt; &lt;strong&gt;        movb&lt;/strong&gt; $0xb8, %al&lt;br /&gt;&lt;a name="line293"&gt;293&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAL_m&lt;br /&gt;&lt;a name="line294"&gt;294&lt;/a&gt;&lt;br /&gt;&lt;a name="line295"&gt;295&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $(80*(3-1)*2 + (2-1)*2), (video_addr_offset)&lt;br /&gt;&lt;a name="line296"&gt;296&lt;/a&gt; &lt;strong&gt;        movb&lt;/strong&gt; $0xc7, %al&lt;br /&gt;&lt;a name="line297"&gt;297&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAL_m&lt;br /&gt;&lt;a name="line298"&gt;298&lt;/a&gt;&lt;br /&gt;&lt;a name="line299"&gt;299&lt;/a&gt;  #call DispReturn&lt;br /&gt;&lt;a name="line300"&gt;300&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $160, (video_addr_offset)&lt;br /&gt;&lt;a name="line301"&gt;301&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line302"&gt;302&lt;/a&gt; &lt;strong&gt;        movb&lt;/strong&gt; $0xa9, %al&lt;br /&gt;&lt;a name="line303"&gt;303&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line304"&gt;304&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line305"&gt;305&lt;/a&gt; &lt;strong&gt;        movw&lt;/strong&gt; $0xabcd, %ax&lt;br /&gt;&lt;a name="line306"&gt;306&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAX&lt;br /&gt;&lt;a name="line307"&gt;307&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line308"&gt;308&lt;/a&gt; &lt;strong&gt;        movl&lt;/strong&gt; (video_addr_offset), %ax&lt;br /&gt;&lt;a name="line309"&gt;309&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAX&lt;br /&gt;&lt;a name="line310"&gt;310&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line311"&gt;311&lt;/a&gt;&lt;br /&gt;&lt;a name="line312"&gt;312&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $2, (video_addr_offset)&lt;br /&gt;&lt;a name="line313"&gt;313&lt;/a&gt; &lt;strong&gt;        movl&lt;/strong&gt; (video_addr_offset), %ax&lt;br /&gt;&lt;a name="line314"&gt;314&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAX&lt;br /&gt;&lt;a name="line315"&gt;315&lt;/a&gt;&lt;br /&gt;&lt;a name="line316"&gt;316&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; TestRead&lt;br /&gt;&lt;a name="line317"&gt;317&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; TestWrite&lt;br /&gt;&lt;a name="line318"&gt;318&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; TestRead&lt;br /&gt;&lt;a name="line319"&gt;319&lt;/a&gt; */&lt;br /&gt;&lt;a name="line320"&gt;320&lt;/a&gt;&lt;br /&gt;&lt;a name="line321"&gt;321&lt;/a&gt;    # ljmpl     $SelectorCode16,$0&lt;br /&gt;&lt;a name="line322"&gt;322&lt;/a&gt;     # jmpl     $SelectorCode16,$0 # it works&lt;br /&gt;&lt;a name="line323"&gt;323&lt;/a&gt;&lt;br /&gt;&lt;a name="line324"&gt;324&lt;/a&gt;&lt;br /&gt;&lt;a name="line325"&gt;325&lt;/a&gt;&lt;br /&gt;&lt;a name="line326"&gt;326&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line327"&gt;327&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;TestRead:&lt;/span&gt;&lt;br /&gt;&lt;a name="line328"&gt;328&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %esi, %esi&lt;br /&gt;&lt;a name="line329"&gt;329&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $8, %ecx&lt;br /&gt;&lt;a name="line330"&gt;330&lt;/a&gt; .loop:&lt;br /&gt;&lt;a name="line331"&gt;331&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %es:(%esi), %al&lt;br /&gt;&lt;a name="line332"&gt;332&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line333"&gt;333&lt;/a&gt; &lt;strong&gt; inc&lt;/strong&gt; %esi&lt;br /&gt;&lt;a name="line334"&gt;334&lt;/a&gt; &lt;strong&gt; loop&lt;/strong&gt; .loop&lt;br /&gt;&lt;a name="line335"&gt;335&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line336"&gt;336&lt;/a&gt;&lt;br /&gt;&lt;a name="line337"&gt;337&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line338"&gt;338&lt;/a&gt; # TestRead 結束-----------------------------------------------------------&lt;br /&gt;&lt;a name="line339"&gt;339&lt;/a&gt;&lt;br /&gt;&lt;a name="line340"&gt;340&lt;/a&gt;&lt;br /&gt;&lt;a name="line341"&gt;341&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line342"&gt;342&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;TestWrite:&lt;/span&gt;&lt;br /&gt;&lt;a name="line343"&gt;343&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %esi&lt;br /&gt;&lt;a name="line344"&gt;344&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %edi&lt;br /&gt;&lt;a name="line345"&gt;345&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %esi, %esi&lt;br /&gt;&lt;a name="line346"&gt;346&lt;/a&gt; &lt;strong&gt; xor&lt;/strong&gt; %edi, %edi&lt;br /&gt;&lt;a name="line347"&gt;347&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $(OffsetStrTest), %esi # data offset&lt;br /&gt;&lt;a name="line348"&gt;348&lt;/a&gt; &lt;strong&gt; cld&lt;/strong&gt; # Clear Direction Flag, ref: http://www.fermi.mn.it/linux/quarta/x86/cld.htm&lt;br /&gt;&lt;a name="line349"&gt;349&lt;/a&gt;             # After CLD is executed, string operations will increment the index&lt;br /&gt;&lt;a name="line350"&gt;350&lt;/a&gt;             # (SI and/or DI) that they use.&lt;br /&gt;&lt;a name="line351"&gt;351&lt;/a&gt; .6:&lt;br /&gt;&lt;a name="line352"&gt;352&lt;/a&gt; &lt;strong&gt; lodsb&lt;/strong&gt; # For legacy mode, Load byte at address DS:(E)SI into AL.&lt;br /&gt;&lt;a name="line353"&gt;353&lt;/a&gt;               # For 64-bit mode load byte at address (R)SI into AL.&lt;br /&gt;&lt;a name="line354"&gt;354&lt;/a&gt;               # ref: http://siyobik.info/main/reference/instruction/LODS%2FLODSB%2FLODSW%2FLODSD%2FLODSQ&lt;br /&gt;&lt;a name="line355"&gt;355&lt;/a&gt;&lt;br /&gt;&lt;a name="line356"&gt;356&lt;/a&gt; &lt;strong&gt; test&lt;/strong&gt; %al, %al&lt;br /&gt;&lt;a name="line357"&gt;357&lt;/a&gt; &lt;strong&gt; jz&lt;/strong&gt; .5 # zf = 1 jump&lt;br /&gt;&lt;a name="line358"&gt;358&lt;/a&gt; # mov [es:edi], al&lt;br /&gt;&lt;a name="line359"&gt;359&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %al, %es:(%edi)&lt;br /&gt;&lt;a name="line360"&gt;360&lt;/a&gt; &lt;strong&gt; inc&lt;/strong&gt; %edi&lt;br /&gt;&lt;a name="line361"&gt;361&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .6&lt;br /&gt;&lt;a name="line362"&gt;362&lt;/a&gt; .5:&lt;br /&gt;&lt;a name="line363"&gt;363&lt;/a&gt;&lt;br /&gt;&lt;a name="line364"&gt;364&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %edi&lt;br /&gt;&lt;a name="line365"&gt;365&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %esi&lt;br /&gt;&lt;a name="line366"&gt;366&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line367"&gt;367&lt;/a&gt; # TestWrite 結束----------------------------------------------------------&lt;br /&gt;&lt;a name="line368"&gt;368&lt;/a&gt;&lt;br /&gt;&lt;a name="line369"&gt;369&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;DispAX:&lt;/span&gt;&lt;br /&gt;&lt;a name="line370"&gt;370&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line371"&gt;371&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line372"&gt;372&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line373"&gt;373&lt;/a&gt;&lt;br /&gt;&lt;a name="line374"&gt;374&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, %dx&lt;br /&gt;&lt;a name="line375"&gt;375&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $8, %ax # ah -&amp;gt; al&lt;br /&gt;&lt;a name="line376"&gt;376&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $2, %ecx&lt;br /&gt;&lt;a name="line377"&gt;377&lt;/a&gt; .b:&lt;br /&gt;&lt;a name="line378"&gt;378&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAL_m&lt;br /&gt;&lt;a name="line379"&gt;379&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %dx, %ax&lt;br /&gt;&lt;a name="line380"&gt;380&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $4, (video_addr_offset)&lt;br /&gt;&lt;a name="line381"&gt;381&lt;/a&gt; # call DispAL_m&lt;br /&gt;&lt;a name="line382"&gt;382&lt;/a&gt; #   andw 0xff, %ax&lt;br /&gt;&lt;a name="line383"&gt;383&lt;/a&gt; &lt;strong&gt; loop&lt;/strong&gt; .b&lt;br /&gt;&lt;a name="line384"&gt;384&lt;/a&gt;&lt;br /&gt;&lt;a name="line385"&gt;385&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line386"&gt;386&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line387"&gt;387&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line388"&gt;388&lt;/a&gt;&lt;br /&gt;&lt;a name="line389"&gt;389&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line390"&gt;390&lt;/a&gt; # end DispAX&lt;br /&gt;&lt;a name="line391"&gt;391&lt;/a&gt;&lt;br /&gt;&lt;a name="line392"&gt;392&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line393"&gt;393&lt;/a&gt; # 顯示 AL 中的數字&lt;br /&gt;&lt;a name="line394"&gt;394&lt;/a&gt; # 默認地:&lt;br /&gt;&lt;a name="line395"&gt;395&lt;/a&gt; # 數字已經存在 AL 中&lt;br /&gt;&lt;a name="line396"&gt;396&lt;/a&gt; # edi 始終指向要顯示的下一個字元的位置&lt;br /&gt;&lt;a name="line397"&gt;397&lt;/a&gt; # 被改變的暫存器:&lt;br /&gt;&lt;a name="line398"&gt;398&lt;/a&gt; # ax, edi&lt;br /&gt;&lt;a name="line399"&gt;399&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line400"&gt;400&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;DispAL:&lt;/span&gt;&lt;br /&gt;&lt;a name="line401"&gt;401&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line402"&gt;402&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line403"&gt;403&lt;/a&gt;&lt;br /&gt;&lt;a name="line404"&gt;404&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $0x0c, %ah # 0000: 黑底    1100: 紅字&lt;br /&gt;&lt;a name="line405"&gt;405&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, %dl&lt;br /&gt;&lt;a name="line406"&gt;406&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $4, %al&lt;br /&gt;&lt;a name="line407"&gt;407&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $2, %ecx&lt;br /&gt;&lt;a name="line408"&gt;408&lt;/a&gt; .begin:&lt;br /&gt;&lt;a name="line409"&gt;409&lt;/a&gt; &lt;strong&gt; andb&lt;/strong&gt; $0x0f, %al&lt;br /&gt;&lt;a name="line410"&gt;410&lt;/a&gt; &lt;strong&gt; cmp&lt;/strong&gt; $9, %al&lt;br /&gt;&lt;a name="line411"&gt;411&lt;/a&gt; &lt;strong&gt; ja&lt;/strong&gt; .3          # cf=0, zf=0, above 9 (&amp;gt;9)&lt;br /&gt;&lt;a name="line412"&gt;412&lt;/a&gt;  #addb $'0', %al&lt;br /&gt;&lt;a name="line413"&gt;413&lt;/a&gt; &lt;strong&gt; addb&lt;/strong&gt; $0x30, %al&lt;br /&gt;&lt;a name="line414"&gt;414&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .4&lt;br /&gt;&lt;a name="line415"&gt;415&lt;/a&gt; .3:&lt;br /&gt;&lt;a name="line416"&gt;416&lt;/a&gt; &lt;strong&gt; sub&lt;/strong&gt; $0x0A, %al&lt;br /&gt;&lt;a name="line417"&gt;417&lt;/a&gt;  #add $'A', %al&lt;br /&gt;&lt;a name="line418"&gt;418&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $0x41, %al&lt;br /&gt;&lt;a name="line419"&gt;419&lt;/a&gt; .4:&lt;br /&gt;&lt;a name="line420"&gt;420&lt;/a&gt;  #mov [gs:edi], ax&lt;br /&gt;&lt;a name="line421"&gt;421&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line422"&gt;422&lt;/a&gt; # mov %ax, %gs:(video_addr_offset)&lt;br /&gt;&lt;a name="line423"&gt;423&lt;/a&gt;  #mov %ax, %gs:(0)&lt;br /&gt;&lt;a name="line424"&gt;424&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %edi&lt;br /&gt;&lt;a name="line425"&gt;425&lt;/a&gt;&lt;br /&gt;&lt;a name="line426"&gt;426&lt;/a&gt; # addl $2, (video_addr_offset)&lt;br /&gt;&lt;a name="line427"&gt;427&lt;/a&gt;&lt;br /&gt;&lt;a name="line428"&gt;428&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %dl, %al&lt;br /&gt;&lt;a name="line429"&gt;429&lt;/a&gt; &lt;strong&gt; loop&lt;/strong&gt; .begin&lt;br /&gt;&lt;a name="line430"&gt;430&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %edi&lt;br /&gt;&lt;a name="line431"&gt;431&lt;/a&gt;  #add $2, (video_addr_offset)&lt;br /&gt;&lt;a name="line432"&gt;432&lt;/a&gt;&lt;br /&gt;&lt;a name="line433"&gt;433&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line434"&gt;434&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line435"&gt;435&lt;/a&gt;&lt;br /&gt;&lt;a name="line436"&gt;436&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line437"&gt;437&lt;/a&gt; # DispAL 結束-------------------------------------------------------------&lt;br /&gt;&lt;a name="line438"&gt;438&lt;/a&gt;&lt;br /&gt;&lt;a name="line439"&gt;439&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;DispAL_m:&lt;/span&gt;&lt;br /&gt;&lt;a name="line440"&gt;440&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line441"&gt;441&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line442"&gt;442&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line443"&gt;443&lt;/a&gt;&lt;br /&gt;&lt;a name="line444"&gt;444&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; (video_addr_offset), %ebx&lt;br /&gt;&lt;a name="line445"&gt;445&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $0x0c, %ah # 0000: 黑底    1100: 紅字&lt;br /&gt;&lt;a name="line446"&gt;446&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; %al, %dl&lt;br /&gt;&lt;a name="line447"&gt;447&lt;/a&gt; &lt;strong&gt; shr&lt;/strong&gt; $4, %al&lt;br /&gt;&lt;a name="line448"&gt;448&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $2, %ecx&lt;br /&gt;&lt;a name="line449"&gt;449&lt;/a&gt; .begin_1:&lt;br /&gt;&lt;a name="line450"&gt;450&lt;/a&gt; &lt;strong&gt; andb&lt;/strong&gt; $0x0f, %al&lt;br /&gt;&lt;a name="line451"&gt;451&lt;/a&gt; &lt;strong&gt; cmp&lt;/strong&gt; $9, %al&lt;br /&gt;&lt;a name="line452"&gt;452&lt;/a&gt; &lt;strong&gt; ja&lt;/strong&gt; .31          # cf=0, zf=0, above 9 (&amp;gt;9)&lt;br /&gt;&lt;a name="line453"&gt;453&lt;/a&gt;  #addb $'0', %al&lt;br /&gt;&lt;a name="line454"&gt;454&lt;/a&gt; &lt;strong&gt; addb&lt;/strong&gt; $0x30, %al&lt;br /&gt;&lt;a name="line455"&gt;455&lt;/a&gt; &lt;strong&gt; jmp&lt;/strong&gt; .41&lt;br /&gt;&lt;a name="line456"&gt;456&lt;/a&gt; .31:&lt;br /&gt;&lt;a name="line457"&gt;457&lt;/a&gt; &lt;strong&gt; sub&lt;/strong&gt; $0x0A, %al&lt;br /&gt;&lt;a name="line458"&gt;458&lt;/a&gt;  #add $'A', %al&lt;br /&gt;&lt;a name="line459"&gt;459&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $0x41, %al&lt;br /&gt;&lt;a name="line460"&gt;460&lt;/a&gt; .41:&lt;br /&gt;&lt;a name="line461"&gt;461&lt;/a&gt;  #mov [gs:edi], ax&lt;br /&gt;&lt;a name="line462"&gt;462&lt;/a&gt;  #mov %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line463"&gt;463&lt;/a&gt; #if 0&lt;br /&gt;&lt;a name="line464"&gt;464&lt;/a&gt; &lt;strong&gt;        movw&lt;/strong&gt; (video_addr_offset), %ax&lt;br /&gt;&lt;a name="line465"&gt;465&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispReturn&lt;br /&gt;&lt;a name="line466"&gt;466&lt;/a&gt; &lt;strong&gt; call&lt;/strong&gt; DispAX&lt;br /&gt;&lt;a name="line467"&gt;467&lt;/a&gt; #endif&lt;br /&gt;&lt;a name="line468"&gt;468&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; %ax, %gs:(%ebx)&lt;br /&gt;&lt;a name="line469"&gt;469&lt;/a&gt;  #mov %ax, %gs:(0)&lt;br /&gt;&lt;a name="line470"&gt;470&lt;/a&gt; &lt;strong&gt; add&lt;/strong&gt; $2, %ebx&lt;br /&gt;&lt;a name="line471"&gt;471&lt;/a&gt;&lt;br /&gt;&lt;a name="line472"&gt;472&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %dl, %al&lt;br /&gt;&lt;a name="line473"&gt;473&lt;/a&gt; &lt;strong&gt; loop&lt;/strong&gt; .begin_1&lt;br /&gt;&lt;a name="line474"&gt;474&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $2, %ebx&lt;br /&gt;&lt;a name="line475"&gt;475&lt;/a&gt;&lt;br /&gt;&lt;a name="line476"&gt;476&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %edx&lt;br /&gt;&lt;a name="line477"&gt;477&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ecx&lt;br /&gt;&lt;a name="line478"&gt;478&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line479"&gt;479&lt;/a&gt;&lt;br /&gt;&lt;a name="line480"&gt;480&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line481"&gt;481&lt;/a&gt; # DispAL_m 結束-------------------------------------------------------------&lt;br /&gt;&lt;a name="line482"&gt;482&lt;/a&gt;&lt;br /&gt;&lt;a name="line483"&gt;483&lt;/a&gt;&lt;br /&gt;&lt;a name="line484"&gt;484&lt;/a&gt; # ------------------------------------------------------------------------&lt;br /&gt;&lt;a name="line485"&gt;485&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;DispReturn:&lt;/span&gt;&lt;br /&gt;&lt;a name="line486"&gt;486&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %eax&lt;br /&gt;&lt;a name="line487"&gt;487&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line488"&gt;488&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %edi, %eax&lt;br /&gt;&lt;a name="line489"&gt;489&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $160, %bl&lt;br /&gt;&lt;a name="line490"&gt;490&lt;/a&gt; &lt;strong&gt; divb&lt;/strong&gt; %bl          # %eax/160, 商 al, 餘數 ah.&lt;br /&gt;&lt;a name="line491"&gt;491&lt;/a&gt; &lt;strong&gt; and&lt;/strong&gt; $0x0FF, %eax&lt;br /&gt;&lt;a name="line492"&gt;492&lt;/a&gt; &lt;strong&gt; inc&lt;/strong&gt; %eax         # ++ %eax&lt;br /&gt;&lt;a name="line493"&gt;493&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; $160, %bl&lt;br /&gt;&lt;a name="line494"&gt;494&lt;/a&gt; &lt;strong&gt; mul&lt;/strong&gt; %bl&lt;br /&gt;&lt;a name="line495"&gt;495&lt;/a&gt; &lt;strong&gt; mov&lt;/strong&gt; %eax, %edi&lt;br /&gt;&lt;a name="line496"&gt;496&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ebx&lt;br /&gt;&lt;a name="line497"&gt;497&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %eax&lt;br /&gt;&lt;a name="line498"&gt;498&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line499"&gt;499&lt;/a&gt; # DispReturn 結束---------------------------------------------------------&lt;br /&gt;&lt;a name="line500"&gt;500&lt;/a&gt;&lt;br /&gt;&lt;a name="line501"&gt;501&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_STACKR3:&lt;/span&gt;&lt;br /&gt;&lt;a name="line502"&gt;502&lt;/a&gt; .space 512, 0&lt;br /&gt;&lt;a name="line503"&gt;503&lt;/a&gt; .set TopOfStackR3, . - LABEL_STACKR3&lt;br /&gt;&lt;a name="line504"&gt;504&lt;/a&gt;&lt;br /&gt;&lt;a name="line505"&gt;505&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_SEG_CODER3:&lt;/span&gt;&lt;br /&gt;&lt;a name="line506"&gt;506&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line507"&gt;507&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs&lt;br /&gt;&lt;a name="line508"&gt;508&lt;/a&gt; &lt;strong&gt;  movl&lt;/strong&gt; $((80*11+1) *2 ), %edi&lt;br /&gt;&lt;a name="line509"&gt;509&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $0xC, %ah&lt;br /&gt;&lt;a name="line510"&gt;510&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $'3', %al&lt;br /&gt;&lt;a name="line511"&gt;511&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line512"&gt;512&lt;/a&gt; &lt;strong&gt;  jmp&lt;/strong&gt; .&lt;br /&gt;&lt;a name="line513"&gt;513&lt;/a&gt; .set SEG_CODER3_LEN, . - LABEL_SEG_CODER3&lt;br /&gt;&lt;a name="line514"&gt;514&lt;/a&gt;&lt;br /&gt;&lt;a name="line515"&gt;515&lt;/a&gt; # test call gate&lt;br /&gt;&lt;a name="line516"&gt;516&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_CODE_CG:&lt;/span&gt;&lt;br /&gt;&lt;a name="line517"&gt;517&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line518"&gt;518&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs&lt;br /&gt;&lt;a name="line519"&gt;519&lt;/a&gt; &lt;strong&gt;  movl&lt;/strong&gt; $((80*11+0) *2 ), %edi&lt;br /&gt;&lt;a name="line520"&gt;520&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $0xC, %ah&lt;br /&gt;&lt;a name="line521"&gt;521&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $'C', %al&lt;br /&gt;&lt;a name="line522"&gt;522&lt;/a&gt;&lt;br /&gt;&lt;a name="line523"&gt;523&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line524"&gt;524&lt;/a&gt; &lt;strong&gt;  lret&lt;/strong&gt; # long return command&lt;br /&gt;&lt;a name="line525"&gt;525&lt;/a&gt; .set SEG_CODE_CG_LEN, . - LABEL_CODE_CG&lt;br /&gt;&lt;a name="line526"&gt;526&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_CODE_A:&lt;/span&gt;&lt;br /&gt;&lt;a name="line527"&gt;527&lt;/a&gt; #if 0&lt;br /&gt;&lt;a name="line528"&gt;528&lt;/a&gt; # intel syntax&lt;br /&gt;&lt;a name="line529"&gt;529&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     ax, SelectorVideo&lt;br /&gt;&lt;a name="line530"&gt;530&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     gs, ax                  &lt;span style="color:#444444;"&gt;; 視頻段選擇子(目的)&lt;/span&gt;&lt;br /&gt;&lt;a name="line531"&gt;531&lt;/a&gt;&lt;br /&gt;&lt;a name="line532"&gt;532&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     edi, (80 * 12 + 0) * 2  &lt;span style="color:#444444;"&gt;; 螢幕第 10 行, 第 0 列。&lt;/span&gt;&lt;br /&gt;&lt;a name="line533"&gt;533&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     ah, 0Ch                 &lt;span style="color:#444444;"&gt;; 0000: 黑底    1100: 紅字&lt;/span&gt;&lt;br /&gt;&lt;a name="line534"&gt;534&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     al, 'L'&lt;br /&gt;&lt;a name="line535"&gt;535&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     [gs:edi], ax&lt;br /&gt;&lt;a name="line536"&gt;536&lt;/a&gt; #else&lt;br /&gt;&lt;a name="line537"&gt;537&lt;/a&gt; # at&amp;amp;t syntax&lt;br /&gt;&lt;a name="line538"&gt;538&lt;/a&gt;  #if 1&lt;br /&gt;&lt;a name="line539"&gt;539&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $(SelectorVideo), %ax&lt;br /&gt;&lt;a name="line540"&gt;540&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs&lt;br /&gt;&lt;a name="line541"&gt;541&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $((80 * 12 + 0) * 2), %edi&lt;br /&gt;&lt;a name="line542"&gt;542&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $0x0c, %ah&lt;br /&gt;&lt;a name="line543"&gt;543&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; $'L', %al&lt;br /&gt;&lt;a name="line544"&gt;544&lt;/a&gt; &lt;strong&gt;  mov&lt;/strong&gt; %ax, %gs:(%edi)&lt;br /&gt;&lt;a name="line545"&gt;545&lt;/a&gt;   #else&lt;br /&gt;&lt;a name="line546"&gt;546&lt;/a&gt;   /* can call DispAL function */&lt;br /&gt;&lt;a name="line547"&gt;547&lt;/a&gt; &lt;strong&gt;  movb&lt;/strong&gt; $0xef, %al&lt;br /&gt;&lt;a name="line548"&gt;548&lt;/a&gt; &lt;strong&gt;  call&lt;/strong&gt; DispAL&lt;br /&gt;&lt;a name="line549"&gt;549&lt;/a&gt;   #endif&lt;br /&gt;&lt;a name="line550"&gt;550&lt;/a&gt;   /* jump to real mode code16 and return to dos. */&lt;br /&gt;&lt;a name="line551"&gt;551&lt;/a&gt; &lt;strong&gt;  ljmpl&lt;/strong&gt;     $SelectorCode16,$0&lt;br /&gt;&lt;a name="line552"&gt;552&lt;/a&gt;&lt;br /&gt;&lt;a name="line553"&gt;553&lt;/a&gt; #endif&lt;br /&gt;&lt;a name="line554"&gt;554&lt;/a&gt; .set CodeALen, (. - LABEL_CODE_A)&lt;br /&gt;&lt;a name="line555"&gt;555&lt;/a&gt;&lt;br /&gt;&lt;a name="line556"&gt;556&lt;/a&gt; /*&lt;br /&gt;&lt;a name="line557"&gt;557&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;kmain:&lt;/span&gt;&lt;br /&gt;&lt;a name="line558"&gt;558&lt;/a&gt; &lt;strong&gt;        pushl&lt;/strong&gt;   %ebp&lt;br /&gt;&lt;a name="line559"&gt;559&lt;/a&gt; &lt;strong&gt;        movl&lt;/strong&gt;    %esp, %ebp&lt;br /&gt;&lt;a name="line560"&gt;560&lt;/a&gt; &lt;strong&gt;        popl&lt;/strong&gt;    %ebp&lt;br /&gt;&lt;a name="line561"&gt;561&lt;/a&gt; &lt;strong&gt;        ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line562"&gt;562&lt;/a&gt;         .size   kmain, .-kmain&lt;br /&gt;&lt;a name="line563"&gt;563&lt;/a&gt;         .ident  &lt;span style="color:#008000;"&gt;"GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"&lt;/span&gt;&lt;br /&gt;&lt;a name="line564"&gt;564&lt;/a&gt; */&lt;br /&gt;&lt;a name="line565"&gt;565&lt;/a&gt; #        .section        .note.GNU-stack,&lt;span style="color:#008000;"&gt;""&lt;/span&gt;,@progbits&lt;br /&gt;&lt;a name="line566"&gt;566&lt;/a&gt;&lt;br /&gt;&lt;a name="line567"&gt;567&lt;/a&gt;&lt;br /&gt;&lt;a name="line568"&gt;568&lt;/a&gt; /* Get the length of 32-bit segment code. */&lt;br /&gt;&lt;a name="line569"&gt;569&lt;/a&gt; .set    SegCode32Len, . - LABEL_SEG_CODE32&lt;br /&gt;&lt;a name="line570"&gt;570&lt;/a&gt;&lt;br /&gt;&lt;a name="line571"&gt;571&lt;/a&gt; #[SECTION .data1]         &lt;span style="color:#444444;"&gt;; 資料段&lt;/span&gt;&lt;br /&gt;&lt;a name="line572"&gt;572&lt;/a&gt; #ALIGN   32&lt;br /&gt;&lt;a name="line573"&gt;573&lt;/a&gt; #[BITS   32]&lt;br /&gt;&lt;a name="line574"&gt;574&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_DATA:&lt;/span&gt;&lt;br /&gt;&lt;a name="line575"&gt;575&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;SPValueInRealMode:&lt;/span&gt; .2byte 0x0&lt;br /&gt;&lt;a name="line576"&gt;576&lt;/a&gt; # string&lt;br /&gt;&lt;a name="line577"&gt;577&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;PMMessage:&lt;/span&gt;              .ascii      &lt;span style="color:#008000;"&gt;"In Protect Mode now. ^-^&lt;span style="color:#77dd77;"&gt;\0&lt;/span&gt;"&lt;/span&gt;   # 在保護模式中顯示&lt;br /&gt;&lt;a name="line578"&gt;578&lt;/a&gt; .set    OffsetPMMessage, (PMMessage - LABEL_DATA)&lt;br /&gt;&lt;a name="line579"&gt;579&lt;/a&gt; #StrTest:                .ascii &lt;span style="color:#008000;"&gt;"B&lt;span style="color:#77dd77;"&gt;\0&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt;&lt;a name="line580"&gt;580&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;StrTest:&lt;/span&gt;                .ascii &lt;span style="color:#008000;"&gt;"ABCDEFGHIJKLMNOPQRSTUVWXYZ&lt;span style="color:#77dd77;"&gt;\0&lt;/span&gt;"&lt;/span&gt;&lt;br /&gt;&lt;a name="line581"&gt;581&lt;/a&gt; #OffsetStrTest           equ     StrTest - $$&lt;br /&gt;&lt;a name="line582"&gt;582&lt;/a&gt; .set OffsetStrTest , (StrTest - LABEL_DATA)&lt;br /&gt;&lt;a name="line583"&gt;583&lt;/a&gt; #DataLen                 equ     $ - LABEL_DATA&lt;br /&gt;&lt;a name="line584"&gt;584&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;video_addr:&lt;/span&gt;              .int    0&lt;br /&gt;&lt;a name="line585"&gt;585&lt;/a&gt; .set DataLen, .  - LABEL_DATA&lt;br /&gt;&lt;a name="line586"&gt;586&lt;/a&gt; /* 32-bit global stack segment. */&lt;br /&gt;&lt;a name="line587"&gt;587&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_STACK:&lt;/span&gt;&lt;br /&gt;&lt;a name="line588"&gt;588&lt;/a&gt; .space  512, 0&lt;br /&gt;&lt;a name="line589"&gt;589&lt;/a&gt; .set    TopOfStack, (. - LABEL_STACK - 1)&lt;br /&gt;&lt;a name="line590"&gt;590&lt;/a&gt;&lt;br /&gt;&lt;a name="line591"&gt;591&lt;/a&gt; # END of [SECTION .data1]&lt;br /&gt;&lt;a name="line592"&gt;592&lt;/a&gt;&lt;br /&gt;&lt;a name="line593"&gt;593&lt;/a&gt;&lt;br /&gt;&lt;a name="line594"&gt;594&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_SEG_CODE16:&lt;/span&gt;&lt;br /&gt;&lt;a name="line595"&gt;595&lt;/a&gt; .code16&lt;br /&gt;&lt;a name="line596"&gt;596&lt;/a&gt;     #jmp     .&lt;br /&gt;&lt;a name="line597"&gt;597&lt;/a&gt;         # back to real mode&lt;br /&gt;&lt;a name="line598"&gt;598&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     $SelectorNormal, %ax&lt;br /&gt;&lt;a name="line599"&gt;599&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ds&lt;br /&gt;&lt;a name="line600"&gt;600&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %es&lt;br /&gt;&lt;a name="line601"&gt;601&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %fs&lt;br /&gt;&lt;a name="line602"&gt;602&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %gs&lt;br /&gt;&lt;a name="line603"&gt;603&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %ax, %ss&lt;br /&gt;&lt;a name="line604"&gt;604&lt;/a&gt;&lt;br /&gt;&lt;a name="line605"&gt;605&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %cr0, %eax&lt;br /&gt;&lt;a name="line606"&gt;606&lt;/a&gt; &lt;strong&gt;        and&lt;/strong&gt;     $0b11111110, %al&lt;br /&gt;&lt;a name="line607"&gt;607&lt;/a&gt; &lt;strong&gt;        mov&lt;/strong&gt;     %eax, %cr0&lt;br /&gt;&lt;a name="line608"&gt;608&lt;/a&gt;&lt;br /&gt;&lt;a name="line609"&gt;609&lt;/a&gt;&lt;br /&gt;&lt;a name="line610"&gt;610&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;LABEL_GO_BACK_TO_REAL:&lt;/span&gt;&lt;br /&gt;&lt;a name="line611"&gt;611&lt;/a&gt; #.2byte 0xea66&lt;br /&gt;&lt;a name="line612"&gt;612&lt;/a&gt; #.4byte 0x00000000&lt;br /&gt;&lt;a name="line613"&gt;613&lt;/a&gt; #.2byte LABEL_REAL_ENTRY&lt;br /&gt;&lt;a name="line614"&gt;614&lt;/a&gt; &lt;strong&gt;    jmp&lt;/strong&gt;     $0, $LABEL_REAL_ENTRY      # 段位址會在程序開始處被設置成正確的值&lt;br /&gt;&lt;a name="line615"&gt;615&lt;/a&gt;&lt;br /&gt;&lt;a name="line616"&gt;616&lt;/a&gt;&lt;br /&gt;&lt;a name="line617"&gt;617&lt;/a&gt; .set Code16Len, . - LABEL_SEG_CODE16&lt;br /&gt;&lt;a name="line618"&gt;618&lt;/a&gt;&lt;br /&gt;&lt;a name="line619"&gt;619&lt;/a&gt; &lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-6926982401245469295?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/6926982401245469295/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=6926982401245469295' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/6926982401245469295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/6926982401245469295'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/x86-enter-to-ring3.html' title='x86: enter to ring3'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-7001674584109322672</id><published>2011-12-15T23:38:00.001+08:00</published><updated>2011-12-15T23:40:26.399+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='電腦相關'/><title type='text'>c array 語法</title><content type='html'>在 ptt programming 看到:&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt; int a[10];&lt;br /&gt; int b[10];&lt;br /&gt;&lt;br /&gt; int i=2;&lt;br /&gt; b[a[i]];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;原來 array 可以這樣用。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-7001674584109322672?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/7001674584109322672/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=7001674584109322672' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7001674584109322672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7001674584109322672'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/c-array.html' title='c array 語法'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-7516793448738535781</id><published>2011-12-15T21:27:00.003+08:00</published><updated>2012-01-08T15:43:00.820+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>python http web server</title><content type='html'>&lt;fieldset&gt;&lt;legend&gt;http_s1.py&lt;/legend&gt;&lt;br /&gt;&lt;pre&gt;&lt;a name="line1"&gt; 1&lt;/a&gt; &lt;span style="color:#444444;"&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;&lt;a name="line2"&gt; 2&lt;/a&gt; &lt;span style="color:#444444;"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;br /&gt;&lt;a name="line3"&gt; 3&lt;/a&gt; &lt;span style="color:#444444;"&gt;#encoding=utf-8&lt;/span&gt;&lt;br /&gt;&lt;a name="line4"&gt; 4&lt;/a&gt; &lt;span style="color:#444444;"&gt;# python 2&lt;/span&gt;&lt;br /&gt;&lt;a name="line5"&gt; 5&lt;/a&gt;&lt;br /&gt;&lt;a name="line6"&gt; 6&lt;/a&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;sys&lt;/span&gt;&lt;br /&gt;&lt;a name="line7"&gt; 7&lt;/a&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;BaseHTTPServer&lt;/span&gt;&lt;br /&gt;&lt;a name="line8"&gt; 8&lt;/a&gt; &lt;strong&gt;from&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;SimpleHTTPServer&lt;/span&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;SimpleHTTPRequestHandler&lt;/span&gt;&lt;br /&gt;&lt;a name="line9"&gt; 9&lt;/a&gt; &lt;strong&gt;from&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;BaseHTTPServer&lt;/span&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;BaseHTTPRequestHandler&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;HTTPServer&lt;/span&gt;&lt;br /&gt;&lt;a name="line10"&gt;10&lt;/a&gt; &lt;strong&gt;import&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;string&lt;/span&gt;,&lt;span style="color:#2040a0;"&gt;cgi&lt;/span&gt;,&lt;span style="color:#2040a0;"&gt;time&lt;/span&gt;&lt;br /&gt;&lt;a name="line11"&gt;11&lt;/a&gt;&lt;br /&gt;&lt;a name="line12"&gt;12&lt;/a&gt; &lt;strong&gt;class&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;MyHandler&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;BaseHTTPRequestHandler&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line13"&gt;13&lt;/a&gt; &lt;strong&gt;   &lt;span style="color:ff0000;"&gt; def&lt;/span&gt;&lt;span style="color:ff0000;"&gt; do_GET&lt;/span&gt;&lt;span style="color:2040a0;"&gt;(self)&lt;/span&gt;:&lt;br /&gt;&lt;a name="line14"&gt;14&lt;/a&gt; &lt;/strong&gt;        &lt;strong&gt;try&lt;/strong&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line15"&gt;15&lt;/a&gt;      &lt;span style="color:#444444;"&gt;#if self.pathc.endswith(".html")&lt;/span&gt;&lt;br /&gt;&lt;a name="line16"&gt;16&lt;/a&gt;      &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;send_response&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;200&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line17"&gt;17&lt;/a&gt;      &lt;span style="color:#444444;"&gt;#self.send_header('Content-type', 'text/plain')&lt;/span&gt;&lt;br /&gt;&lt;a name="line18"&gt;18&lt;/a&gt;      &lt;span style="color:#444444;"&gt;#self.send_header('Content-type', 'text/html; charset=utf-8')&lt;/span&gt;&lt;br /&gt;&lt;a name="line19"&gt;19&lt;/a&gt;      &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;send_header&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;'Content-type'&lt;/span&gt;, &lt;span style="color:#008000;"&gt;'text/xml; charset=utf-8'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line20"&gt;20&lt;/a&gt;      &lt;span style="color:#2040a0;"&gt;f&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;open&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;'/test.html'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line21"&gt;21&lt;/a&gt;      &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;end_headers&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line22"&gt;22&lt;/a&gt;      &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;wfile&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;write&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;f&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;read&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line23"&gt;23&lt;/a&gt;             &lt;span style="color:#2040a0;"&gt;f&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;close&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line24"&gt;24&lt;/a&gt;      &lt;strong&gt;return&lt;/strong&gt;&lt;br /&gt;&lt;a name="line25"&gt;25&lt;/a&gt;         &lt;strong&gt;except&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;IOError&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line26"&gt;26&lt;/a&gt;      &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;send_error&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;404&lt;/span&gt;, &lt;span style="color:#008000;"&gt;'File Not Found'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line27"&gt;27&lt;/a&gt; &lt;strong&gt;   &lt;span style="color:ff0000;"&gt; def&lt;/span&gt;&lt;span style="color:ff0000;"&gt; do_POST&lt;/span&gt;&lt;span style="color:2040a0;"&gt;(self)&lt;/span&gt;:&lt;br /&gt;&lt;a name="line28"&gt;28&lt;/a&gt; &lt;/strong&gt;&lt;span style="color:#444444;"&gt;#        global rootnode&lt;/span&gt;&lt;br /&gt;&lt;a name="line29"&gt;29&lt;/a&gt;         &lt;strong&gt;try&lt;/strong&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line30"&gt;30&lt;/a&gt;      &lt;span style="color:#2040a0;"&gt;ctype&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;pdict&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;cgi&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;parse_header&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;headers&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;getheader&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;'content-type'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line31"&gt;31&lt;/a&gt;      &lt;strong&gt;if&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;ctype&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#008000;"&gt;'multipart/form-data'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line32"&gt;32&lt;/a&gt;          &lt;span style="color:#2040a0;"&gt;query&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;cgi&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;parse_multipart&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;rfile&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;pdict&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line33"&gt;33&lt;/a&gt;      &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;send_reponse&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;301&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line34"&gt;34&lt;/a&gt;      &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;end_headers&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line35"&gt;35&lt;/a&gt;      &lt;span style="color:#2040a0;"&gt;upfilecontent&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;query&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;get&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;'upfile'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line36"&gt;36&lt;/a&gt;      &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#008000;"&gt;"filecontent"&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;upfilecontent&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;0&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;a name="line37"&gt;37&lt;/a&gt;      &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;wfile&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;write&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;"&amp;lt;HTML&amp;gt;POST OK.&amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;"&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line38"&gt;38&lt;/a&gt;      &lt;span style="color:#2040a0;"&gt;self&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;wfile&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;write&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;upfilecontent&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;0&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line39"&gt;39&lt;/a&gt;         &lt;strong&gt;except&lt;/strong&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line40"&gt;40&lt;/a&gt;      &lt;strong&gt;pass&lt;/strong&gt;&lt;br /&gt;&lt;a name="line41"&gt;41&lt;/a&gt;&lt;br /&gt;&lt;a name="line42"&gt;42&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;HandlerClass&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;SimpleHTTPRequestHandler&lt;/span&gt;&lt;br /&gt;&lt;a name="line43"&gt;43&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;ServerClass&lt;/span&gt;  &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;BaseHTTPServer&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;HTTPServer&lt;/span&gt;&lt;br /&gt;&lt;a name="line44"&gt;44&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;Protocol&lt;/span&gt;     &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#008000;"&gt;"HTTP/1.1"&lt;/span&gt;&lt;br /&gt;&lt;a name="line45"&gt;45&lt;/a&gt;&lt;br /&gt;&lt;a name="line46"&gt;46&lt;/a&gt; &lt;strong&gt;if&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;sys&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;argv&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;1&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line47"&gt;47&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;port&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;int&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;sys&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;argv&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;1&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line48"&gt;48&lt;/a&gt; &lt;strong&gt;else&lt;/strong&gt;&lt;span style="color:4444FF;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;a name="line49"&gt;49&lt;/a&gt;     &lt;span style="color:#2040a0;"&gt;port&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#FF0000;"&gt;8000&lt;/span&gt;&lt;br /&gt;&lt;a name="line50"&gt;50&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;server_address&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;'127.0.0.1'&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;port&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line51"&gt;51&lt;/a&gt;&lt;br /&gt;&lt;a name="line52"&gt;52&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;HandlerClass&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;protocol_version&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;Protocol&lt;/span&gt;&lt;br /&gt;&lt;a name="line53"&gt;53&lt;/a&gt; &lt;span style="color:#444444;"&gt;#httpd = ServerClass(server_address, HandlerClass)&lt;/span&gt;&lt;br /&gt;&lt;a name="line54"&gt;54&lt;/a&gt; &lt;span style="color:#444444;"&gt;#httpd = ServerClass(server_address, MyHandler)&lt;/span&gt;&lt;br /&gt;&lt;a name="line55"&gt;55&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;httpd&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;HTTPServer&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;server_address&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;MyHandler&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line56"&gt;56&lt;/a&gt;&lt;br /&gt;&lt;a name="line57"&gt;57&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;sa&lt;/span&gt; &lt;span style="color:4444FF;"&gt;=&lt;/span&gt; &lt;span style="color:#2040a0;"&gt;httpd&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;socket&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;getsockname&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line58"&gt;58&lt;/a&gt; &lt;strong&gt;print&lt;/strong&gt; &lt;span style="color:#008000;"&gt;"Serving HTTP on"&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;sa&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;0&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;, &lt;span style="color:#008000;"&gt;"port"&lt;/span&gt;, &lt;span style="color:#2040a0;"&gt;sa&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;1&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;, &lt;span style="color:#008000;"&gt;"..."&lt;/span&gt;&lt;br /&gt;&lt;a name="line59"&gt;59&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;httpd&lt;/span&gt;.&lt;span style="color:#2040a0;"&gt;serve_forever&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;ref: &lt;a href="http://fragments.turtlemeat.com/pythonwebserver.php"&gt;http://fragments.turtlemeat.com/pythonwebserver.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;對於 script language 我似乎搞錯了, 我還停留在 dos 的批次檔和 bash 的能力。只能處理簡單的文字處理功能, 近來接觸 python 後, 原來 script language 可以完成強大的程式, 而且比起 C/C++ 來說, 簡單不少。身為 C/C++、組合語言基本教義派的我, 也不禁開始懷疑幹嘛那麼辛苦用 C/C++ 來打造程式。除了說服自己在速度上的差異, 好像沒什麼可以在說服自己使用 C/C++, 不過速度在自己身邊的應用, 好像也沒有到無法接受的地步。除了練習的 OS 程式外, 用 script language 好像都可以完成。&lt;br /&gt;&lt;br /&gt;當然 script language 也有些問題, 例如版本的取捨, 目前為止 python 已經來到第三版, 但還是有很多使用者停留在 2, 就算我才剛學, 也是以 python 2 為主。而 python 2.6 和 2.7 的差異, 也多少困擾開發者, 尤其是在使用標準程式庫之外的 library, 還要確認這個 library 是在那個 python 上才能執行。ex: a lib 要 python 2.7, b lib 只能在 python 2.5 以下執行。以 C++ 來舉個反例: qt3, qt4 在一般的 c++ compiler 都應該可以 compile。&lt;br /&gt;&lt;br /&gt;簡單有個很重要的好處, 以 http web server 來說, 很快可以實作一個出來, 把重點擺在 http 來回的 protocol 上, 不用管程式本身的細節, 練功嘛！能動就好了, 不用考慮太多細節, 可以著重在 http 這個重點。&lt;br /&gt;&lt;br /&gt;看看 qt 的 web server 版本: &lt;a href="http://doc.qt.nokia.com/solutions/4/qtservice/qtservice-example-server.html"&gt;http://doc.qt.nokia.com/solutions/4/qtservice/qtservice-example-server.html&lt;/a&gt; 雖然簡化不少, 但還是複雜多了。而且只看程式碼本身, python 很容易就可以猜出來每一行在幹嘛, 不用太多的說明。&lt;br /&gt;&lt;br /&gt;總之在 c/c++ 之外, 學個 script language 好像還不賴。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fragments.turtlemeat.com/pythonwebserver.php"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-7516793448738535781?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/7516793448738535781/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=7516793448738535781' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7516793448738535781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/7516793448738535781'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/python-http-web-server.html' title='python http web server'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-8900563010467670863</id><published>2011-12-15T08:09:00.020+08:00</published><updated>2012-01-20T13:28:15.678+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book_list'/><title type='text'>[wishlist] 簡體中文書單</title><content type='html'>&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center" bgcolor="#FFFFFF"&gt;&lt;img src="http://www.waterlike.com.tw/image/book/TP3C10C008.jpg" border="0" width="150" /&gt;                                            &lt;/td&gt;                                         &lt;td background="n-img/b_bgtRO.gif"&gt;&lt;img src="http://www.waterlike.com.tw/n-img/b_bgtRO.gif" height="8" width="10" /&gt;&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;                                          &lt;td&gt;&lt;img src="http://www.waterlike.com.tw/n-img/b_bgdL.gif" height="9" width="8" /&gt;&lt;/td&gt;                                         &lt;td background="n-img/b_bgdM.gif"&gt;&lt;img src="http://www.waterlike.com.tw/n-img/b_bgdM.gif" height="9" width="2" /&gt;&lt;/td&gt;                                         &lt;td&gt;&lt;img src="http://www.waterlike.com.tw/n-img/b_bgdR.gif" height="9" width="10" /&gt;&lt;/td&gt;                                       &lt;/tr&gt;                                     &lt;/tbody&gt;&lt;/table&gt;                                                                                                                &lt;table width="458"&gt;&lt;tbody&gt;&lt;tr&gt;                                          &lt;td colspan="2"&gt; &lt;table border="0" cellpadding="0" cellspacing="0" width="100%"&gt;                                             &lt;tbody&gt;&lt;tr&gt;                                                &lt;td width="45"&gt;&lt;img src="http://www.waterlike.com.tw/n-img/bt_name.gif" align="absmiddle" height="42" width="45" /&gt;&lt;/td&gt;                                               &lt;td&gt;&lt;span style="font-size:100%;color:#FF3366;"&gt;&lt;strong&gt;深入理解計算機系統(原書第2版)&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;                                             &lt;/tr&gt;                                           &lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;                                       &lt;/tr&gt;                                                                              &lt;tr&gt;                                          &lt;td colspan="2" class="fs666666"&gt;&lt;img src="http://www.waterlike.com.tw/n-img/bt_line1.gif" height="1" width="450" /&gt;&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;                                          &lt;td class="fs666666" nowrap="nowrap"&gt;　&lt;img src="http://www.waterlike.com.tw/n-img/main_bullet_01.gif" height="11" width="7" /&gt;叢書名稱：&lt;/td&gt;                                         &lt;td&gt;&lt;a href="http://www.waterlike.com.tw/indexs.asp?A=%E5%8F%A2%E6%9B%B8%E5%90%8D&amp;amp;textfield=%E6%A9%9F%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%B8%E5%8F%A2%E6%9B%B8" class="link-b"&gt;機算機科學叢書&lt;/a&gt;&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;                                                                                 &lt;/tr&gt;&lt;tr&gt;                                          &lt;td colspan="2" class="L-M-1" nowrap="nowrap"&gt;&lt;img src="http://www.waterlike.com.tw/n-img/bt_line2.gif" height="1" width="450" /&gt;&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;                                          &lt;td class="fs666666" nowrap="nowrap" width="80"&gt;                                            　&lt;img src="http://www.waterlike.com.tw/n-img/main_bullet_01.gif" height="11" width="7" /&gt;作　　者：&lt;/td&gt;                                         &lt;td class="L-M-1" width="366"&gt; &lt;a href="http://www.waterlike.com.tw/indexs.asp?A=%A7@%AA%CC&amp;amp;textfield=%28%E7%BE%8E%29%E5%B8%83%E8%90%8A%E6%81%A9%E7%89%B9"&gt;(美)布萊恩特&lt;/a&gt;&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;                                          &lt;td colspan="2" class="fs666666"&gt;&lt;img src="http://www.waterlike.com.tw/n-img/bt_line2.gif" height="1" width="450" /&gt;&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;                                          &lt;td class="fs666666"&gt;　&lt;img src="http://www.waterlike.com.tw/n-img/main_bullet_01.gif" height="11" width="7" /&gt;出版單位：&lt;/td&gt;                                         &lt;td class="F-arial"&gt;&lt;a href="http://www.waterlike.com.tw/indexs.asp?A=%A5X%AA%A9%AA%C0&amp;amp;textfield=%E6%A9%9F%E6%A2%B0%E5%B7%A5%E6%A5%AD"&gt;機械工業&lt;/a&gt;&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;                                          &lt;td colspan="2" class="fs666666"&gt;&lt;img src="http://www.waterlike.com.tw/n-img/bt_line2.gif" height="1" width="450" /&gt;&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;                                          &lt;td class="fs666666"&gt;　&lt;img src="http://www.waterlike.com.tw/n-img/main_bullet_01.gif" height="11" width="7" /&gt;出版日期：&lt;/td&gt;                                         &lt;td class="F-arial"&gt;2011.01&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;                                          &lt;td colspan="2" class="fs666666"&gt;&lt;img src="http://www.waterlike.com.tw/n-img/bt_line2.gif" height="1" width="450" /&gt;&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;                                          &lt;td class="fs666666"&gt;　&lt;img src="http://www.waterlike.com.tw/n-img/main_bullet_01.gif" height="11" width="7" /&gt;進貨日期：&lt;/td&gt;                                         &lt;td class="F-arial"&gt;100/05/27&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;                                          &lt;td colspan="2" class="fs666666"&gt;&lt;img src="http://www.waterlike.com.tw/n-img/bt_line2.gif" height="1" width="450" /&gt;&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;                                          &lt;td class="fs666666" nowrap="nowrap"&gt;　&lt;img src="http://www.waterlike.com.tw/n-img/main_bullet_01.gif" height="11" width="7" /&gt;ＩＳＢＮ：&lt;/td&gt;                                         &lt;td class="F-arial"&gt;9787111321330&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;&lt;td colspan="2" class="fs666666"&gt;&lt;img src="http://www.waterlike.com.tw/n-img/bt_line2.gif" height="1" width="450" /&gt;&lt;/td&gt;                                       &lt;/tr&gt;                                       &lt;tr&gt;                                          &lt;td class="fs666666"&gt;&lt;span class="fs666666"&gt;　&lt;img src="http://www.waterlike.com.tw/n-img/main_bullet_01.gif" height="11" width="7" /&gt;售　　價：&lt;/span&gt;&lt;/td&gt;                                         &lt;td&gt; &lt;strong&gt; &lt;span class="LINK-B12B"&gt;                                            &lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;&lt;span class="LINK-B12B"&gt;                                            99 &lt;/span&gt;&lt;/strong&gt;人民幣                                                                                     &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;     &lt;span&gt;操作系统设计与实现（上册）&lt;/span&gt;     &lt;/h1&gt;                                                      &lt;div id="mainpic"&gt;&lt;a class="nbg" href="http://img3.douban.com/lpic/s5811568.jpg" title="操作系统设计与实现（上册）"&gt;                  &lt;img src="http://img3.douban.com/mpic/s5811568.jpg" title="点击看大图" alt="操作系统设计与实现（上册）" rel="v:photo" /&gt;              &lt;/a&gt;&lt;br /&gt;     &lt;/div&gt;&lt;span&gt;&lt;span class="pl"&gt;作者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/Andrew%20S.%20Tanenbaum"&gt;Andrew S. Tanenbaum&lt;/a&gt; / &lt;a href="http://book.douban.com/search/Albert%20S.%20Woodhull"&gt;Albert S. Woodhull&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="pl"&gt;译者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/%E9%99%88%E6%B8%9D"&gt;陈渝&lt;/a&gt; / &lt;a href="http://book.douban.com/search/%E8%B0%8C%E5%8D%AB%E5%86%9B"&gt;谌卫军&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pl"&gt;出版社:&lt;/span&gt; 电子工业出版社&lt;br /&gt;&lt;span class="pl"&gt;出版年:&lt;/span&gt; 2007-3&lt;br /&gt;&lt;span class="pl"&gt;页数:&lt;/span&gt; 453&lt;br /&gt;&lt;span class="pl"&gt;定价:&lt;/span&gt; 49.80元&lt;br /&gt;&lt;span class="pl"&gt;装帧:&lt;/span&gt; 平装&lt;br /&gt;&lt;span class="pl"&gt;ISBN:&lt;/span&gt; 9787121033810&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;     &lt;span&gt;操作系统设计与实现(下册)(第3版)(附盘) (平装)&lt;/span&gt;     &lt;/h1&gt;                                                      &lt;div id="mainpic"&gt;&lt;a class="nbg" href="http://img3.douban.com/lpic/s2504786.jpg" title="操作系统设计与实现(下册)(第3版)(附盘) (平装)"&gt;                  &lt;img src="http://img3.douban.com/mpic/s2504786.jpg" title="点击看大图" alt="操作系统设计与实现(下册)(第3版)(附盘) (平装)" rel="v:photo" /&gt;              &lt;/a&gt;&lt;br /&gt;     &lt;/div&gt;&lt;span&gt;&lt;span class="pl"&gt;作者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/%E5%A1%94%E5%AB%A9%E9%B2%8D%E5%A7%86"&gt;塔嫩鲍姆&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span class="pl"&gt;译者&lt;/span&gt;: &lt;a href="http://book.douban.com/search/%E9%99%88%E6%B8%9D%3B%E8%B0%8C%E5%8D%AB%E5%86%9B"&gt;陈渝;谌卫军&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pl"&gt;出版社:&lt;/span&gt; 电子工业出版社&lt;br /&gt;&lt;span class="pl"&gt;出版年:&lt;/span&gt; 2007年03月&lt;br /&gt;&lt;span class="pl"&gt;页数:&lt;/span&gt; 357 页&lt;br /&gt;&lt;span class="pl"&gt;定价:&lt;/span&gt; 49.0&lt;br /&gt;&lt;span class="pl"&gt;装帧:&lt;/span&gt; 平装&lt;br /&gt;&lt;span class="pl"&gt;ISBN:&lt;/span&gt; 9787121026485&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-8900563010467670863?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/8900563010467670863/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=8900563010467670863' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/8900563010467670863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/8900563010467670863'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/wishlist.html' title='[wishlist] 簡體中文書單'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-809855871914215720</id><published>2011-12-15T08:06:00.000+08:00</published><updated>2011-12-15T08:07:47.871+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜七雜八'/><title type='text'>房市命運大不同 台灣德國兩樣情</title><content type='html'>&lt;iframe src="http://www.youtube.com/embed/EMFcXVOUrGc" allowfullscreen="" frameborder="0" height="315" width="560"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-809855871914215720?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/809855871914215720/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=809855871914215720' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/809855871914215720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/809855871914215720'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/blog-post_15.html' title='房市命運大不同 台灣德國兩樣情'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/EMFcXVOUrGc/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-9179446867889548862</id><published>2011-12-13T20:04:00.000+08:00</published><updated>2011-12-13T20:07:24.396+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='影片'/><title type='text'>華視生活氣象 - 邱薇而主播</title><content type='html'>自己看:&lt;br /&gt;&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/DO-i4vUze54" frameborder="0" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/iwTUxVaacS8" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-9179446867889548862?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/9179446867889548862/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=9179446867889548862' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/9179446867889548862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/9179446867889548862'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/blog-post.html' title='華視生活氣象 - 邱薇而主播'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/DO-i4vUze54/default.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-2862631698683030220</id><published>2011-12-12T15:51:00.013+08:00</published><updated>2012-01-15T13:06:57.776+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雜七雜八'/><category scheme='http://www.blogger.com/atom/ns#' term='computer book'/><title type='text'>20111212 若水堂購書</title><content type='html'>今天 (20111212) 到台南成大若水堂逛逛, 一進門有點刺鼻的味道迎面而來, 中國書籍幾乎都會有這樣的味道, 下次得戴口罩去才行。照例先往電腦書籍區移動, 總是能看到令我振奮的主題, 很羨慕中國電腦出版社可以出這麼多樣化的書籍, 在台灣的電腦書籍中很少能看到這些主題。幾分鐘後口袋裡頭已經有不少的書單了, 但這時候我還沒決定要買, 今天只是單純來逛逛, 直到我看到 code ...&lt;br /&gt;&lt;br /&gt;code 編碼 55&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/9mgz5k3qbqzuWMX-U1iH9dMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-aMRxUYmdaRc/TuWv636uqjI/AAAAAAAAXUA/t4N9dwEuPUA/s640/P1010072.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strike&gt;不好意思, 由於我沒能讀完這本書, 所以我也不知道這是什麼樣的書籍&lt;/strike&gt;, 我擁有的是英文版, 曾經試圖翻閱, 卻總是在其艱難的英文句子中敗退下來。這是很久很久之前不知道在哪裡聽說到的書, 因為作者 Charles Petzold 很有名, 我相信這會是一本好書, 就這樣買了下來, 現在有了簡體中文版本, 我 ... 應該有機會讀完它吧！&lt;div&gt;&lt;br /&gt;20120111 補充:&lt;br /&gt;這是本在講述計算機的故事, 從燈泡、開關到打造出一台計算機以及後來的軟體發展到網路的故事: &lt;a href="http://descent-incoming.blogspot.com/2012/01/code-hidden-language-of-computer.html"&gt;http://descent-incoming.blogspot.com/2012/01/code-hidden-language-of-computer.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;因為決定要買這本, 連帶把其他覺得不錯的書 (本來還沒決定買的) 也一起帶走了。&lt;br /&gt;&lt;br /&gt;德語隨口說 25&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/E0H6TBJlk3hXdafeAWAijUU-Kf2DhqafvTPNQJhKRrw?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-7tUiGL7lPf0/TuWv9F23ZMI/AAAAAAAAXUI/Kfexu9MViX0/s288/P1010073.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;a href="https://picasaweb.google.com/lh/photo/okHVCu3tJ-2Q9ZHh4f2Tp0U-Kf2DhqafvTPNQJhKRrw?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-YjLExzBpg3M/TuWv-zybqPI/AAAAAAAAXUM/kyrCIGadybg/s288/P1010074.JPG" height="216" width="288" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;我很喜歡小書, 看到這樣的德語學習書, 忍不住就買了。&lt;br /&gt;&lt;br /&gt;一步步寫嵌入式操作系統 - arm 編程的方法與實踐 39&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/EVCYo5IOyY78nah5iIp5BNMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-KzEJjHDbSac/TuWv5H3yEaI/AAAAAAAAXT8/XOOiKdvAcqU/s640/P1010071.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;簡單來說就是一步一步打造 arm os, 我被裡頭的記憶體管理演算法吸引, 類似 linux slab 的方式來實作記憶體管理。&lt;a href="http://www.leeos.org/"&gt;http://www.leeos.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;jquery 攻略 59&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/jKWRpFQDZrXM-RN85qNTadMTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-VLdYBwGyL6M/TuWv3dm6eNI/AAAAAAAAXT4/qwNerC_XNoA/s640/P1010070.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;裡頭提到不少網頁應用, 我覺得應該會有用, 就買了。後來想想, 好像不太划算, 繁體中文的 jquery 書籍大概在 450 ~ 550 之間, 打 8 折後應該在 400 左右, 這本要 354 台幣, 好像沒便宜多少。&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.apress.com/9781430227090"&gt;http://www.apress.com/9781430227090&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;linux c 編程 - 站式學習 60&lt;br /&gt;&lt;a href="https://picasaweb.google.com/lh/photo/7zEaTvTwWwqoinrNbTb8R9MTjNZETYmyPJy0liipFm0?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-aMu0qWmdikg/TuWv17MkWzI/AAAAAAAAXT0/0BPbibGEaBY/s640/P1010069.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;市面上有好多好多的 C 語言書籍, 我已經有了 The C Programming Language, 實際上我的 C 語言書籍不多, 大部份是 C++ 相關書籍。我大多是從 c++ 書籍上順便學習 c。這本書能吸引我的目光是因為作者提到了匯編 (組合語言) 與 C 關係, 詳細解釋了 crt.o 和組合語言之間的關係, 還有 linker 的東西, 這對我來說可是如獲至寶, 只因為三個章節的內容, 我就買了, 書中應該超過一半是我已經知道的東西吧！&lt;br /&gt;&lt;br /&gt;買回家細看之後, 比我想的更值回票價, 書中提到的 c99, 讓我對有些 c99 語法有了概念, 原來某些我不太理解的語法是 C99 的用法。而第 17 章 - x86 匯編程序基礎 (組合語言基礎), 讓人受用, 藉由 readelf 讓我得知 obj 和 elf 執行檔案的內容, 雖然只是短短的一章, 需要不少腦力, 若在書店看, 得好好找張椅子慢慢消化, 買回家讀還是舒服些。&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;這四本書中, 應該是 code 編碼最貴才是, 結果 jquery 攻略定價還贏過 code 編碼, jquery 攻略裡頭談的技術應該是最低的, 可是定價卻不便宜, 出乎我意料之外。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;書名旁的數字是人民幣定價, 若水堂 X 6 賣給非會員讀者。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-2862631698683030220?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/2862631698683030220/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=2862631698683030220' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/2862631698683030220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/2862631698683030220'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/20111212.html' title='20111212 若水堂購書'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-aMRxUYmdaRc/TuWv636uqjI/AAAAAAAAXUA/t4N9dwEuPUA/s72-c/P1010072.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-2557249989428925074</id><published>2011-12-09T12:34:00.013+08:00</published><updated>2012-01-17T15:56:03.266+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c_runtime'/><title type='text'>c runtime - array vs pointer</title><content type='html'>這主題不算是 c runtime, 只是我自己想這樣分類。&lt;br /&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="https://picasaweb.google.com/lh/photo/u_YK6hr6m6XbN1GbqmIw6hmkFCLSrpasU46ewrN9XHA?feat=embedwebsite"&gt;&lt;img src="https://lh3.googleusercontent.com/-PzNaxypYOxg/TuGz73HCRxI/AAAAAAAAXPc/jmJv0E2bojw/s640/IMGP7489.JPG" height="480" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="https://picasaweb.google.com/105103177642172932400/WishListBooks?authuser=0&amp;amp;authkey=Gv1sRgCMe6o7--mamXhgE&amp;amp;feat=embedwebsite"&gt;wish list books&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;程式設計師面試寶典 (已經絕版, 連這種書都會絕版, 真讓我驚訝, 這可算是電腦界的高普考書籍耶！): p 7-6 提到的考題:&lt;br /&gt;char c[]="hello";&lt;br /&gt;char *c="hello";&lt;br /&gt;有什麼不同?&lt;br /&gt;&lt;br /&gt;書上花了近兩頁的篇幅在解釋, 不過沒有告訴你為什麼?也許你和我一樣, 會想知道為什麼? 看看翻出來的組合語言就知道了。&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;a.c&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt;1&lt;/a&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;main&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line2"&gt;2&lt;/a&gt; &lt;span style="color:4444FF;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="line3"&gt;3&lt;/a&gt;   &lt;strong&gt;char&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;str&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;"hello"&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line4"&gt;4&lt;/a&gt;   &lt;strong&gt;return&lt;/strong&gt; &lt;span style="color:#FF0000;"&gt;0&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line5"&gt;5&lt;/a&gt; &lt;span style="color:4444FF;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;gcc -S a.c 得到 a.s&lt;br /&gt;&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line9"&gt;9&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $1819043176, -6(%ebp)&lt;br /&gt;&lt;a name="line10"&gt;10&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; $111, -2(%ebp)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:4444FF;"&gt;1819043176 = &lt;/span&gt;0x6C6C6568&lt;br /&gt;111 = 0x6f&lt;br /&gt;"hello" = {0x68, 0x65, 0x6c, 0x6c, 0x6f}&lt;br /&gt;所以第 9, 10 行就是把 hello 放到 %ebp 指的 stack 中。&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;a.s&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt; 1&lt;/a&gt; &lt;span style="color:4444FF;"&gt; .file &lt;span style="color:#008000;"&gt;"a.c"&lt;/span&gt;&lt;br /&gt;&lt;a name="line2"&gt; 2&lt;/a&gt;  .text&lt;br /&gt;&lt;a name="line3"&gt; 3&lt;/a&gt; .globl main&lt;br /&gt;&lt;a name="line4"&gt; 4&lt;/a&gt;  .type main, @function&lt;br /&gt;&lt;a name="line5"&gt; 5&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;main:&lt;/span&gt;&lt;br /&gt;&lt;a name="line6"&gt; 6&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ebp&lt;br /&gt;&lt;a name="line7"&gt; 7&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; %esp, %ebp&lt;br /&gt;&lt;a name="line8"&gt; 8&lt;/a&gt; &lt;strong&gt; subl&lt;/strong&gt; $16, %esp&lt;br /&gt;&lt;a name="line9"&gt; 9&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $1819043176, -6(%ebp)&lt;br /&gt;&lt;a name="line10"&gt;10&lt;/a&gt; &lt;strong&gt; movw&lt;/strong&gt; $111, -2(%ebp)&lt;br /&gt;&lt;a name="line11"&gt;11&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $0, %eax&lt;br /&gt;&lt;a name="line12"&gt;12&lt;/a&gt; &lt;strong&gt; leave&lt;/strong&gt;&lt;br /&gt;&lt;a name="line13"&gt;13&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line14"&gt;14&lt;/a&gt;  .size main, .-main&lt;br /&gt;&lt;a name="line15"&gt;15&lt;/a&gt;  .ident &lt;span style="color:#008000;"&gt;"GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"&lt;/span&gt;&lt;br /&gt;&lt;a name="line16"&gt;16&lt;/a&gt;  .section .note.GNU-stack,&lt;span style="color:#008000;"&gt;""&lt;/span&gt;,@progbits&lt;br /&gt;&lt;a name="line17"&gt;17&lt;/a&gt; &lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;a-ro.c&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt;1&lt;/a&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;main&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line2"&gt;2&lt;/a&gt; &lt;span style="color:4444FF;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="line3"&gt;3&lt;/a&gt;   &lt;strong&gt;char&lt;/strong&gt; &lt;span style="color:4444FF;"&gt;*&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;str&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;"hello"&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line4"&gt;4&lt;/a&gt;   &lt;strong&gt;return&lt;/strong&gt; &lt;span style="color:#FF0000;"&gt;0&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line5"&gt;5&lt;/a&gt; &lt;span style="color:4444FF;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;gcc -S a-ro.c 得到 a-ro.s&lt;br /&gt;&lt;br /&gt;&lt;span style="color:4444FF;"&gt;&lt;a name="line2"&gt;2&lt;/a&gt;  .section .rodata&lt;br /&gt;&lt;a name="line3"&gt; 3&lt;/a&gt; .LC0:&lt;br /&gt;&lt;a name="line4"&gt; 4&lt;/a&gt;  .string &lt;span style="color:#008000;"&gt;"hello"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"hello" 是放在 .rodata section, 這會佔用執行檔案的空間, 所以執行檔會大一些。不過編譯後的執行檔案大小一樣, obj 檔倒是有大小的差異。可能還有我沒搞懂的地方。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;a-ro.s&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt; 1&lt;/a&gt; &lt;span style="color:4444FF;"&gt; .file &lt;span style="color:#008000;"&gt;"a-ro.c"&lt;/span&gt;&lt;br /&gt;&lt;a name="line2"&gt; 2&lt;/a&gt;  .section .rodata&lt;br /&gt;&lt;a name="line3"&gt; 3&lt;/a&gt; .LC0:&lt;br /&gt;&lt;a name="line4"&gt; 4&lt;/a&gt;  .string &lt;span style="color:#008000;"&gt;"hello"&lt;/span&gt;&lt;br /&gt;&lt;a name="line5"&gt; 5&lt;/a&gt;  .text&lt;br /&gt;&lt;a name="line6"&gt; 6&lt;/a&gt; .globl main&lt;br /&gt;&lt;a name="line7"&gt; 7&lt;/a&gt;  .type main, @function&lt;br /&gt;&lt;a name="line8"&gt; 8&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;main:&lt;/span&gt;&lt;br /&gt;&lt;a name="line9"&gt; 9&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ebp&lt;br /&gt;&lt;a name="line10"&gt;10&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; %esp, %ebp&lt;br /&gt;&lt;a name="line11"&gt;11&lt;/a&gt; &lt;strong&gt; subl&lt;/strong&gt; $16, %esp&lt;br /&gt;&lt;a name="line12"&gt;12&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $.LC0, -4(%ebp)&lt;br /&gt;&lt;a name="line13"&gt;13&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $0, %eax&lt;br /&gt;&lt;a name="line14"&gt;14&lt;/a&gt; &lt;strong&gt; leave&lt;/strong&gt;&lt;br /&gt;&lt;a name="line15"&gt;15&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line16"&gt;16&lt;/a&gt;  .size main, .-main&lt;br /&gt;&lt;a name="line17"&gt;17&lt;/a&gt;  .ident &lt;span style="color:#008000;"&gt;"GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"&lt;/span&gt;&lt;br /&gt;&lt;a name="line18"&gt;18&lt;/a&gt;  .section .note.GNU-stack,&lt;span style="color:#008000;"&gt;""&lt;/span&gt;,@progbits&lt;br /&gt;&lt;a name="line19"&gt;19&lt;/a&gt; &lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;看來差異不大, 但題目是如果把 c return 回去的話會怎樣?&lt;br /&gt;&lt;br /&gt;char c[]="hello";&lt;br /&gt;char *c="hello";&lt;br /&gt;return c;&lt;br /&gt;&lt;br /&gt;c[] 放在 stack 裡, 在 return 時, &lt;strike&gt;stack 會被清掉&lt;/strike&gt;不應該這麼描述, 應該說: stack 的位址很多 code 會使用, function return 時, 若要存取這個 stack 位址的時候沒有其他 code 來蓋掉這個 stack 位址, 那就不會有問題, 但這是無法保證的。所以無法預期 c[] 的值還會是 "hello", *c 則是在 .rodata, 在執行環境記憶體已經保留出一個位置存放 "hello", 所以沒有問題。&lt;br /&gt;&lt;br /&gt;若程式執行起來沒問題, 那是運氣好, 不過, 相信我, 你不會一直有這樣的運氣, 這種 bug 很難找。&lt;br /&gt;&lt;br /&gt;至於 *c 存在 .rodata, 所以 *c 指到的 "hello" 是無法修改的, 無法使用 c[0]='z' 來修改。既然唯讀, 也難怪大部份都是看到 const char *c="hello"; 這樣的寫法, 因為我讀過的書說要這樣寫,直覺的寫法就應該是這樣, 現在我知道為什麼了。這也很讓我驚訝, C 是這麼隱晦不清的語言, char *c 從語法來看, 完全看不出來有 const 的意思, 也難怪在  The C Programming Language 之後, 會有那麼多的書籍來討論 C 語言了。&lt;br /&gt;&lt;br /&gt;在 gcc 的測試下,&lt;br /&gt;char *c="hello";&lt;br /&gt;c[0]='Q';&lt;br /&gt;在執行的時候會得到 Segmentation fault, 因為改變唯讀記憶體的位址, 所以有這樣的行為, 在編譯期間, compiler 沒有抓到這樣的錯誤, 我有點納悶。當然, 若是用 const char *c="hello";&lt;br /&gt;編譯器就會警告了。&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;static array vs static pointer&lt;/h2&gt;&lt;br /&gt;測試讀寫的情形。&lt;span style="color:#2040a0;"&gt;str&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;2&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;'q'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;static array 不會放到 .rodata, 所以可以讀寫。&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;a-static-array.c&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt;1&lt;/a&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;main&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line2"&gt;2&lt;/a&gt; &lt;span style="color:4444FF;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="line3"&gt;3&lt;/a&gt;   //&lt;strong&gt;char&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;str&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;"hello"&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line4"&gt;4&lt;/a&gt;   &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;char&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;str&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;"hello"&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line5"&gt;5&lt;/a&gt;   &lt;span style="color:#2040a0;"&gt;str&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;2&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;'q'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line6"&gt;6&lt;/a&gt;   &lt;strong&gt;return&lt;/strong&gt; &lt;span style="color:#FF0000;"&gt;0&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line7"&gt;7&lt;/a&gt; &lt;span style="color:4444FF;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;a-static-array.s&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt; 1&lt;/a&gt; &lt;span style="color:4444FF;"&gt; .file &lt;span style="color:#008000;"&gt;"a.c"&lt;/span&gt;&lt;br /&gt;&lt;a name="line2"&gt; 2&lt;/a&gt;  .text&lt;br /&gt;&lt;a name="line3"&gt; 3&lt;/a&gt; .globl main&lt;br /&gt;&lt;a name="line4"&gt; 4&lt;/a&gt;  .type main, @function&lt;br /&gt;&lt;a name="line5"&gt; 5&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;main:&lt;/span&gt;&lt;br /&gt;&lt;a name="line6"&gt; 6&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ebp&lt;br /&gt;&lt;a name="line7"&gt; 7&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; %esp, %ebp&lt;br /&gt;&lt;a name="line8"&gt; 8&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $113, str.1247+2&lt;br /&gt;&lt;a name="line9"&gt; 9&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $0, %eax&lt;br /&gt;&lt;a name="line10"&gt;10&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ebp&lt;br /&gt;&lt;a name="line11"&gt;11&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line12"&gt;12&lt;/a&gt;  .size main, .-main&lt;br /&gt;&lt;a name="line13"&gt;13&lt;/a&gt;  .data&lt;br /&gt;&lt;a name="line14"&gt;14&lt;/a&gt;  .type str.1247, @object&lt;br /&gt;&lt;a name="line15"&gt;15&lt;/a&gt;  .size str.1247, 6&lt;br /&gt;&lt;a name="line16"&gt;16&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;str&lt;/span&gt;.1247:&lt;br /&gt;&lt;a name="line17"&gt;17&lt;/a&gt;  .string &lt;span style="color:#008000;"&gt;"hello"&lt;/span&gt;&lt;br /&gt;&lt;a name="line18"&gt;18&lt;/a&gt;  .ident &lt;span style="color:#008000;"&gt;"GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"&lt;/span&gt;&lt;br /&gt;&lt;a name="line19"&gt;19&lt;/a&gt;  .section .note.GNU-stack,&lt;span style="color:#008000;"&gt;""&lt;/span&gt;,@progbits&lt;br /&gt;&lt;a name="line20"&gt;20&lt;/a&gt; &lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;pointer 的版本似乎都會將 "hello" 放到 .rodata (不管有沒 static), 所以看來 pointer 的版本應該都只能讀 (執行結果會得到 Segmentation fault), 不能寫。&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;a-static-pointer.c&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt;1&lt;/a&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;main&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;a name="line2"&gt;2&lt;/a&gt; &lt;span style="color:4444FF;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="line3"&gt;3&lt;/a&gt;   //&lt;strong&gt;char&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;str&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;"hello"&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line4"&gt;4&lt;/a&gt;   &lt;strong&gt;static&lt;/strong&gt; &lt;strong&gt;char&lt;/strong&gt; &lt;span style="color:4444FF;"&gt;*&lt;/span&gt;&lt;span style="color:#2040a0;"&gt;str&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;"hello"&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line5"&gt;5&lt;/a&gt;   &lt;span style="color:#2040a0;"&gt;str&lt;/span&gt;&lt;span style="color:4444FF;"&gt;[&lt;/span&gt;&lt;span style="color:#FF0000;"&gt;2&lt;/span&gt;&lt;span style="color:4444FF;"&gt;]&lt;/span&gt;&lt;span style="color:4444FF;"&gt;=&lt;/span&gt;&lt;span style="color:#008000;"&gt;'q'&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line6"&gt;6&lt;/a&gt;   &lt;strong&gt;return&lt;/strong&gt; &lt;span style="color:#FF0000;"&gt;0&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line7"&gt;7&lt;/a&gt; &lt;span style="color:4444FF;"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;a-static-pointer.s&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt; 1&lt;/a&gt; &lt;span style="color:4444FF;"&gt; .file &lt;span style="color:#008000;"&gt;"a.c"&lt;/span&gt;&lt;br /&gt;&lt;a name="line2"&gt; 2&lt;/a&gt;  .text&lt;br /&gt;&lt;a name="line3"&gt; 3&lt;/a&gt; .globl main&lt;br /&gt;&lt;a name="line4"&gt; 4&lt;/a&gt;  .type main, @function&lt;br /&gt;&lt;a name="line5"&gt; 5&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;main:&lt;/span&gt;&lt;br /&gt;&lt;a name="line6"&gt; 6&lt;/a&gt; &lt;strong&gt; pushl&lt;/strong&gt; %ebp&lt;br /&gt;&lt;a name="line7"&gt; 7&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; %esp, %ebp&lt;br /&gt;&lt;a name="line8"&gt; 8&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; str.1247, %eax&lt;br /&gt;&lt;a name="line9"&gt; 9&lt;/a&gt; &lt;strong&gt; addl&lt;/strong&gt; $2, %eax&lt;br /&gt;&lt;a name="line10"&gt;10&lt;/a&gt; &lt;strong&gt; movb&lt;/strong&gt; $113, (%eax)&lt;br /&gt;&lt;a name="line11"&gt;11&lt;/a&gt; &lt;strong&gt; movl&lt;/strong&gt; $0, %eax&lt;br /&gt;&lt;a name="line12"&gt;12&lt;/a&gt; &lt;strong&gt; popl&lt;/strong&gt; %ebp&lt;br /&gt;&lt;a name="line13"&gt;13&lt;/a&gt; &lt;strong&gt; ret&lt;/strong&gt;&lt;br /&gt;&lt;a name="line14"&gt;14&lt;/a&gt;  .size main, .-main&lt;br /&gt;&lt;a name="line15"&gt;15&lt;/a&gt;  .section .rodata&lt;br /&gt;&lt;a name="line16"&gt;16&lt;/a&gt; .LC0:&lt;br /&gt;&lt;a name="line17"&gt;17&lt;/a&gt;  .string &lt;span style="color:#008000;"&gt;"hello"&lt;/span&gt;&lt;br /&gt;&lt;a name="line18"&gt;18&lt;/a&gt;  .data&lt;br /&gt;&lt;a name="line19"&gt;19&lt;/a&gt;  .align 4&lt;br /&gt;&lt;a name="line20"&gt;20&lt;/a&gt;  .type str.1247, @object&lt;br /&gt;&lt;a name="line21"&gt;21&lt;/a&gt;  .size str.1247, 4&lt;br /&gt;&lt;a name="line22"&gt;22&lt;/a&gt; &lt;span style="color:#2040a0;"&gt;str&lt;/span&gt;.1247:&lt;br /&gt;&lt;a name="line23"&gt;23&lt;/a&gt;  .long .LC0&lt;br /&gt;&lt;a name="line24"&gt;24&lt;/a&gt;  .ident &lt;span style="color:#008000;"&gt;"GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"&lt;/span&gt;&lt;br /&gt;&lt;a name="line25"&gt;25&lt;/a&gt;  .section .note.GNU-stack,&lt;span style="color:#008000;"&gt;""&lt;/span&gt;,@progbits&lt;br /&gt;&lt;a name="line26"&gt;26&lt;/a&gt; &lt;/span&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;br /&gt;size 差異:&lt;br /&gt;7145 2011-12-09 16:00 a-static-array&lt;br /&gt;7143 2011-12-09 16:00 a-static-pointer&lt;br /&gt;&lt;br /&gt;20120117 補充:&lt;br /&gt;&lt;br /&gt;在 C 程式語言 (第二版) p C-3 看到 16. 字串常數不再可被更改 ..., 也許就是描述這個情形。&lt;br /&gt;英文版本在 p 260 Strings are no longer modifiable, and so may be placed inread-only memory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-2557249989428925074?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/2557249989428925074/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=2557249989428925074' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/2557249989428925074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/2557249989428925074'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/c-runtime-array-vs-pointer.html' title='c runtime - array vs pointer'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-PzNaxypYOxg/TuGz73HCRxI/AAAAAAAAXPc/jmJv0E2bojw/s72-c/IMGP7489.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-294697370819870423</id><published>2011-12-09T11:30:00.002+08:00</published><updated>2011-12-09T11:33:48.423+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux 相關'/><title type='text'>avi 分割/合併軟體影片檔/dvd 轉 avi  (linux)</title><content type='html'>env:&lt;br /&gt;ubnutu 10.04&lt;br /&gt;&lt;br /&gt;apt-get install avidemux&lt;br /&gt;apt-get install dvdrip&lt;br /&gt;&lt;br /&gt;dvdrip (linux):&lt;br /&gt;&lt;a href="http://darkranger.no-ip.org/archives/v5/document/linux/dvd_rip_linux.htm"&gt;http://darkranger.no-ip.org/archives/v5/document/linux/dvd_rip_linux.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;avi 分割/合併軟體(linux):&lt;br /&gt;&lt;a href="http://briian.com/?p=7385"&gt;http://briian.com/?p=7385&lt;/a&gt;&lt;br /&gt;&lt;a href="http://save-coco.blogspot.com/2008/11/avidemux.html"&gt;http://save-coco.blogspot.com/2008/11/avidemux.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3574663204983450629-294697370819870423?l=descent-incoming.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://descent-incoming.blogspot.com/feeds/294697370819870423/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3574663204983450629&amp;postID=294697370819870423' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/294697370819870423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3574663204983450629/posts/default/294697370819870423'/><link rel='alternate' type='text/html' href='http://descent-incoming.blogspot.com/2011/12/avi-dvd-avi-linux.html' title='avi 分割/合併軟體影片檔/dvd 轉 avi  (linux)'/><author><name>descent</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://poorman.org/~descent/s.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3574663204983450629.post-1317287398790321419</id><published>2011-12-02T16:50:00.005+08:00</published><updated>2011-12-02T17:04:15.483+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><title type='text'>C++11：Lambda expression</title><content type='html'>c++ 越來越複雜了, c++ 11 有個 Lambda expression。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;fieldset&gt;&lt;legend&gt;lambda.cpp&lt;/legend&gt;&lt;br /&gt;&lt;a name="line1"&gt; 1&lt;/a&gt; &lt;span style="color:#444444;"&gt;// ref: http://kheresy.wordpress.com/2010/05/27/c0x%EF%BC%9Alambda-expression/&lt;/span&gt;&lt;br /&gt;&lt;a name="line2"&gt; 2&lt;/a&gt; &lt;span style="color:0000ff;"&gt;&lt;strong&gt;#include &lt;span style="color:#008000;"&gt;&amp;lt;vector&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="line3"&gt; 3&lt;/a&gt; &lt;span style="color:0000ff;"&gt;&lt;strong&gt;#include &lt;span style="color:#008000;"&gt;&amp;lt;algorithm&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="line4"&gt; 4&lt;/a&gt; &lt;span style="color:0000ff;"&gt;&lt;strong&gt;#include &lt;span style="color:#008000;"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="line5"&gt; 5&lt;/a&gt;&lt;br /&gt;&lt;a name="line6"&gt; 6&lt;/a&gt; &lt;strong&gt;using&lt;/strong&gt; &lt;strong&gt;namespace&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;std&lt;/span&gt;&lt;span style="color:4444FF;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;a name="line7"&gt; 7&lt;/a&gt;&lt;br /&gt;&lt;a name="line8"&gt; 8&lt;/a&gt; &lt;strong&gt;int&lt;/strong&gt; &lt;span style="color:#2040a0;"&gt;main&lt;/span&gt;&lt;span style="color:4444FF;"&gt;(&lt;/span&gt;&lt;span style="color:4444FF;"&gt;)&lt;/span&gt; &lt;span style="color:4444FF;"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;a name="line9"&gt; 9&lt;/a&gt;&lt;br /&gt;&lt;a name="line10"&gt;10&lt;/a&gt;   &lt;span style="color:#2040a0;"&gt;vector&lt;/span&gt;&lt;span style="color:4444FF;"&gt;&amp;lt;&lt;/span&gt;&lt;s
