. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->更灵活的定位内存地址的方法
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  定位内存地址为什么不能这样用呢  [已解决] 回复[ 5次 ]   点击[ 336次 ]  
regex
[帖 主]   [ 发表时间:2010-01-12 15:39 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
看完了第七章,知道了几种寻址方式, 如[bx+idata] , [bx+si]等, 有一个问题, 为什么没有类似这样的寻址方式呢:
[bx-idata],或[bx-si]
我的理解是这样的, 内存地址是由16位段地址+偏移地址组成的20位物理地址。 所以,[bx-idata]是非法的。不知道我的理解对不对。
abob
[第1楼]   [ 回复时间:2010-01-12 17:49 ]   [引用]   [回复]   [ top ] 
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
[bx-idata]
-----------
这个是可以的,idata可以是正数,也可以是负数。[bx-idata]和[bx+idata]表达没什么区别。

[bx-si] 
--------
这个编译器会报错,这个我是理解成编译器的限制了。[bx-si]从功能上说可以由其他指令代替,在先用sub bx,si得到他们的差,再访问[bx],然后在把bx变回原来的值,所以在使用上到不会造成什么大的不便。
regex
[第2楼]   [ 回复时间:2010-01-12 17:57 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
哦~~, 原来如此。 我还以为[]内只能做加法呢~~⊙﹏⊙~~, 多谢LS解惑
abob
[第3楼]   [ 回复时间:2010-01-12 18:28 ]   [引用]   [回复]   [ top ] 
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
可以这样,先提出自己的想法,比如楼主第一个帖子。

然后通过实践验证,比如把[bx-idata],或[bx-si] 放到.asm文件中编译看看。

然后结合实验再次验证自己的想法。

不要凭空的去想象,实验是学习计算机的一个窍门 ^_^
regex
[第4楼]   [ 回复时间:2010-01-12 23:08 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
呵呵~~~~, 前两章练习的时候尝试过例如[10-bx]的用法, 可惜没有成功。
多谢abob兄指点。 
PS: 现在睡觉一闭眼就是debug出现的场景。。。。。。
regex
[第5楼]   [ 回复时间:2010-01-16 13:31 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
此贴由 贴主 于 [ 2010-01-16 13:31 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved