目前我正在学习汇编,我正在使用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