Выделение памяти для новой переменной во время работы Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте , подскажите пожалуйста как во время работы программы выделить новую переменную . Проблема в том что , я в цикле считываю строки из едита (графический интерфейс ) . Текст из едита записываю в переменную. Соответственно у меня есть массив указателей на строки.И когда я в цикле заношу , то выходит что заношу адрес одной и той же переменной. Подскажите пожалуйста как быть в таком случае .
  invoke  GetDlgItemText,[hwnddlg],ID_STR,message,40h
        push eax
        mov al,[strcnt]
        cmp al,cnt
        je eql
        mov [array+eax*4],message

Решение задачи: «Выделение памяти для новой переменной во время работы Assembler»

textual
Листинг программы
format PE Console 4.0
entry Start
 
include 'include\win32a.inc'
 
section '.data' data readable writeable
 
format_ db '%s',0
crlf db 0dh,0ah,0
 
section '.text' code readable executable
Start:
 
invoke GetProcessHeap
mov edi,eax
 
invoke HeapAlloc,edi,HEAP_ZERO_MEMORY,40h
mov esi,eax
 
xor ecx,ecx
xor ebx,ebx
 
@@:
push ecx
lea eax,[esi+ebx]
cinvoke scanf,format_,eax
add ebx,40h
 
lea eax,[ebx+40h]
invoke HeapReAlloc,edi,HEAP_ZERO_MEMORY,esi,eax
mov esi,eax
 
cinvoke _getch
pop ecx
inc ecx
cmp al,1bh
jnz @b
 
mov ebx,ecx
push esi
push 0a0dh
 
@@:
cinvoke printf,esi
cinvoke printf,esp
 
add esi,40h
 
dec ebx
jnz @b
add esp,4
pop esi
 
invoke HeapFree,edi,HEAP_NO_SERIALIZE,esi
 
ret
 
section '.idata' import data readable
  
  library kernel, 'KERNEL32.DLL',\
          msvcrt,'MSVCRT.DLL'
          
  import msvcrt,\
    printf,'printf',\
    _getch,'_getch',\ 
    scanf, 'scanf'
 
  import kernel,\
    GetProcessHeap, 'GetProcessHeap',\
    HeapAlloc, 'HeapAlloc',\
    HeapReAlloc, 'HeapReAlloc',\
    HeapFree, 'HeapFree',\
    CreateFile, 'CreateFileA',\
    ExitProcess, 'ExitProcess'

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы