Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
curIy
0 / 0 / 0
Регистрация: 19.04.2010
Сообщений: 14
1

Подсчёт факториала числа

27.09.2010, 18:41. Просмотров 1635. Ответов 4
Метки нет (Все метки)

Здравствуйте. Первый день моего обучения ассемблера закончился тем, что была произведена попытка написать программу по подсчёту факториала. За основу был взят материал учебника В.И. Юров. Цель была научится. Не гуглил, ибо хотелось самому. В общем чего я прошу от вас. Объясните пожалуйста, что значат ошибки выдаваемые компилятором на мой код, и по возможности помогите исправить. Заранее благодарен.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
.model small
.stack 256h
.data 
n dw 3
.code
main proc
mov ax, @data
mov ds, ax  
 
xor ax,ax   
mov ax, 1
xor ecx, ecx
mov ecx, n 
 
m1:
imul ecx
loop m1
 
mov ah,2
mov dx,ax
add dx,'0'
int 21h
 
mov ax,4c00h
int 21h
main endp
end main
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2010, 18:41
Ответы с готовыми решениями:

Создать программу подсчета факториала числа от 1 до 20
Здравствуйте! Я только начал изучать ассемблер, и вот никак не могу сделать...

Написать программу для вычисления факториала числа (MASM)
Написать программу для вычисления факториала числа (MASM) и вывода результата...

У кого есть готовый код вычисления факториала числа на TASM?
Везде нахожу только для MASM, а нужен для TASM

Подсчёт числа элементов в массиве равных трём и вывод его на консоль
Подсчёт числа элементов в массиве равных трём и вывод его на консоль. помогите...

Вычисление факториала
Как исправить программу, что б факториал с 9 считал правильно? Фрагмент...

4
Tronix
157 / 104 / 6
Регистрация: 22.08.2010
Сообщений: 215
27.09.2010, 19:11 2
Учитель из меня фиговый, но смотри:
1) Ты используешь 32-битный регистр ecx. Ассемблер по умолчанию про 32-битные регистры ничего не знает. Он подразумевает, что вся программа пишется для 8086 процессора (самый древний 16-разрядный). Поэтому если уж ты используешь 32-разрядные регистры в программе, нужно указать в начале программы модель процессора не ниже 80386, а конкретнее поставить директиву .386
2) В этой программе совершенно не обязательно использовать ECX (32-разрядный регистр). Можно вполне обойтись только 16-битными регистрами. То-есть использовать CX.
3) Конструкция вида:
Assembler
1
2
xor ax,ax       
mov ax, 1
лишена всякого смысла. Командой xor ax,ax мы обнуляем регистр ax. xor ax,ax равносильно команде mov ax,0 .И следующей же командой мы в него записываем единицу. Зачем обнулять?
4) Ну и сама логика программы тоже хромает. Почитай повнимательнее про команду imul .
1
curIy
0 / 0 / 0
Регистрация: 19.04.2010
Сообщений: 14
27.09.2010, 19:23  [ТС] 3
я ещё не очень хорошо разбираюсь со всеми этими сегментами данных и боюсь напортачить, поэтому обнуляю как сообразил Ну раз лишнее, тогда уберу из кода.
Про логику программы ты прав. Просто я сейчас очень сильно концентрируюсь на синтаксисе и принципах нового для меня языка. Надеюсь довести это до автомата практикой
Спасибо большое всё заработало.

Добавлено через 4 минуты
По ходу возник ещё один вопрос.
Вычитал как выводить число на экран.
Assembler
1
2
3
4
mov ah,2
mov dx,ax
add dx,'0'
int 21h
Но почему не работает без строчки?
Assembler
1
add dx,'0'
0
Tronix
157 / 104 / 6
Регистрация: 22.08.2010
Сообщений: 215
27.09.2010, 19:30 4
Функция 2 прерывания 21h выводит на экран один символ (не число). Символом может быть и цифра (одна). Про вывод чисел смотри прикрепленную тему вверху раздела.
Так вот, mov ah,2 - мы будем вызывать функцию 2. Далее эта функция требует наличия в регистре DL кода символа. Потом происходит вызывание функции.
Assembler
1
2
3
mov ah,2
mov dl,'0'
int 21h
выведет на экран символ 0.
Assembler
1
2
3
mov ah,2
mov dl,'A'
int 21h
выведет на экран букву A
Assembler
1
2
3
mov ah,2
mov dl,1
int 21h
выведет на экран рожицу ☺
0
curIy
0 / 0 / 0
Регистрация: 19.04.2010
Сообщений: 14
27.09.2010, 19:47  [ТС] 5
Спасибо тебе большое!
И кстати, нормальный ты учитель
0
27.09.2010, 19:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2010, 19:47

Вычисление факториала
masm model small stack 256 .data pole db ? stroka db 0ah, 0dh, 'output:$',...

Вывод чисел в программе факториала
Есть программа, смотрел с вашего сайта: ;Вычисление двойного факториала. ;...

Замена и подсчёт в массиве
Доброго времени суток ! Нужна помощь, чтобы доделать программу. Задание....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru