汇编伪指令db,dw,dd与他们的字符串

伪指令db,dw,dd不在乎CPU是谁,只在乎谁是他们的编译器。

伪指令db、dw、dd都可以定义字符串,但最多的是用db来定义字符串,第一个原因是dw、dd定义的字符串到了内存中排序是相反的。如图:



dw我定义了两个字符串'12'和'56',到了内存中为'21'和'65'。

dd我定义了两个字符串'abcd'和'ef',到了内存中为'bcda'和'fe'。

这是什么原因造成的呢??这是因为dw与dd定义的字符串长度超出了1个字节,因此在字符串中的每个元素间就会有一个线性的高低位排序。在字符串'abcd'中,元素按从高位向低位线性排序。在内存中,数据由低位向高位线性排序,因此字符串'abcd'在内存中的顺序是从低位向高位排序的,所以相反。

第二个原因是不同版本编译器对dw与dd定义字符串的指令格式支持不一样。

masm6支持dw定义的字符串元素最多有2个,dd定义的字符串元素最多有4个,超出就会报错。

如图:




masm5支持dw与dd定义的字符串元素最多有2个,但是在内存中dd还是会占4个字节,dw占2个字节。


超出会报错:




综上所述,定义字符串用db是最好的解决方法,首先masm5与masm6对待db定义字符串的指令格式态度都一样,不会有不兼容的情况发生。其次db定义的长度是一个字节,因此不会有高低位的产生,所以db定义的字符串的元素顺序是怎样的在内存中还是怎样的,不是有反序的情况。

masm5与mam6对其他指令也有不兼容的情况,所以写汇编代码还要考虑使用的编译器是否支持指令的格式与写法

如图:










评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值