汇编变量放在哪里?

时间:2015-10-02 04:46:56

标签: variables assembly x86

目前我正在学习汇编,我正在使用a86宏汇编程序,Oracle VM VirtualBox。 我想知道为什么我们以这种方式声明或放置变量(在跳转命令之后)?如果我在跳转命令之前声明或放置变量,程序将变为错误。 这种结构背后有什么解释吗? 谢谢。

seg1 segment
   org 100h
   jump start
   ; variables here (comment)
   start:

   mov ah, 4ch
   int 21h
seg1 ends

1 个答案:

答案 0 :(得分:1)

主要思想是不能将变量作为代码执行。不要忘记,从CPU的角度来看,数据和程序是相同的。如果您跳转到变量区域或者如果IP通过执行指令来到它,CPU将尝试执行它们,但只要变量可能不包含有意义的指令,就会发生一些CPU异常并且程序将崩溃或挂起。

虽然跳过变量并不是做这些事情的最好方法。你可以用同样的成功将所有变量放在程序的最后,它们也永远不会被执行。这样做的好处是可以减少一条指令,使代码更具可读性,避免不必要的跳转:

seg1 segment
   org 100h

; code here
   mov ah, 4ch
   int 21h      ; this will never return, but end the program.

; variables here will never be executed.

seg1 ends