汇编网首页登录博客注册
scuzg的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
友情链接

[2009-07-30 14:56] 汇编语言的常量、变量及其与寻址方式的关系

我感觉仅仅停留在文字上阐述和理解汇编语言的常量和变量是一件麻烦事,而通过分析常量、变量定义和引用语句的反汇编代码,会发现问题其实非常简单。
    假设常量、变量的定义及引用语句如下:
;数据段常量和变量定义语句
fctr        equ        1218h
x        db        1
y        db        2
;代码段常量和变量引用语句
        mov        ax,fctr
        mov        bl,x
        add        bl,y
对应的反汇编代码如是:
;数据段目标代码
1475:0000  01 02 
;代码段目标代码
1476:0005 B81812        MOV     AX,1218
1476:0008 8A1E0000      MOV     BL,[0000]
1476:000C 021E0100      ADD     BL,[0001]

源程序和目标代码作对比分析如下:
①从数据段目标代码可见,内容为 01 和 02 的单元是编译程序为变量 x 和 y 分配的字节单元,而常量定义语句:

fctr        equ        1218h

在目标代码中似乎完全不留痕迹,不过在代码段常量引用语句中,fctr 被 1218H 替换,所以:
     编译程序将常量定义语句中符号常量的定义值,以立即数方式替换源代码中所有引用位置的符号常量;常量定义伪指令不为符号常量在数据段分配存储空间。

②如上所述,变量定义语句:

x        db        1
y        db        2

为变量 x 和 y 各分配了一个字节并分别赋予 1 和 2 的初值,不过我们在目标代码的数据段中看不到变量定义语句中符号地址 x 和 y 的踪迹,而发现在代码段的两条变量引用语句的 x 和 y 被分别替换成了[0000]和[0001]。我们很容易判断,这正是变量 x 和 y 在数据段的偏移量,所以:
    编译程序为各变量分配存储单元,并将根据各变量排列顺序和占用的字节数自动确定的各变量的偏移量,以直接寻址方式替换引用位置的符号变量。
    经过上述分析,我们可以得出结论:常量和立即数寻址方式相对应,常量值跟随指令代码存储在代码段中,不能按变量方式对其进行改写;而变量被编译成直接寻址方式的偏移量,指向内容可改写的数据段的某单元——这就是汇编语言常量和变量的内在机理。
    除了立即数寻址方式和直接寻址方式分别对应汇编语言的常量和变量外,其他寻址方式和常量及变量又是什么关系呢?寄存器寻址方式和I/O 寻址方式分别是 CPU 内部和 I/O 接口的寻址方式,和内存无关,所以和常量、变量也没有关系;和存储器相关的寻址方式还有“寄存器间接寻址”及多种扩展形式,它们是以“准指针”方式访问变量的,对照 C 语言的变量和指针的关系很容易理解。
评论次数(5)  |  浏览次数(1113)  |  类型(汇编语言) |  收藏此文  | 

[  游客   发表于  2009-08-03 14:05  ]

楼主你发现没有,你的文章如果涉及具体的技术知识就很少有人回复,绝大多数都是在灌水。
这个网站也越来越没意思

[  scuzg   发表于  2009-08-03 15:17  ]

回复楼上游客:
先谢谢你的意见。
     我不知道是不是我谈及的问题没有表述清楚或问题本身没有什么价值?或者是不是因为现在是假期?另一个可能的原因是本网站的讨论基本上是围绕王爽老师的教材为主线的,所以可能对一些有点“旁门左道”的内容不是特别感兴趣。
     我到这里来有发表一点东西是希望有个地方能够整理我一些心得,当然正如我所说的,也期望我的一些看法在这个专门讨论汇编语言教学的网站得到印证或纠正,以便下学期在我那里上汇编语言课的同学能来看看我的意见和这个网站的其他内容,希望多一个帮助他们学习的渠道。
    我不认为学习汇编语言对学习计算机是必要的,但从汇编开始是一个比较好的选择,特别对计算机专业的同学来说更是如此。那么什么是起点呢?起点就是让我们有更好的初速度冲出去! 简而言之就是:在学得踏实的基础上,尽快离开汇编————IT新人的成长之路还很长。
     你是一位很有心的朋友,我再次谢谢你的关注,也希望有机会和你联络和探讨。

[  游客   发表于  2009-08-06 10:15  ]

支持博主,鄙视煞有介事的人!!!

[  游客   发表于  2009-08-06 14:23  ]

我认为,我们学习技术知识固然是一个重要,而我们同样要关注自己的思想和思维。
做事不能没技术,但更不能只有技术。
这里的学习方式与其他网站很不相同,如果还是定位于“问-答”的与csdn相同的模式,这个网站就没有意义了吧。

[  scuzg   发表于  2009-08-07 13:01  ]

我不知道楼上游客和一楼游客是不是一个人,感觉观点有点接近,当然这并不是最重要的。
     论坛是一个言论开放的平台,除需要遵守“发帖须知”上很少的限制条款外,任何人都可以在这里畅所欲言地表述自己的观点或和意见不同的朋友商榷。基于这一点,我个人认为网站有没有意思或意义,更取决于广大博主的积极参与,使论坛积累一些高质量的博文,为初学者入门提供更有效的帮助,有一批又一批的IT新人从这里起步。
     我认为这个以王爽老师个人的名气和教材的美誉度为基本影响力的讨论汇编语言的专业网站,具备实现上述想法的扎实基础;尽管论坛或汇编网管理者搞这个网站的目标没有我上面说得那么简单或具体,但不妨碍我按我的想法继续搞下去,这不正是这个网站的意义和意思么?
    我到这个网站的时间也不长,可能有些情况不如游客清楚,所以还是非常感谢你的意见和帮助。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码