Факториал числа
Автор: Алексей Абзалтинов • Июнь 29, 2021 • Практическая работа • 1,182 Слов (5 Страниц) • 423 Просмотры
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования
«Южно-Уральский государственный университет
(национальный исследовательский университет)»
Высшая школа электроники и компьютерных наук
Кафедра системного программирования
Задание 4: «Факториал числа»
По дисциплине: «Архитектура вычислительных систем»
бакалавра направления «Фундаментальная информатика и информационные технологии»
Выполнил: _________________
студент группы КЭ-102
А.Е. Абзалтинов
Проверил:
Преподаватель кафедры СП ВШ ЭКН
А.В. Сейфер
Дата:__________ Оценка:________
Челябинск - 2021
Задача
Написать на языке ассемблера программу, реализующую вычисление факториала числа (арифметическая прогрессия).
- Использовать ассемблер NASM
- Использовать компоновщик link (из комплекта MS Visual Studio Express под Windows).
- Все манипуляции при сборке программ выполняются в командной строке (в Windows — cmd.exe)
- Число, факториал которого необходимо вычислить, вводится с клавиатуры, результат выводится на экран.
; подключение внешних функций, реализованных на языке программирования Си, обеспечивающих
; ввод информации с клавиатуры и вывод результата на экран, а также функцию завершения
; работы программы
extern printf
extern scanf
extern exit
; точка входа в программу
global mystart
section .text
mystart:
push dword msg0 ; вывод на экран сообщения о необходимости ввести число
call printf
add esp, 4
; ввод числа с клавиатуры
push dword a ; помещение параметров для вызова функции в стек
push dword msg1
call scanf ; вызов внешней функции с параметрами из стека
add esp, 12 ; очистка стека
; максимальное число для вычисления факториала = 20. Далее возникает переполнение
; регистров и необходимо реализовывать дополнительные методы хранения и переноса
; результатов вычислений
mov eax, [a]
cmp eax, 20
jg crop
start:
; установка начальных значений регистров
mov eax, 1
mov ebx, 0
mov ecx, 1
mov edx, 0
; вычисление факториала от 0 до 12 включительно. Переполнения регистра нет.
; Результат помещается в eax. Флаг переполнения равен 0 (OF = 0)
; Если возникает переполнение (вычисление факториала от 13 до 20 включительно), то
; флаг переполнения устанавливается в 1 (OF = 1) и происходит переход к усложненному
; алгоритму
calclow:
mul ecx
...