Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2008, 13:45   #1
Voortex
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 15
По умолчанию Ассемблер - вывод факториала

Здравствуйте!
Мне нужно было сделать на ассемблере программу, которая вычисляет факториал числа, нашел код, но скомпилировать в COM его не могу, хотя в .OBJ скомпилировал (Ошибок не выдал). Пользовался TASM 5.0
При выводе в COM пишет: "invalid option 't' ", иногда "Warning: debug info switch ignored for COM files Fatal: Cannot generate COM file : data below initial CS: IP defined"

Или может под Windows надо по другому делать ? или где ошибка ?

Вот сам код:

Цитата:
model tiny
.486
masm
.code
assume cs: @code, ds: @code, es: @code, ss: @code
org 100h

jmp @start

Num1 db 199 dup (0), 1
Num2 db 200 dup (0)
NFact dw 100
fName db 'Result.txt',0
hFile dw 0

;//========================= Addition
;// Input:
;// SI - First number
;// DI - Second number
;//
;// Output:
;// SI - Result

Addition proc near
pusha
mov cx, 199
add di, cx
add si, cx
@add_1:
mov al, [si]
add al, [di]
daa
add al, ah
daa
mov ah, al
shr ah, 4
and al,0Fh
mov [si], al
dec si
dec di
dec cx
jnz @add_1

popa
ret
Addition endp

@start:
push cs
pop ds
push ds
pop es
mov ah, 3Ch
xor cx, cx
lea dx, Fname
int 21h
mov hFile, ax

mov bx, 2
@fact:
lea si, Num1
lea di, Num2
cld
mov cx, 100
rep movsw
lea si, Num1
lea di, Num2
mov cx, bx
dec cx
@fact1:
call Addition
loop @fact1
inc bx
cmp bx, NFact
jle @fact

lea si, Num1
mov cx, 200
@toascii:
add byte ptr [si], '0'
inc si
loop @toascii

lea si, Num1
mov cx, 200
xor di, di
@k1:
cmp byte ptr [si], '0'
jnz @k2
inc di
inc si
loop @k1
@k2:
mov ah, 40
mov bx, hFile
mov cx, 200
sub cx, di
mov dx, si
int 21h

mov ax, 4C00h
int 21h
end
ЗАРАНЕЕ ОЧЕНЬ БЛАГОДАРЕН

Последний раз редактировалось Voortex; 04.12.2008 в 13:52.
Voortex вне форума Ответить с цитированием
Старый 04.12.2008, 14:09   #2
Voortex
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 15
По умолчанию

Кстати, для компиляции я создал bat файл где написал:
Цитата:
c:\tasm\bin\tasm32.exe /z /n /m2 /c Fact.asm, fact, fact
c:\tasm\bin\tlink32.exe /x /v /t Fact, Fact
Voortex вне форума Ответить с цитированием
Старый 04.12.2008, 15:40   #3
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

а что просто tasm и tlink не работают
c:\tasm\bin\tasm.exe fact.asm
c:\tasm\bin\tlink.exe fact.obj /t
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 04.12.2008, 16:28   #4
Voortex
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 15
По умолчанию

Там в BIN только tasm32 и tlink32
попробовал как у тебя написано, все равно пишет "invalid option 't' "
...Но дело скорее всего не в этих написаниях, а что-то в коде наверно параметр задан не так
Voortex вне форума Ответить с цитированием
Старый 06.12.2008, 09:52   #5
Voortex
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 15
По умолчанию

В принципе, я нашел ошибку, надо было в начале написать "Begin"
Все работает, но в этой программе факториал задан в коде, а мне надо, чтобы я мог его сам ввести и чтобы можо было вычислить факториал 1000.
Voortex вне форума Ответить с цитированием
Старый 06.12.2008, 16:24   #6
Vedrus
ИСККОНный хакер
Форумчанин
 
Аватар для Vedrus
 
Регистрация: 08.11.2007
Сообщений: 195
По умолчанию

1000! это не тривиальная задача и таким топоровым способом её не возьмёшь. Ради спортивного интереса попробуй оценить, сколько десятичных разрядов будет в таком числе. Для чего тебе это нужно? Не лучше ли воспользоваться уже готовыми математическими прогами, которые большие дяди написали? Или преподы мучают?
#define QUESTION bb || !bb
Vedrus вне форума Ответить с цитированием
Старый 07.12.2008, 08:11   #7
Voortex
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 15
По умолчанию

Ага, преподы, задание к курсовой выпало. При чем сдача через неделю Но 1000 можно, там и хоть 100000 можно, я просто не знаю....Ну хотя б помогите, чтобы ввод числа самому делать, а там препод думаю поможет с 1000...Это пока единственный код, который я в инете подобный моей задаче нашел
Voortex вне форума Ответить с цитированием
Старый 07.12.2008, 09:06   #8
Vedrus
ИСККОНный хакер
Форумчанин
 
Аватар для Vedrus
 
Регистрация: 08.11.2007
Сообщений: 195
По умолчанию

Ты сначала попробуй факториал 1000 сделать. Так на вскидку большой +- факториал 1000 будет из 250 000 десятичных разрядов состоять.
#define QUESTION bb || !bb
Vedrus вне форума Ответить с цитированием
Старый 07.12.2008, 12:29   #9
Voortex
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 15
По умолчанию

А мне как раз до 1000 и надо, сижу разбираюсь, но пока не могу, я в ассемблере вообще не разбираюсь, нам даже его не преподавали и при этом дали в нем курсовую
Voortex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ассемблер farxad Помощь студентам 6 11.09.2016 14:19
последняя ненулевая цифра факториала Пашка Помощь студентам 6 04.04.2008 23:39
подскажите на счет факториала Lindemm Помощь студентам 4 26.03.2008 21:47
Ассемблер InTest Фриланс 1 12.12.2007 02:05
Вычисление факториала числа PAVEL315 Общие вопросы Delphi 17 21.03.2007 07:32