2011-06-20 44 views
1

我有一個Intel程序集x86(16位版本)彙編代碼,如下所示,它顯示消息正常。使用平面彙編程序在Win-7 32位上進行彙編。Intel x86彙編代碼行爲問題

ORG 100h 
USE16 

     mov ah, 09 
     mov dx, message 
     jmp Displayit ;unconditional jump 

     mov ah,01 
     int 21h 

     mov ah,4ch 
     int 21h 

Displayit: 
     int 21h 

message db 'Testing assembly jump instruction', 0Ah, '$' 
  1. 如果我移動郵件的字符串定義(在下面的代碼),一開始,它不打印字符串?是什麼原因?

  2. 此外,雖然我有指令mov ah, 01, int 21h保持輸出命令提示/控制檯關閉,但它不起作用。在我看到信息被打印之前,控制檯才關閉?

ORG 100h 
USE16 
message db 'Testing assembly jump instruction', 0Ah, '$' 

mov ah, 09 
mov dx, message 
jmp Displayit ;unconditional jump 

mov ah,01 
int 21h 
mov ah,4ch 
int 21h 

Displayit: 
    int 21h 
+0

在這兩種情況下,代碼執行的第一條指令是什麼?爲什麼? 'mov ah,01','int 21h'什麼時候執行? –

+0

我想這會是mov啊,09不是嗎? – goldenmean

+0

另外,即使我將Mov ah,01代碼放在Displayit:標籤中,控制檯也會關閉而不用等待它。只有當消息不是在開始處,而是在某處下降時,字符串纔會被打印。奇怪! – goldenmean

回答

6
  1. 如果你在一開始定義字符串,它將被作爲代碼執行。這會導致崩潰或各種未定義的行爲。

  2. mov ah,1開始的指令序列從不執行,你跳過它。

+0

即使我把mov ah,1代碼放在跳轉標籤DisplayIT:中,仍然沒有在那裏等待控制檯窗口關閉。 – goldenmean

+0

是的,你是對的。我的錯。現在它在控制檯上等待,當代碼mov ah,1在跳轉標籤中。 – goldenmean