iT邦幫忙

0

請問FAR PASCAL是什麼?


我剛剛看了一本書...有一段不太懂...

遠程呼叫...是說呼叫副程式之類的??
FAR是紀錄函數的位址用的??
PASCAL是什麼東東...??

8
賽門
iT邦超人 1 級 ‧ 2013-12-06 14:46:01
最佳解答

大約在1980年代,PASCAL程式語言成為外國很多學校用來教程式語言基礎的一種標準電腦語言。
1990年代有套程式設計工具Turbo PASCAL,很多MS-DOS下的應用程式都用這個工具來開發。
後來,Windows開始興起時,有一套稱為Delphi的開發工具,也是以PASCAL言言為基礎的Windows應用程式開發工具。

PASCAL言語之所以成為教程式語言的基本語言,有兩個原因:

  1. 結構化的程式語言,相較於C Language能夠以較高階的語法與接近人類思考的方式來寫程式。
  2. 提供與組合語言類似的低階控制能力,像是堆疊、指標等等應用。

咳~~講遠了....

MS-DOS的定址能力有些很奇怪,,它是以8位元、64K為一個Segment,然後再堆疊出16位元的遠程定址能力,這或是因為8088 CPU的非連續式定址方式造成的結果。8088雖然是16位元CPU,但實質上是以8位元運作。

回到樓主的問題。
這裏的FAR PASCAL中的PSACAL,就是指PASCAL語言中的堆疊應用方式。

而FAR是組合語言中的定址能力的用語,FAR代表遠程定址,所以FAR PASCAL意思就是遠程定址的堆疊。
用組合言語的觀念去思考會比較能獲得具體概念。
我印象中,NEAR是指在8位元定址範圍內,FAR是指8位元外16位元內。

微軟為何在C++中用FAR PARSCAL呢?這是早期為了與業界慣用語法相容,但FAR PARCAL在16位元開發環境中還有做用,但到了32位元就完全只是為了相容才存在,實際上沒有任何效果。
因為Compile過程中會自動轉成__stdcall來呼叫。

換句話說,這和作業系統的定址方式有關,也和CPU的定址方式有關。
古早時期,Intel CPU為了能夠降低CPU的價格,發展出內部16位元,外部8位元的CPU,再利用堆疊、定址來達到16位元記憶體的定址能力,也因此造成MS-DOS的畸型發展,以及個人電腦的應用方式限制。

後來,CPU的發展到80386完全32位元CPU時,就沒有這種定址、堆疊的限制,於是FAR、NEAR、PASCAL就不再有作用了。

以上,是我的印象中的整理,如果有講錯的地方,請邦友們指正囉~~~~謝謝

看更多先前的回應...收起先前的回應...

這是大叔才能講得歷史啊~~~讚

fillano iT邦超人 1 級 ‧ 2013-12-06 15:15:21 檢舉

話說,那一本書是計概嗎?

賽門 iT邦超人 1 級 ‧ 2013-12-06 15:25:05 檢舉

fillano提到:
那一本書是計概嗎?

有些在亂編的計概....偷笑

zzw3130 iT邦新手 5 級 ‧ 2013-12-06 15:26:40 檢舉

想學視窗程式...所以就去圖書館找了一本書來看...

fillano iT邦超人 1 級 ‧ 2013-12-06 15:41:57 檢舉

下次記得看一下出版日期,這本從findbook.tw查詢結果,是1991年出版?所以是for windows 3.0的?建議你至少找2001年之後的書。

賽門 iT邦超人 1 級 ‧ 2013-12-06 15:46:02 檢舉

fillano提到:
1991年出版

22年前出版的書,看起來還這麼新,Windows SDK真的是非常冷門的書籍...

fillano iT邦超人 1 級 ‧ 2013-12-06 16:03:28 檢舉

以前學windows程式設計,除了msdn library,大概就是Charles Petzold的Programming Windows系列,至於進階的主題大概就是Jeffrey Richter的幾本書...不過很久沒碰XD...最近一次寫windows的程式,是為了掛勾勾。

總裁 iT邦好手 1 級 ‧ 2013-12-06 17:38:48 檢舉

當年在學校的時候.......WINDOWS??....還沒出...Orz
後來上班第一次寫視窗程式,記的就是一個無窮迴圈,一直收EVENT還是MESSAGE,然後再判斷要做啥事...暈

cdfu提到:
後來上班第一次寫視窗程式,記的就是一個無窮迴圈,一直收EVENT還是MESSAGE,然後再判斷要做啥事.

總裁一上班就寫 ATM 的程式,
真‧強者
拍手

總裁 iT邦好手 1 級 ‧ 2013-12-06 18:17:18 檢舉

我一直以為我寫的是CIM的程式...Orz

賽門 iT邦超人 1 級 ‧ 2013-12-06 21:22:28 檢舉

cdfu提到:
一個無窮迴圈,一直收MONEY

偷笑

6
fillano
iT邦超人 1 級 ‧ 2013-12-06 12:08:21

遠程呼叫,參數傳遞順序使用pascal的設計。

遠程呼叫他有解釋了,pascal是一個程式語言。

fillano iT邦超人 1 級 ‧ 2013-12-06 12:19:15 檢舉

補充一下:

通常在C裡面呼叫函數的動作,在組合語言大概是:

  1. 把要傳遞的參數或是參數的指標,依照約定的方式(就是PASCAL等)放入暫存器或是堆疊
  2. 呼叫call或是jmp等到函數的位址,通常都是一個遠程的位址(segment:offset)
  3. 函數內會依照約定的方式從暫存器或堆疊取出參數或參數的指標來處理
  4. 執行完畢後,把結果或結果的指標依照約定的方式存入暫存器或是堆疊
  5. 返回後,再依照約定的方式取出結果繼續執行

維基百科是你的好朋友
http://en.wikipedia.org/wiki/X86\_calling\_conventions#pascal
Based on the Pascal programming language's calling convention, the parameters are pushed on the stack in left-to-right order (opposite of cdecl), and the callee is responsible for balancing the stack before return.

This calling convention was common in the following 16-bit APIs: OS/2 1.x, Microsoft Windows 3.x, and Borland Delphi version 1.x.

wiseguy iT邦超人 1 級 ‧ 2013-12-06 15:47:57 檢舉

這意義非常簡單,也就是打電話時『外埠頭要加 02』這個意思。開心

6
zuyan
iT邦好手 1 級 ‧ 2013-12-07 20:06:56

對於 16位元時代的 組合語言來說 超過 64K的 程式跳躍就叫遠程呼叫

應該是沒有記錯~~

4
daniel929
iT邦新手 4 級 ‧ 2013-12-09 09:05:59

現在想學視窗程式,如果是興趣的話,可以繼續看這本書。

但如果想用在工作上或實際的系統上,如WinXP,Win7,Win8的話,你應該改看

Visual Studio 系列的書

通常初學者建議學 Visual Basic , Visual C# , Java這三大語言

Visual Basic , Visual C# 為微軟的程式語言

JAVA則為 昇陽的程式語言

JAVA可誇多平台 , 意指 Windows , Linux 重新編譯後即可使用

Visual 系列語言則僅能在微軟平台上運作

zzw3130 iT邦新手 5 級 ‧ 2013-12-09 12:58:25 檢舉

我一直以為JAVA是寫WEB跟手機APP的囧

我要發表回答

立即登入回答