易码技术论坛

 找回密码
 加入易码
搜索
查看: 336247|回复: 6

关于DB和DW的一些问题

[复制链接]
发表于 2006-2-25 19:52:00 | 显示全部楼层
楼上能详细说说么?
比如第一个问题,如果用DATA3 DB 0 和DATA3 DW 0,那么会是一样的效果么?
第二个问题是不是可以理解为BX为16bit的寄存器,所以INC BX就是增加16bit(2byte)?不过MOV [BX], AX是用BX的值作为偏移量,那么BX增量还是应该为2。那INC BX就是BX=BX+2?如果这样,那么想BX=BX+1又怎么办?
发表于 2006-2-25 19:19:00 | 显示全部楼层
楼主用的应该是32位的cpu吧,编译器会自动向32位(4*byte)对齐。
发表于 2006-3-2 12:16:00 | 显示全部楼层
楼主用的是什么平台?
我用电脑上的,
第一个编译出来很正常,DB分配的是一个字节;
第二个不行.BX+1不可以.

可能是你用的编译程序的问题.你可以参考一下编译程序的说明.
 楼主| 发表于 2006-3-2 13:15:00 | 显示全部楼层
那些代码都是书上的。还没编译过(其实因为自己不会……)
如果第一个可以,那么第一个的数据段偏移0003H干什么去了。
发表于 2006-3-2 22:42:00 | 显示全部楼层
哦我明白你的意思了.

你发现没有,照你的说法,第二个程序里的0000~0032到哪里去了?

嘿嘿

发现没?

它显示地址是按高位地址显示的.
发表于 2006-3-2 23:13:00 | 显示全部楼层
哦我明白你的意思了.

你发现没有,照你的说法,第二个程序里的0000H~0031H到哪里去了?

嘿嘿

发现没?

我觉得它显示地址是从高字节地址显示的.
也许这样显示的目的可能是为了按人们习惯的样子(高字节在前低字节在后)显示WORD类型的数值,你这里面恰好又是AAAA,高低字节相同,看不出来.

如果我没有说错的话,把程序一中的0AAAAH换成5678H,那么左侧显示的应该是:
0004 5678
,而不是:
0003 78 56

.或者,如果再把DATA3和DATA4换个声名顺序,那么应该是这样子的:
0000 10   DATA1  DB  10H    ;申请地址为 0000
0001 00   DATA2  DB  0      ;申请地址为 0001
0003 5678 DATA4  DW  5678H  ;申请地址为 0002(低位78H),0003(高位56H)
0004 0000 DATA3  DB  0      ;申请地址为 0004

明白了吗?
你再从书上找个别的例子看看是不是这么回事.如果不是,那就无奈了
 楼主| 发表于 2006-2-25 18:57:42 | 显示全部楼层 |阅读模式

为什么那句红色<WBR>的代码用伪指令的是DB,但是给DATA3分配了2Byte的空间<WBR>。

那句红色的代码是把BX加1,而建立的数组DATAS是<WBR>WORD型的。
也就是说,如果要使用BX寄存器间接寻址遍历DATAS<WBR>,每次BX应该增加WORD的长度,也就是2。
就是这里不明白那个INC BX的含义。
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-29 16:11 , Processed in 0.013225 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表