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

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

汇编伪指令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个,超出就会报错。

如图:

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

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


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

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

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

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

超出会报错:

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

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


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

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

如图:

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

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









相关文章:

  • 2021-06-13
  • 2021-12-12
  • 2021-05-16
  • 2022-12-23
  • 2021-12-02
  • 2022-12-23
  • 2021-09-22
猜你喜欢
  • 2022-12-23
  • 2021-11-27
  • 2021-09-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-12
相关资源
相似解决方案