程序集 8086 中的 malloc
malloc in assembly 8086
我需要接收来自用户的输入,我需要先使用 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
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...)
我需要接收来自用户的输入,我需要先使用 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
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...)