Заполнить массив masm32 - Assembler

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

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

Помогите найти ошибку, пожалуйста? После ввода первого числа программа аварийно завершается.
 .386
      .model flat, stdcall
      option casemap :none   ; case sensitive
 
 ; ######################################################
 
      include \masm32\include\windows.inc
      include \masm32\include\kernel32.inc
      includelib \masm32\lib\kernel32.lib
 
 ; ######################################################
 
    .data
 
      ConsoleTitle db 'Input & Output',0
      mas          dd 10 dup(?)

 ; ######################################################
 
    .code
 
 ; ######################################################
 
 Main proc
   LOCAL InputBuffer[128] :BYTE  ;буффер для ввода
   LOCAL InputBuffer2[128] :BYTE  ;буффер для ввода  
   LOCAL hOutPut          :DWORD ;хэндл для вывода
   LOCAL hInput           :DWORD ;хэндл для ввода
   LOCAL lpszBuffer       :DWORD ;адрес буфера
   LOCAL nRead            :DWORD ;прочитано байт
   LOCAL nWriten          :DWORD ;напечатано байт
   LOCAL Number           :BYTE
   LOCAL New_Out[128]     :BYTE
 
   ;устанавливаем титл окна
   invoke SetConsoleTitle, addr ConsoleTitle
 
   ;получаем хэндл для вывода
   invoke GetStdHandle, STD_OUTPUT_HANDLE
   mov hOutPut, eax
 
   ;получаем хэндл для ввода
   invoke GetStdHandle,STD_INPUT_HANDLE
   mov hInput, eax
 
   mov ecx, 4
   lea esi, mas
   mass:
         invoke ReadConsole, hInput, addr InputBuffer, 2, ADDR nRead, NULL
         mov al, InputBuffer[0] ;Берем первый символ
         sub al, 30h; преобразуем в число
         mov bl, 10; нужный множитель
         mul bl ; умножили на 10
         mov bl, al 
         mov al, InputBuffer[1];Берем второй символ
         sub al, 30h ; преобразуем в число
         add bl, al ; получаем 1 число
     mov edx, 0
     mov dl, bl
     mov mas[esi], edx
     add esi, 4
     loop mass
 
   invoke Sleep, 15000d
 
   ;выход
   invoke ExitProcess,0
 Main endp

 ; ######################################################
 
    end Main

Решение задачи: «Заполнить массив masm32»

textual
Листинг программы
push ecx   ; вместо mov buf, ecx
pop  ecx   ; вместо mov ecx, buf

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


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

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

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