Ввод с клавиатуры 8 значного числа - Assembler

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

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

Не подскажете, как осуществить ввод с клавиатуры 8 значного числа? 6 значные вводятся прекрасно и складываются... а вот после ввода 1 восьмизначного числа, 2ое автоматически заполняется первым и программа дальше не идет....

Решение задачи: «Ввод с клавиатуры 8 значного числа»

textual
Листинг программы
;FASM-code..
;-----------------
format   PE console
include 'win32a.inc'
jmp  start
 
mess    db  ' Enter A: ', 0
rez     db  ' ----------------',13,10
        db  '  A + B = %u',0
A       dd   0
B       dd   0
type    db  '%u',0
 
start:
       invoke    printf, mess
       cinvoke   scanf, type, A
 
       inc       byte[mess+7]
 
       invoke    printf, mess
       cinvoke   scanf, type, B
 
       mov       eax,[A]
       add       eax,[B]
 
       cinvoke   printf, rez, EAX
       jmp $
       invoke  exit, 0
;----------------------------------------------
; import section
data import
  library msvcrt,'MSVCRT.DLL'
 
  import msvcrt,\
      scanf,'scanf',\
      printf,'printf',\
      exit,'exit'
end data

Объяснение кода листинга программы

  1. Объединение (jmp) тостов (start) помещает точку входа в программу в начало исполняемого кода.
  2. (format PE console) — это директива, которая указывает компилятору FASM, какой формат исполняемого файла использовать.
  3. (include 'win32a.inc') — это директива, которая включает в себя содержимое файла 'win32a.inc'.
  4. (mess db ' Enter A: ', 0) — это строка, которая содержит сообщение, которое программа выводит на консоль.
  5. (rez db ' ----------------',13,10) — это строка, которая содержит сообщение, которое программа выводит на консоль.
  6. (rez db '%u',0) — это строка, которая содержит формат вывода числа.
  7. (A dd 0) — это переменная, которая используется для хранения введенного пользователем числа A.
  8. (B dd 0) — это переменная, которая используется для хранения введенного пользователем числа B.
  9. (type db '%u',0) — это строка, которая содержит формат ввода числа.
  10. (start:)- это метка, которая указывает на точку входа в программу.
  11. (invoke printf, mess)- это команда, которая вызывает функцию printf для вывода сообщения на консоль.
  12. (cinvoke scanf, type, A)- это команда, которая вызывает функцию scanf для ввода числа A.
  13. (inc byte[mess+7]) — это команда, которая увеличивает значение байта в памяти по адресу mess+7 на единицу.
  14. (invoke printf, mess)- это команда, которая вызывает функцию printf для вывода сообщения на консоль.
  15. (cinvoke scanf, type, B)- это команда, которая вызывает функцию scanf для ввода числа B.
  16. (mov eax,[A]) — это команда, которая перемещает значение переменной A в регистр eax.
  17. (add eax,[B]) — это команда, которая добавляет значение переменной B к значению в регистре eax.
  18. (cinvoke printf, rez, EAX)- это команда, которая вызывает функцию printf для вывода сообщения на консоль с использованием формата rez и значения в регистре eax.
  19. (jmp $)- это команда, которая прерывает выполнение программы и передает управление на произвольный адрес.
  20. (invoke exit, 0)- это команда, которая вызывает функцию exit для завершения программы.
  21. (data import)- это раздел, который определяет, какие функции и библиотеки должны быть доступны для программы.
  22. (library msvcrt,'MSVCRT.DLL') — это команда, которая включает библиотеку msvcrt.
  23. (import msvcrt,\ scanf,'scanf',\ printf,'printf',\ exit,'exit') — это команда, которая определяет функции, которые должны быть доступны для программы.

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


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

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

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