Ввод с клавиатуры 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') — это команда, которая определяет функции, которые должны быть доступны для программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д