【汇编语言/底层开发】7、更灵活的定位内存地址方法-阿里云开发者社区

开发者社区> 人工智能> 正文
登录阅读全文

【汇编语言/底层开发】7、更灵活的定位内存地址方法

简介: 1、[bx+idata] 通常情况下,我们使用ds和[bx]指定内存中的一个内存单元。而[bx+idata]所表示的是一种更加灵活的方式来定位内存地址,其表示的是段地址为DS,偏移地址为(bx)+idata的内存位置。

1、[bx+idata]

通常情况下,我们使用ds和[bx]指定内存中的一个内存单元。而[bx+idata]所表示的是一种更加灵活的方式来定位内存地址,其表示的是段地址为DS,偏移地址为(bx)+idata的内存位置。通常idata为一个常量,表示一个固定的地址偏移量。如下面几条指令实际上是等价的:

mov ax, [bx+200]
mov ax, 200[bx]
mov ax, [bx].200

其中值得注意的是200[bx]这种方法。通常在给定的数据段中,ds的值通常在程序开始时确定,中间不会改动,此时m[bx]这种方法可以实现对数组的处理。即提前确定好针对某个数组相对于ds的地址偏移,并替换m。这样通过改变bx的值就可以实现对数组元素的遍历。这种方法同高级语言的数组的实现思想类似,如C中表示数组的方法a[i],a也是表示首地址的常量,通过改变索引i的值对数组元素进行遍历。


2、si和di

这两个寄存器的功能同bx类似,只是不能拆成高低两个8位寄存器。这两个寄存器可以在bx被占用的时候作为辅助内存定址寄存器。引入了si和di后,可以使用更加灵活的内存定址方式:[bx+si],以及更加复杂的:[bx+si+idata]。

各种定位内存地址的方法比较:

(1):[idata]:使用一个常量表示地址,可直接定义一个内存单元;

(2):[bx]:使用一个变量表示地址,间接定义一个内存单元;

(3):[bx+idata]:使用一个常量+一个变量表示地址,可以在一个常量基础地址上用变量间接定义内存单元;

(4):[bx+si]:用两个变量表示地址;

(5):[bx+si+idata]:两个变量+一个常量表示地址。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章
最新文章
相关文章