Ввод с клавиатуры 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
Объяснение кода листинга программы
- Объединение (jmp) тостов (start) помещает точку входа в программу в начало исполняемого кода.
- (format PE console) — это директива, которая указывает компилятору FASM, какой формат исполняемого файла использовать.
- (include 'win32a.inc') — это директива, которая включает в себя содержимое файла 'win32a.inc'.
- (mess db ' Enter A: ', 0) — это строка, которая содержит сообщение, которое программа выводит на консоль.
- (rez db ' ----------------',13,10) — это строка, которая содержит сообщение, которое программа выводит на консоль.
- (rez db '%u',0) — это строка, которая содержит формат вывода числа.
- (A dd 0) — это переменная, которая используется для хранения введенного пользователем числа A.
- (B dd 0) — это переменная, которая используется для хранения введенного пользователем числа B.
- (type db '%u',0) — это строка, которая содержит формат ввода числа.
- (start:)- это метка, которая указывает на точку входа в программу.
- (invoke printf, mess)- это команда, которая вызывает функцию printf для вывода сообщения на консоль.
- (cinvoke scanf, type, A)- это команда, которая вызывает функцию scanf для ввода числа A.
- (inc byte[mess+7]) — это команда, которая увеличивает значение байта в памяти по адресу mess+7 на единицу.
- (invoke printf, mess)- это команда, которая вызывает функцию printf для вывода сообщения на консоль.
- (cinvoke scanf, type, B)- это команда, которая вызывает функцию scanf для ввода числа B.
- (mov eax,[A]) — это команда, которая перемещает значение переменной A в регистр eax.
- (add eax,[B]) — это команда, которая добавляет значение переменной B к значению в регистре eax.
- (cinvoke printf, rez, EAX)- это команда, которая вызывает функцию printf для вывода сообщения на консоль с использованием формата rez и значения в регистре eax.
- (jmp $)- это команда, которая прерывает выполнение программы и передает управление на произвольный адрес.
- (invoke exit, 0)- это команда, которая вызывает функцию exit для завершения программы.
- (data import)- это раздел, который определяет, какие функции и библиотеки должны быть доступны для программы.
- (library msvcrt,'MSVCRT.DLL') — это команда, которая включает библиотеку msvcrt.
- (import msvcrt,\ scanf,'scanf',\ printf,'printf',\ exit,'exit') — это команда, которая определяет функции, которые должны быть доступны для программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д