iT邦幫忙

DAY 7
1

freedos bochs 16位元 組合語言…等系列 第 7

FreeDos下組合語言之熱身:debug之六,80x86間接定址模式

  • 分享至 

  • xImage
  •  

不知道是第幾本組合語言的書,
翻到這類的章節,就跳過了,太傷腦筋,或沒有即時練習,所以…。
不懂,不會影響到之後,用工作經驗可以証明這點。
但人生總是會變,尤其每本DIY作業系統的入門書,開頭不約而同都用組合語語給你來一點騷癢,
讓你早晚要面對它。那就用人生的45天(不是30天哦),來體驗一下。
-----------------
這種感覺,就像WEB 應用程式全面入侵,即使手機APP的應用,用objective-c/java, 手機網頁也全面入侵。不會WEB應用程式,像個外星人,而要寫個稍微滿意的網頁,又要好
的背景知識。
-----------------
暫存器可以接受值,當你給值時,可以有幾種方式,
本篇介紹4種方式:

08FA:0100 mov bx,200      給個值
08FA:0103 mov bx,[200]    給位址裏所代表的值
08FA:0107 mov bx,ax       給暫存器的值
08FA:0109 mov [bx],ax     接值,用指向的位址,來接暫存器的值

debug中有一個e參數,
e cs:200 可以編寫位址200裏的內容,在實驗的過程中,要變動一下位址裏的值,那個FEELING才會有。
所以我會稍微調整一下順序,感覺比較流暢。
r ip仍是筆者很激賞的指令,ip指向目前執行到的位址,如果己執行到110,你可藉由
r ip變動位址,在效果上,就是可以隨意往前往後移動位址,印象中大多語言的除錯模式,都是單向,一路往下執行,極少數可以回頭執行。r ip就是其中的極少數,
在練習中,我們可以反覆回到上一步,來練習,加深印象。

中括號**[]**,在一般語言中少用,筆者目前用到的4GL,中括號是類似substring的用法,
sr.pml01[3,5], 是取變數第3個字元開始,取5碼的長度。和組合語言語法上完全無關。
本文取材自Short Exercise on 80x86 Indirect Addressing Mode
網址是http://www.youtube.com/watch?v=qTWh-3I0gqc&feature=plcp

C:\>debug
-a 100
08FA:0100 mov bx,200
08FA:0103 mov bx,[200]
08FA:0107 mov bx,ax
08FA:0109 mov [bx],ax
08FA:010B
-e cs:200
08FA:0200  46.cc   FC.dd   8D.
-d cs:200
08FA:0200  CC DD 8D 86 D2 FE 50 E8-B4 4A 59 0B C0 75 03 E9 
-r ax
AX 0000  :aabb

這樣就完成實驗的布置。
t一步一步執行。

執行100行,
bx由原來的0000,變成0200。
執行下一步,
bx由0200,變成DDCC
注意:因為Little endian 的關係,寫入順序時,是CC DD, 實際上取用是DD CC
執行下一步,

-d cs:aabb
08FA:AAB0                         -         BB AA 31 00 73            ..1.s

這時候位址AABB(bx存AABB),被改成BBAA.

再做一次,
把位址aabb清為00

-e cs:aabb
08FA:AABB  BB.00   AA.00   31.00   00.00   73.00
08FA:AAC0  FB.
-d cs:aab0
08FA:AAB0  F6 D3 31 C9 E8 39 00 11-C9 75 08 00 00 00 00 00 ..1..9...u......

把IP往回指向109,
按t,下一步。確實有寫回AABB。

小結:[]是取位址裏所存放的值。因為一般語言沒有位址的概念(C/C++語言是有的,用,**&**來實作),所以這段練習筆者要特別識別清楚。
基本上,實戰的程式裏,沒人真的把位址拿來寫在程式裏,而用標籤(label)來識別,
所以把標籤和位址做一個連結,是很重要的觀念。


上一篇
FreeDos下組合語言之熱身:debug之五,相對位址
下一篇
FreeDos下組合語言之熱身:debug之七,add ,sub
系列文
freedos bochs 16位元 組合語言…等17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
timloo
iT邦研究生 2 級 ‧ 2012-09-30 11:55:39

這篇短文撰寫時,發生一個小插曲,
就是輸入法是中文時,
在debug裏輸入會產生亂碼,這時debug產生錯亂,
按不下去,也不能跳開,最後,只好從外部關掉bochs(freedos 也關掉了)
---------------------
昨天凌晨時,課長打電話給我,人雖沒睡,但不想接了,
早上10點回課長,
說是經管部的同事,執行水晶報表,資料太多,導致當掉了(記憶體不足),
之前公司的財務系統是在舊版,印報表,就是把 data輸出到文字檔,
有跑很慢的情況,但沒當過。為了IFRS, 新會計制度,
花了幾百萬讓廠商賺,這個月是轉換到新財務系統裏的第一次月結關帳,
一日往常,財務部約8點左右關完帳,經管接著做管理報表到凌晨。
課長約11點走。我8點走。
-----------------------
課長說,IFRS的菁華是換會科,把會科定義清楚,才知道原來會科編號,每家公司原來是大同小異,
像勞務費用,一堆費用就換了會科。
-----------------------
不少人這條路愈走愈窄。

課長說,
這個廠商財務顧問的規劃,在企業裏當TIPTOP的MIS,歷練幾年後,一直都用tiptop, 就去
原廠那裏尋求高薪,因為客戶散布世界各地,常去大陸負責上線。

這個人生規劃的樣式,己經不列入筆者的參考了,
不是TIPTOP的CODE太爛的問題,
而是ERP說穿了,還是人玩人,人搞人的問題。
沒有人不成江湖。
有了人的江湖,只能風波不斷。

又到了無薪假的季節(希望是一兩季內可解除),
未來是常態,
MIS的重要性像垃圾車一樣,不能沒有它,但存在感又很弱,從垃圾車旁經過,只想加速離開。
並不會感謝它對社會國家的貢獻。感謝那麼多碩/博士投入清潔隊的公職,讓這個重要的工作,
維持著很高的人力素質。
--------------------------
加油,繼續前進。飛掰掰

SunAllen iT邦研究生 1 級 ‧ 2012-09-30 16:02:30 檢舉

MIS&SI 就像 黑子的籃球一樣...唯有空氣,才能存在於無形讚

0
timloo
iT邦研究生 2 級 ‧ 2012-10-02 00:15:41

最近無薪假統計數字一直上升,

小弟的公司竟然還調薪,

我不知道那裏走了狗屎運。

一面珍惜,一面把黑子的籃球做好,

黑子的籃球無形還抽象,我暈了!

我要留言

立即登入留言