2011-06-20 40 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