malloc在程序集8086中

时间:2015-05-14 16:35:51

标签: assembly malloc fgets x86-16

我需要收到用户的输入,我需要先使用malloc来初始化缓冲区。我在网上找不到任何例子。

这是缓冲区:

 section .bss
        buffer:
                resb 80                     ;store my input

怎么做?这个可以吗? (它编译但我认为它不起作用......)

    push 80
    push buffer
    call malloc
    add esp, 8 

或者也许这个? (这不编译)

push 80
push buffer
call malloc
add esp, 8 
mov buffer, [eax]

问题是,当我给缓冲区输入0时,它打印2608 而不是48,因为ASCII值应该打印。

输入1 - >相应地给出2609。所以我的猜测是,不知何故,缓冲区具有它不应具有的值。

这是fgets的一部分(工作正常)

 push dword [stdin]             ;fgets need 3 param
    push dword 80                   ;max lenght
    push dword buffer               ;input buffer
    call fgets
    add esp, 12                     ;remove 3 push from stuck

这是打印部分:

push dword [buffer]             ;push string to stuck
push INT_FORMAT                     ; its INT_FORMAT:DB "%d", 10, 0
call printf             
add esp, 8              ;remove pushed argument

1 个答案:

答案 0 :(得分:3)

malloc有一个DWORD参数,它是要分配的字节大小,因此应该调用它:

push <size>
call malloc
add esp, 4
; now eax points to an allocated buffer of the requested size
mov [eax], ebx ; will set the first 4 bytes of the buffer to ebx (etc...)