作者ggg12345 (ggg)
看板Programming
標題Re: [問題]組語
時間Sun Sep 23 17:20:00 2007
※ 引述《twisters121 (...)》之銘言:
: 程式在編譯和連結上都沒有問題
: 但程式執行時 有時候可以印出
: 有時候確不可以
: 這是什麼問題???
: 程式碼如下
:
: .model small
: .stack 100h
: .data
: message db "hello world",0dh,0ah,"$"
: .code
: main proc
: mov ax,@data
: mov ds,ax
: mov dx,offset message
: mov ah,09h
: int 21h
: mov ax,4c00h
: int 21h
: main endp
: end main
:
: → james732:把code放上來吧 218.172.102.46 09/22 16:16
: ※ 編輯: twisters121 來自: 61.70.53.157 (09/22 16:31)
: 推 LPH66:看來沒啥問題啊@@ 140.112.250.80 09/22 18:42
: 推 ggg12345:先在dos prompt跑一次debug退出再跑hello 140.115.6.234 09/22 23:03
: 推 twisters121:樓上是正解..但不知為何會這樣 61.70.53.157 09/23 14:01
==============
這可能還要請其他高人來指正補充.
如果是用 turbo ASM 提供的 IDE 發展環境, 她會在 winXX 下 fork
出一個 v86 process 來執行要運行的指令(hello.exe) , 這個 v86
會完整模擬 DOS 使用環境, 那就可反覆正確執行.
但, 若用 DOS prompt 調出 command line 再下指令執行時, 可能是
MicroSoft 不再想支援 DOS Mode operation , 那個 dos prompt 出
現時就沒建好 int 21h 的 DOS 支援環境. 但用 debug 執行後, debug
通常會補上需要用到的 int vector 及 psp , 因此就會正常執行.
完整的 DOS 是 1MB 範圍的 8086 空間, 包含 DOS 開機時塞進 Himem
的 driver program 及 INT table . WinXX 啟動的 DOS Prompt 是虛
擬的 V86 , 需要透過 OS 與 VM86 mode 切換來銜接 1MB 區的絕對地
址, Win9X 之後, 這種支援就被取消了, 可能是要強迫使用者使用新版
的應用程式.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.6.234
→ xcycl:Program compatibility flags ? 134.208.32.66 09/23 22:54
推 twisters121:很棒的說明...感謝喔~~ 61.70.53.157 09/24 08:07
推 softcloud:先把DOS開成全螢幕 再執行看看 218.169.79.219 09/24 19:44
→ ggg12345:全螢幕會把display掛給DOSprompt,有效.但 140.115.6.234 09/25 00:01
→ ggg12345:怎麼切回去 window ? 140.115.6.234 09/25 00:03
推 twisters121:ctrl+Esc 61.70.53.157 09/27 16:14
推 ggg12345:記得是這兩鍵沒錯,不過我的w2k切不回去了 140.115.1.146 09/27 16:55
推 twisters121:我是用win xp..可以 61.70.53.157 09/30 17:07