程序集变量的存放位置



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

seg1 segment
   org 100h
   jump start
   ; variables here (comment)
   start:
   mov ah, 4ch
   int 21h
seg1 ends

主要思想是使变量不可能作为代码执行。不要忘记,从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

相关内容

  • 没有找到相关文章

最新更新