【问题标题】:Difference between String and Array in assembly language汇编语言中String和Array的区别
【发布时间】:2019-10-06 06:29:44
【问题描述】:

我目前正在使用 MASM 在 DOSBox 上进行汇编编程(16 位)。

我知道的是:

这是你声明字符串的方式:

var db 'abcde'

这是声明数组的方式:

var db 'a','b','c'

我不确定这些是否正确,我很困惑 这两个,数组和字符串

mov ah,9
int 21h

上面的代码是否显示输出字符串而不是输出数组?

【问题讨论】:

    标签: arrays string assembly masm x86-16


    【解决方案1】:

    每一个字符串都可以看作是一个字节数组

    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, "$" 中,我们看到字符ab、...
    byteArray db "a", "b", "c", "d", "e", "f", 13, 10, "$" 中,我们宁愿看到数字9798、...(通常我们也会以数字开头!)


    但并非每个 数组 都是字符串,因为您可以拥有包含单词大小元素或双字大小元素的数组。

    byteArray  db 1, 2, 3     <== 3 bytes storage
    wordArray  dw 1, 2, 3     <== 6 bytes storage
    dwordArray dd 1, 2, 3     <== 12 bytes storage
    

    【讨论】:

    【解决方案2】:

    实际上没有区别;它们都将相同字节的数据组装到输出文件中。 (或者如果您在“数组”版本中包含'd''e',他们会这样做。)

    我认为 MASM 的 SIZEOF 运算符将包含整行声明。

    字符串是数组的一种特殊情况,基本上只是为一个db 指令赋予多个字符的便捷语法。


    请注意,有时“字符串”一词意味着隐含长度的字符串,以 0'$' 字节作为终止符。所以你可以传递 just 一个指向开头的指针,而不是指针 + 长度的显式长度字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2011-10-03
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多