汇编语言中String和Array的区别
Difference between String and Array in assembly language
我目前正在使用 MASM 在 DOSBox 上进行汇编编程(16 位)。
我知道的是:
这是声明字符串的方式:
var db 'abcde'
这是声明数组的方式:
var db 'a','b','c'
I don't know for sure if these are correct, and I'm confused between
these two, array and string
mov ah,9
int 21h
Does above code show output string and not output array?
每个字符串都可以看作是一个字节数组。
aString db "abcdef", 13, 10, "$"
byteArray db "a", "b", "c", "d", "e", "f", 13, 10, "$"
你可以用同样的方式输出:
mov dx, offset aString
mov ah, 09h ; DOS.PrintString
int 21h
mov dx, offset byteArray
mov ah, 09h ; DOS.PrintString
int 21h
这是可行的,因为数组中的元素在内存中彼此相邻,因此 aString 的存储和 byteArray 的存储没有真正的区别.
有助于区分的是,当人们谈论数组时,他们最感兴趣的是存储在数组元素中的数值,而当他们谈论字符串时,他们并不关心实际的 ASCII组成字符串的字符的代码。
在aString db "abcdef", 13, 10, "$"
中我们看到字符a, b, ...
在 byteArray db "a", "b", "c", "d", "e", "f", 13, 10, "$"
中,我们宁愿看到数字 97, 98, ...(通常我们也会用数字开头有!)
但并非每个 array 都是字符串,因为您可以拥有包含 word-sized 个元素或 dword-sized 个元素的数组。
byteArray db 1, 2, 3 <== 3 bytes storage
wordArray dw 1, 2, 3 <== 6 bytes storage
dwordArray dd 1, 2, 3 <== 12 bytes storage
从字面上看没有区别;他们都 assemble 将相同字节的数据放入输出文件。 (或者如果您在 "array" 版本中包含 'd'
和 'e'
,他们会这样做。)
我认为 MASM 的 SIZEOF
运算符将以任何一种方式包含整行声明。
字符串是数组的一种特殊情况,基本上只是一种方便的语法,用于为一个 db
指令提供多个字符。
请注意,有时单词 "string" 表示 implicit-length 字符串,以 0
或 '$'
字节作为终止符。所以你可以传递只是一个指向开始的指针,而不是explicit-length字符串的指针+长度。
我目前正在使用 MASM 在 DOSBox 上进行汇编编程(16 位)。
我知道的是:
这是声明字符串的方式:
var db 'abcde'
这是声明数组的方式:
var db 'a','b','c'
I don't know for sure if these are correct, and I'm confused between these two, array and string
mov ah,9
int 21h
Does above code show output string and not output array?
每个字符串都可以看作是一个字节数组。
aString db "abcdef", 13, 10, "$"
byteArray db "a", "b", "c", "d", "e", "f", 13, 10, "$"
你可以用同样的方式输出:
mov dx, offset aString
mov ah, 09h ; DOS.PrintString
int 21h
mov dx, offset byteArray
mov ah, 09h ; DOS.PrintString
int 21h
这是可行的,因为数组中的元素在内存中彼此相邻,因此 aString 的存储和 byteArray 的存储没有真正的区别.
有助于区分的是,当人们谈论数组时,他们最感兴趣的是存储在数组元素中的数值,而当他们谈论字符串时,他们并不关心实际的 ASCII组成字符串的字符的代码。
在aString db "abcdef", 13, 10, "$"
中我们看到字符a, b, ...
在 byteArray db "a", "b", "c", "d", "e", "f", 13, 10, "$"
中,我们宁愿看到数字 97, 98, ...(通常我们也会用数字开头有!)
但并非每个 array 都是字符串,因为您可以拥有包含 word-sized 个元素或 dword-sized 个元素的数组。
byteArray db 1, 2, 3 <== 3 bytes storage
wordArray dw 1, 2, 3 <== 6 bytes storage
dwordArray dd 1, 2, 3 <== 12 bytes storage
从字面上看没有区别;他们都 assemble 将相同字节的数据放入输出文件。 (或者如果您在 "array" 版本中包含 'd'
和 'e'
,他们会这样做。)
我认为 MASM 的 SIZEOF
运算符将以任何一种方式包含整行声明。
字符串是数组的一种特殊情况,基本上只是一种方便的语法,用于为一个 db
指令提供多个字符。
请注意,有时单词 "string" 表示 implicit-length 字符串,以 0
或 '$'
字节作为终止符。所以你可以传递只是一个指向开始的指针,而不是explicit-length字符串的指针+长度。