是否可以在汇编中声明一个未初始化大小的字符串?

时间:2017-05-06 00:16:52

标签: string assembly x86 irvine32

我目前正在声明我的字符串变量:

MainActivity

然后,我有了这段代码:

source       BYTE  20 DUP (0)

但是,当我尝试获取字符串的长度时,它总是返回20.有没有办法获取用户输入的长度?或者是否可以为字符串声明未初始化的大小?我搜索了我的教科书,到目前为止一无所获。

1 个答案:

答案 0 :(得分:2)

不,它没有按照你想的方式实施。如果你想拥有一个动态的"字符串你必须自己编程。 "字符串变量"你声明的实际上是一个从ReadString获取字节的缓冲区。想象一下它是一杯水。玻璃的大小没有变化,即你不能通过询问玻璃的大小来获得水的体积。

然而,Irvine的ReadStringEAX中返回用户输入的字符数量。当你使用这个数量时,不要忘记添加终止空值!

INCLUDE Irvine32.inc

.DATA
    buffer BYTE 20 DUP (?)
    msg1 BYTE "SIZEOF = ",0
    msg2 BYTE "Result of ReadString = ",0

.CODE

    main PROC

    lea edx, msg1
    call WriteString
    mov eax, SIZEOF buffer
    call WriteInt
    call CrLf

    mov edx, OFFSET buffer
    mov ecx, SIZEOF buffer - 1        ; "-1": save space for the terminating null
    call ReadString

    lea edx, msg2
    call WriteString
    call WriteInt
    call CrLf

    exit
    main ENDP

END main