1. камеры
  2. Аудио & Электроника автомобиля
  3. Главная Аудио
  4. Личная Аудио
  5. телевизоры
  6. Умный дом
  >> Россия Электронный Технологии >  >> Телефоны >> для конференций

Программа на ассемблере для факториала заданного числа?

Вот пример программы на языке ассемблера (синтаксис NASM) для вычисления факториала заданного числа:

```

БИТЫ 16

; Определите сегмент данных

СЕГМЕНТ ДАННЫХ

номер:ДВ ?; Число, которое нужно найти факториал

; Определите сегмент кода

СЕГМЕНТ КОДА

начинать:

переместить топор, ДАННЫЕ; Загрузите в регистр DS адрес сегмента данных.

мов dx, число; Загрузите номер в DX

cmp dx, 0; Проверьте, равно ли число 0

я ноль; Если да, перейдите к метке «ноль».

мов сх, 1; Инициализируйте факториал (CX) значением 1.

; Запустите цикл расчета факториала

петля:

имул сх; Умножьте CX на текущее число в DX

вкл дх; Увеличить текущее число

cmp dx, число; Сравните DX с исходным номером

цикл JB; Если DX меньше числа, вернитесь в цикл.

; Отобразить факториал

ноль:

мов ах, 4Ch; AH =4Ch для прерывания DOS «Печать строки».

Леа ДХ, str_result; Загрузите адрес строки «результат» в DX.

интервал 21ч; Вызов прерывания DOS 21h для отображения строки

РЭТ; Вернуться в операционную систему

; Определите строку «результат»

str_result:DB "Факториал:$"

; Конец программы

КОНЕЦ начало

; Определить сегмент стека

СЕГМЕНТ СТЕКА

; Определите данные для стека

ДВ 0

СТЕГ ЗАКОНЧИВАЕТСЯ

```

Пояснение к программе:

1. Сегмент данных:

- `num:` определяет словесную (16-битную) переменную с именем `num` в сегменте данных. В этой переменной будет храниться число, для которого мы хотим найти факториал.

2. Сегмент кода:

- `start:` — это точка входа в программу.

3. Инициализация:

- `mov ax, DATA`:загружает адрес сегмента данных в регистр AX.

- `mov dx, num`:загружает значение `num` в регистр DX.

4. Проверьте ноль:

- `cmp dx, 0`:сравнивает значение в DX с 0.

- `je Zero`:если DX равен 0, перейти к метке `zero`.

5. Цикл расчета факториала:

- `цикл`:

- `imul cx`:умножает текущее значение в CX на текущее число в DX.

- `inc dx`:увеличивает значение в DX.

- `cmp dx, num`:сравнивает DX с исходным номером.

- `jb Loop`:если DX меньше числа, происходит возврат к метке `loop` для продолжения вычислений.

6. Отобразите факториал:

- `ноль:` (метка)

- `mov ah, 4Ch`:устанавливает для AH значение 4Ch, что является прерыванием DOS для печати строки.

- `lea dx, str_result`:загружает адрес строки «результат» в DX.

- `int 21h`:вызывает прерывание DOS 21h для отображения строки.

7. Возврат:

- `ret`:возврат в операционную систему.

8. Сегмент стека:

- Сегмент стека определяется размером в одно двойное слово (2 байта) и инициализируется значением 0.

Примечание. Эта программа использует операционную систему DOS для печати результатов, поэтому она будет работать только в среде DOS или эмуляторе, поддерживающем DOS.

  1. Как установить несколько точек на Мой домашний телефон
  2. Типы телефонных кабелей
  3. Почему вы используете электромагнитные волны в мобильных телефонах?
  4. Кто купил первый телефон?
  5. Как позвонить с мобильного телефона, используя учетную запись Vonage