1樓:
你說的大概是這麼一種程式框架:
main proc far
push ds
xor ax, ax
push ax
......
retmain endp
end main
這是一種最原始的dos下exe程式的框架。
那時候,dos的版本很低,dos還沒有提供4ch號dos功能呼叫,結束程式只能用int 20h完成。
而 int 20h結束程式要求執行時cs指向程式段字首(psp)所在的段地址。
所以,程式需要將主程式定義成遠呼叫過程(proc far),這樣就會將 ret指令彙編成遠呼叫返回(retf)。而**開始的三條指令是將psp段地址入棧,再將0入棧。這樣,執行ret的時候就會執行到psp段偏移地址為0處的一條int 20h指令,保證正確返回dos。
後來稍高一點版本的dos有了4ch號功能呼叫,就不需要這種程式框架了。
教科書上很多程式是抄來的,所以人們還常常會看到這種早就過時被淘汰了的**。
2樓:匿名使用者
是指函式的範圍吧,就像跳轉指令有jmp和ljmp他們的跳轉範圍不一樣
如果proc far的話,印象裡函式的位置在2k外什麼的
3樓:匿名使用者
proc是子程式定義偽指令, far是該子程式的屬性,決定呼叫程式和子程式是否在同一**段如下:為子程式定義及說明 子程式名 proc near ( 或 far ) …… ret子程式名 endp 子程式名為符合語法的識別符號near屬性(段內近呼叫): 呼叫程式和子程式在同一**段中,只能被相同**段的其他程式呼叫;far屬性(段間遠呼叫):
呼叫程式和子程式不在同一**段中,可以被相同或不同**段的程式呼叫.
4樓:nix張
使用proc far定義的函式可被**段外的函式呼叫
相當於c中的extern吧
組合語言中csdsss的區別,組合語言中 cs ds ss的區別是什麼?
cs ds ss 分別是 段暫存器 資料段暫存器 棧段暫存器。簡單的8086彙編程式可以直接使用系統棧 或者預設的棧 所以 可以不用 ss 暫存器。即簡單的程式通常包括一個 段和一個資料段。資料通常放在資料段中,一般只需在程式的開始對資料段暫存器ds賦值 mov ax,seg data mov ds...
組合語言中符號的意思是什麼,在組合語言裡 符號代表什麼意思?
看圖你就會明白。實際上標號x1的首地址為ascii碼c的字單元地址,x2的首地址開始於 db 16 dup 語句,緊接著x1的終止地址,那麼它的首地址相對於x1偏移4 1個位元組單元 x2的終止地址相對於其首地址偏移16 1個位元組單元,相對於x1偏移18個位元組單元。那麼 x1實際上是當前地址與x...
組合語言中ah和AH代表什麼,請問組合語言中001AH加0026H是多少怎麼算的A和H分別代表什麼呀還有CH什麼意思
ah和ah是一個意思,只是大小寫區分 意思是ax 16位 暫存器的高八位,低八位是al暫存器 al邏輯運算 這部分指令用於執行算術和邏輯運算,包括加法指令add adc 減法指令sub sbb 加一指令inc 減一指令dec 比較操作指令cmp 乘法指令mul imul 除法指令div idiv 符...