iT邦幫忙

DAY 3
1

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

FreeDos下組合語言之熱身:debug之二,CS,DS

CS ->Code Segment,放程式碼的段,
DS->Data Segment,放資料的段。
Pascal歐陸軟件工程大師Niklaus Wirth寫下了一本書,1975年寫的,那時筆者3歲,
書名是Algorithms + Data Structures = Programs,當然有翻成中文,從此這句話在資訊科學界大大有名,忘了它是一本書,可能沒人讀它了,但它仍是經典不朽,在、即使現在Borland公司好像名存實亡,但是Turbo系列的開發語言工具,仍是軟體史上一頁不朽的傳奇,一般人往認為只有Unix有一長串說不完的典故,歷史,而PC就遜色不少,其實只是觀看的角度不同。或是太早獨霸一家,沒有群雄並起的春秋戰國爭霸。感覺歷史變成一家巨型軟體企業的行事曆,少了波瀾壯闊。
而很多軟體公司,在軟體不賣之後,沒有即時釋出原始碼,幾乎是徹底的消失了,殊為可惜,
像DOS下的中文系統,不管大陸或台灣,沒看到釋出原始碼,真的很可惜。

扯遠了,CS, DS,讓寫程式的筆者困惑,因為就算一般語言,有必要分出資料,程式碼嗎?
在一段Code裏,請問那裏到那裏放程式碼,那裏到那裏有資料,這很重要嗎?
何謂程式碼?何謂資料呢?
還是在youtube上,有一段影片名為How to make the classic "Hello world!" program in old school assembly.(老派組語寫經典的Hello world)

C:\>debug 
-a 100
08FA:0100 mov ah,02
08FA:0102 mov dl,48
08FA:0104 int 21
08FA:0106 mov dl,45
08FA:0108 int 21
08FA:010A mov dl,4c
08FA:010C int 21
08FA:010E mov dl,4c
08FA:0110 int 21
08FA:0112 mov dl,4f
08FA:0114 int 21
08FA:0116 int 20
08FA:0118
-h 118 100
0218  0018
-n prtt.com
-rcx
CX 0000  :0018
-w
Writing 0018 bytes
-q
C:\>prtt.com
HELLO

和上一篇文章http://ithelp.ithome.com.tw/question/10098967,同是印出字串。
上一篇是這樣寫**-e 102 'Hello World!',0D,0A,'$'** ,
這一篇是一個字元一個字元印出來,
可是給筆者的另一個體會是,
資料段DS和程式段CS原來是一體的兩面,
給定一個字串等同於一個字元一個字元搬(mov).

備註:這一段code, 我用mov ah,02而不用影片的mov ax,0200,
只是讓自己更容易看出,這是int21 , ah 02的服務,
請參考http://spike.scu.edu.au/~barry/interrupts.html#ah02
AH = 02h -WRITE CHARACTER TO STANDARD OUTPUT
把字元輸出到畫面。
同裏也可以看出筆者用mov dl,48而不用影片的mov dx,0048,
因為這個印字元的中斷服務裏定義,Entry: DL = character to write
筆者這樣寫,更直接。
所以的dx->分為dh, dl,高低位元, 這些就是大家看書都常看到,這裏順便來用一下。
而上一篇用到的mov ah, 09,其用途是WRITE STRING TO STANDARD OUTPUT把字串寫到畫面。

**小結:**SS(推疊段)會伴隨著SP(堆疊指標),可是CS,DS沒有自己專屬的指標,
大家不知道有沒有想過這個問題(有點無聊冏),呼應實際的程式也是各種型別的變數,處處可宣告,程式到處可以寫,程式只要循序的一步一步做完即可。所以有個暫存器IP記錄著,目前做到那一步。下一篇,分享,IP, SS, SP.


上一篇
FreeDos下組合語言之熱身:debug之一,它不只是除錯
下一篇
FreeDos下組合語言之熱身:debug之三,IP, SS, SP.
系列文
freedos bochs 16位元 組合語言…等17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
ted99tw
iT邦高手 1 級 ‧ 2012-09-26 22:52:30

沙發
感覺Tim大還滿自得其樂滴,難道這就是programmer的style?

timloo iT邦研究生 2 級 ‧ 2012-09-27 22:59:58 檢舉

timloo提到:
IP, SS, SP.

我只是從看你的教學片子中,發現一些樂趣,
受你影響之故,也看了不少別人的教學片子。其中有組合語言的,
拿來實驗看看。

下次再用你的片子,做感想發揮。
但是,可發揮的地方不多了,被你鉅細靡遺的寫完了。

----------------------------
自得其樂,沒法像顏回般的快樂,一簞食,一瓢飲,在陋巷,不改其樂天之志。
好屌,我純粹只是在WINDOWS/微軟的場子裏,故做標舊立異。

--------------------------
同事說,說不用微軟的產品,結果編譯器是MS的,FREEDOS是MS 相容的。
唉…,組合語言裏LINUX的教學不多,但編譯器多,光FREEDOS下,就有FASM,
NASM,YASM,WASM,JWASM。
就是入門教學不多。

我要留言

立即登入留言