在所有的语言中,牵涉到常量,都是无法修改的。我们一起从汇编的角度看看其中的原因吧。
概括
常量是程序中使用的一个确定数值,在编译阶段就可以确定,直接编码于指令代码中,不是保存在存储器中可变的变量,而是编码在指令中的量,和指令一起存储了,所以也就没法动态改变它了,这也正是高级语言常量无法修改的原因。
结合demo的描述
assume cs:code,ds:data
data segment
AGES DB 21H,23H,33H,52H,65H ; 变量
data ends
code segment
boo = 11h ; 常量
start:
mov ax,data
mov ds,ax
mov bx,boo
mov dx,[0]
mov cx,[1]
mov ax,4c00h
int 21h
code ends
end start
变量储存位置:内存中data段。在调试代码的过程中,076A是data段的段基址。通过debug指令可以看到data段的二进制。图中的21,23,33,52,65对应我们定义的变量。
常量储存位置:内存中code段。通过debug指令可以查看code段的二进制。将其翻译为汇编指令后如下图所示。
源码中的mov bx,boo被编译为了MOV BX,0011。所以常量在编译时就能确定值,其值储存在code段中。