assembly 如何知道数组的长度?

63lcw9qa  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(83)

下面是一个程序,它假定有一个字符数组,从相对于数据段的地址零开始,其成员为(从左到右):

ABCDEVGTYO

字符串
该程序检查数组的元素是否彼此不同。如果是,则在DL寄存器中设置值0,否则,在DL寄存器中设置值1。


的数据
你能帮我解决这个问题吗?
我试着解决它,但我不知道第二个选项(2)上写什么。

yqyhoc1h

yqyhoc1h1#

简短回答:你不能这样。
低级别的计算机并不真正理解什么是数组,因为它们不知道一段数据在哪里结束。考虑到你的例子:

myArray db "ABCDEVGTYO"

字符串
有很多种方法可以写这个,所有这些都是等价的(尽管读起来要难得多)。这里有几个相同数据以不同方式写入的示例。

myArray dw 4241h,4443h,5645h,5447h,594Fh
myArray db 41h,42h,43h,44h,45h,56h,47h,54h,4Fh,59h

的数据
无论你使用哪一个,程序都会运行得完全一样,因为CPU无法区分。
但是考虑到你是如何开始写字符串的,确定它的长度是微不足道的。我相信MASM允许您使用以下语法:

myArray db "ABCDEVGTYO"
myArrayEnd label byte

...

mov ax, MyArrayEnd-MyArray ;gives you the length as a constant

相关问题