ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

ds:[bx+i]、ds:[bx+i+si/di]与内存中数据的结构化访问

2022-06-21 13:34:31  阅读:178  来源: 互联网

标签:di st 访问 si bx ds 结构


 

 在汇编编程中,最简单的内存数据访问方式为:ds:[i/bx],其中i为立即数,该方式直接访问ds指向的数据段中第i个字节/字(具体取决于要访问的数据宽度——如mov byte/word ptr ds:[0], ax)。这种方式适用于很容易地知道所要访问的数据在段中的具体地址的情形,如数组。但如果要处理结构稍微复杂一些的数据,则这种方式就难以应对了。因此8086处理器还提供了ds:[bx+i]和ds:[bx+i+si/di]两种内存数据访问方式。

ds:[bx+i]适用的情况如:结构体或结构体数组(不限于此)。当访问结构体st中的元素c时,可用bx存放结构体st的起始地址,i存放c在结构体中的偏移地址,如st.c = 1汇编后变成:mov ds:[bx+2], 1。注意:在编译时,结构体中各元素的偏移地址编译器都是知道的,因此可以直接确定立即数i,而bx是动态的,因此可以用于存放结构体数组中某一结构体的地址。ds:[bx+i]也常写成ds:i[bx]或ds:[bx].i,不同的形式可以根据对不同情况的理解来选择。

struct myst 
{
    char a;
    char b;
    int c;
} st;

ds:[bx+i+si]适用的情况如:元素为数组的结构体(不限于此)。当访问结构体st中的元素c[k]时,可用bx存放结构体st的起始地址,i存放c在结构体中的偏移地址,而si存放数组元素的索引号,如st.c[k] = 1汇编后变成:mov ds:[bx+2+si], 1 其中si=k。ds:[bx+i+si]也可以写成ds:[i+bx+si]、ds:i[bx][si]、ds:[bx].200[si]或ds:[bx][si].200

struct myst 
{
    char a;
    char b;
    int c[10];
} st;

  

标签:di,st,访问,si,bx,ds,结构
来源: https://www.cnblogs.com/uestcliming666/p/16396537.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有