Chinaunix首页 | 论坛 | 博客
  • 博客访问: 259748
  • 博文数量: 37
  • 博客积分: 1126
  • 博客等级: 少尉
  • 技术积分: 930
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-29 17:22
文章分类

全部博文(37)

文章存档

2014年(1)

2013年(11)

2012年(19)

2009年(6)

我的朋友

分类: Delphi

2009-06-29 17:26:56

已知下面两个定义:
count1   EQU   16H   ;count1是常量
count2   DW   16H    ;count2是变量
下面的两条指令:
MOV   AX,count1     ;立即数寻址,count1表示16H
MOV   AX,count2     ;直接寻址,     count2表示DS:offset   count2逻辑地址表示的物理内存中的值
MOV   count1,AX       ;错误!常量不可以被赋值
MOV   count2,AX       ;正确!变量可以被赋值
编译器在编译过程中会把源程序中的所有count1都用16H来代替。
如此看来,EQU仅仅在源代码中存在,它在代码中就是一个立即数,不占用额外的内存。代码经过编译以后也根本不会存在这一行,计算偏移量的时候(比如计算count2相对于段首的偏移量时),它就是那位传说中被忽略不计的大侠。
 
阅读(2337) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:任务状态段TSS

给主人留下些什么吧!~~