JAY 发表于 2006-2-25 19:52:00

楼上能详细说说么?
比如第一个问题,如果用DATA3 DB 0 和DATA3 DW 0,那么会是一样的效果么?
第二个问题是不是可以理解为BX为16bit的寄存器,所以INC BX就是增加16bit(2byte)?不过MOV , AX是用BX的值作为偏移量,那么BX增量还是应该为2。那INC BX就是BX=BX+2?如果这样,那么想BX=BX+1又怎么办?

Eastsun 发表于 2006-2-25 19:19:00

楼主用的应该是32位的cpu吧,编译器会自动向32位(4*byte)对齐。

SAILOR-HB 发表于 2006-3-2 12:16:00

楼主用的是什么平台?
我用电脑上的,
第一个编译出来很正常,DB分配的是一个字节;
第二个不行.BX+1不可以.

可能是你用的编译程序的问题.你可以参考一下编译程序的说明.

JAY 发表于 2006-3-2 13:15:00

那些代码都是书上的。还没编译过(其实因为自己不会……)
如果第一个可以,那么第一个的数据段偏移0003H干什么去了。

SAILOR-HB 发表于 2006-3-2 22:42:00

哦我明白你的意思了.

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

嘿嘿

发现没?

它显示地址是按高位地址显示的.

SAILOR-HB 发表于 2006-3-2 23:13:00

哦我明白你的意思了.

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

嘿嘿

发现没?

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

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

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

明白了吗?
你再从书上找个别的例子看看是不是这么回事.如果不是,那就无奈了

JAY 发表于 2006-2-25 18:57:42

关于DB和DW的一些问题

attachment/2006-2/20062251856967031.gif
为什么那句红色<WBR>的代码用伪指令的是DB,但是给DATA3分配了2Byte的空间<WBR>。
attachment/2006-2/200622518563839765.gif
那句红色的代码是把BX加1,而建立的数组DATAS是<WBR>WORD型的。
也就是说,如果要使用BX寄存器间接寻址遍历DATAS<WBR>,每次BX应该增加WORD的长度,也就是2。
就是这里不明白那个INC BX的含义。
页: [1]
查看完整版本: 关于DB和DW的一些问题