Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глючит прога 
:(
    Опции темы
-=Fox=-
Дата 15.4.2003, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 5.2.2003

Репутация: нет
Всего: нет



Привет.

Вот код

Код

STSEG SEGMENT STACK
 db 100h dup (?)
STSEG ENDS

DATASG SEGMENT
 n dw ?
 i dw ?
 sCX dw ?
 welcome db 'Введите n: $'
DATASG ENDS

CODESG SEGMENT
 ASSUME CS: CODESG, SS: STSEG, DS: DATASG
 EXTRN READ:NEAR
 EXTRN WRITE:NEAR

START PROC FAR
 mov AX, DATASG
 mov DS, AX
 call MAIN
 mov AX, 4C00h
 int 21h
START ENDP

MAIN PROC
 lea DX, welcome   ; выводим приглашение
 mov ah, 9         ;
 int 21h           ;

 call READ
 mov CX, AX
 mov n,  AX

l_loop1:
 mov AX, n
 sub AX, CX
 mov i, AX

 mov sCX, CX  
 inc CX
l_loop2:
 mov AX, i
 mov BX, sCX
 inc BX
 sub BX,CX
 call Cmn          ; результат в AX
 call WRITE
 loop l_loop2

 mov CX, sCX
 loop l_loop1
 ret
MAIN ENDP

Cmn PROC
 cmp AX,BX
 jz  EXITP
 cmp BX, 0
 jz  EXITP
;вызываем себя

 dec AX
 push AX
 call Cmn

 pop DX
 push AX
 mov AX, DX
 dec BX
 call Cmn
 pop DX
 add AX, DX
 ret
EXITP:
 mov AX, 1
 ret
Cmn ENDP  

CODESG ENDS
END START


Прога должна выводить треугольник паскаля. Вывод конечно не оформлен, но вопрос не в выводе. при запуске она вылетает. Подскажите где ошибка в коде.

Спасибо
PM MAIL   Вверх
Baa
Дата 15.4.2003, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: нет
Всего: 12



А на каком она моменте вылетает? т.е. на какой команде... посмори её в отладчике... самому лениво се это прогонять...
А че эта за внешнии READ и WRITE?


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Chingachguk
Дата 15.4.2003, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



1. Что такое процедуры READ и WRITE ? Видимо, считать/записать число ?
2. В основном цикле ("l_loop1") критично значение счетчика цикла - CX. Не разрушают ли его команды подпрограммы WRITE ?
3. А вылетает прога скорее всего из-за процедуры Cmn. Смотри:

Допустим, выполнилось вот это:

Цитата

push AX
call Cmn


И был выполнен вызов самой Cmn. Те далее выполнятся вот эти команды:

Цитата

cmp AX,BX
jz  EXITP
cmp BX, 0
jz  EXITP
dec ax


Когда я гонял твой код, то я для отладки вводил стартовое n=3 и видел, как твоя прога попадала в бесконечную рекурсию со всеми вытекающими последствиями (ax=0, dec ax->ax=0FFFFh, dec ax-> ax=0FFFEh,dec ax->...) Проверь алгоритм рекурсивной подпрограммы.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
-=Fox=-
Дата 15.4.2003, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 5.2.2003

Репутация: нет
Всего: нет



Проблема решилась. Глюк первый был в процедуре Cmn. Глюк второй был с циклами. Я решил их переделать через cmp и команду переходов. Всё заработало. Из дому выложу код. Процедура Read читает число 1-2 байта, процедура Write выводит.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0411 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.