Has*_*aza 3 arrays string assembly masm x86-16
我目前正在使用MASM在DOSBox上进行汇编编程(16位)。
我所知道的是:
这是您声明字符串的方式:
var db 'abcde'
Run Code Online (Sandbox Code Playgroud)
这是您声明数组的方式:
var db 'a','b','c'
Run Code Online (Sandbox Code Playgroud)
我不确定这些是否正确,并且我对这两者(数组和字符串)感到困惑
mov ah,9
int 21h
Run Code Online (Sandbox Code Playgroud)
上面的代码显示输出字符串而不输出数组吗?
每个字符串都可以看作是字节数组。
aString db "abcdef", 13, 10, "$"
byteArray db "a", "b", "c", "d", "e", "f", 13, 10, "$"
Run Code Online (Sandbox Code Playgroud)
您可以用相同的方式输出两者:
mov dx, offset aString
mov ah, 09h ; DOS.PrintString
int 21h
mov dx, offset byteArray
mov ah, 09h ; DOS.PrintString
int 21h
Run Code Online (Sandbox Code Playgroud)
之所以可行,是因为数组中的元素在内存中紧挨着,因此aString的存储和byteArray的存储没有真正的区别。
有助于区分的是,当人们谈论数组时,他们最感兴趣的是存储在数组元素中的数值,而不是谈论字符串时,他们并不关心字符的实际ASCII码组成字符串。
在aString db "abcdef", 13, 10, "$"我们看到的字符一个,b,...
在byteArray db "a", "b", "c", "d", "e", "f", 13, 10, "$"我们宁愿看到数字97,98,...(通常我们会还以数字开始书面吧!)
但是并不是每个数组都是一个字符串,因为您可以将数组包含单词大小的元素或dword大小的元素。
byteArray db 1, 2, 3 <== 3 bytes storage
wordArray dw 1, 2, 3 <== 6 bytes storage
dwordArray dd 1, 2, 3 <== 12 bytes storage
Run Code Online (Sandbox Code Playgroud)