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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2010, 19:14   #1
Fresh_MaN
 
Регистрация: 10.04.2010
Сообщений: 4
По умолчанию Не могу найти ошибку в коде!!! Прога элементарная!Помощ нужна!

Два массива вводим, в каждом находим наименьший элемент и возводим в степень кол-ва элементов в массиве (M и K - кол-во элементов в массиве), затем складываем.

Проблема в том, что по отдельности для каждого массива все работает, но как только я их собираю в одну программу, все слетает - для второго массива считается полный бред.
Ошибка должна быть очевидной, ИМХО, просто у меня взгляд "замылился"
Помогите, плз!




JMP start ;
MB: .DS 9 ;под массив MB 9 байт
MC: .DS 9 ;под массив MC 9 байт
M: .DS 1 ;
K: .DS 1 ;
Y: .DS 1 ;
BMIN: .DS 1 ;
CMIN: .DS 1 ;
TABL: .DS 1 ;таблица адресов параметров
TABL1: .DS 1 ;
TABL2: .DS 1 ;
START: IN 1 ;ввод M
STOR a,M ;сохр М
MVI b,0 ;нач индекс MB
INPB: PUSH a ;счетчик цикла в стек
IN 3 ;ввод элемента
STOR a,MB(B) ;сохр эл-та массива
ADI b,1 ;вычисл след эл-та массива
pop a ;счетчик из стека
LOOP a,INPB ;цикл по адресу INPB
IN 2 ;ввод K
STOR a,K ;сохр k
MVI b,0 ;нач индекс MC
INPC: PUSH a ;счетчик цикла в стек
IN 3 ;ввод элемента
STOR a,MC(B) ;сохр эл-та массива
ADI b,1 ;вычисл след эл-та массива
pop a ;счетчик из стека
LOOP a,INPC ;цикл по адресу INPB
MVI b,0 ;загруз в rB 0
LOAD a, MB(B) ;
STOR a, BMIN ;BMIN=MB[0]
LOAD a, MC(B) ;
STOR a, CMIN ;CMIN=MC[0]
;
;Формирование таблицы адресов параметров
;
;в TABL будут храниться адреса очередных эл-тов массива
;в TABL1 будет храниться мин число (в степени)
;в TABL2 будет храниться показатель степени
;
MVI a, BMIN ;адрес BMIN в rA
STOR a, TABL1 ;в TABL1 адрес BMIN
MVI a, M ;адрес M в rA
STOR a, TABL2 ;в TABL2 адрес M
MVI b,0 ;нач адрес массива
LOAD a, M ;счетчик в rA
F1: push a ;счетчик в стек
MVI a, MB(B) ;в rA адрес очереного эл-та массива
STOR a, TABL ;адрес эл-та массива в первый эл-нт табл
MVI a, TABL ;адрес первого эл-та таблицы
CALL MIN ;вызов ПП поиска наим MB
ADI b,1 ;след элемент массива
pop a ;счетчик из стека
LOOP a, F1 ;счетчик по адресу F1
MVI b, TABL ;в rB адрес первого эл-та таблицы
LOAD a, 1(B) ;в rA адрес второго эл-та табл
LOAD a, 0(B) ;в rA значение второго эл-та таблицы
STOR a, BMIN ;сохр BMIN
MVI a, TABL ;адрес первого л-та таблицы
CALL POWER ;вызов пп возведения в степень
;
MVI a, CMIN ;адрес CMIN в rA
STOR a, TABL1 ;в TABL1 адрес CMIN
MVI a, K ;адрес K в rA
STOR a, TABL2 ;в TABL2 адрес M
MVI b,0 ;нач адрес массива
LOAD a, K ;счетчик в rA
F2: push a ;счетчик в стек
MVI a, MC(B) ;в rA адрес очереного эл-та массива
STOR a, TABL ;адрес эл-та массива в первый эл-нт табл
MVI a, TABL ;адрес первого л-та таблицы
CALL MIN ;вызов ПП поиска наим MB
ADI b,1 ;след элемент массива
pop a ;счетчик из стека
LOOP a, F2 ;счетчик по адресу F2
MVI b, TABL ;в rB адрес первого эл-та таблицы
LOAD a, 1(B) ;в rA адрес второго эл-та табл
LOAD a, 0(B) ;в rA значение второго эл-та таблицы
STOR a, CMIN ;сохр CMIN
MVI a, TABL ;адрес первого л-та таблицы
CALL POWER ;вызов пп возведения в степень
LOAD a, BMIN ;
out 5 ;вывод BMIN в степени
LOAD a, CMIN ;
out 6 ;Вывод СMIN в степени
ADM a, BMIN ;
OUT 7 ;вывод суммы
STOP ;
;
;ПП поиска наименьшего
;
MIN: push b ;сохр rB в стек
push a ;сохр rA (адрес табл) в стек
LOAD a,0(a) ;адрес первого эл-та таблицы
LOAD a,0(a) ;в rA эл-нт MB
LOAD b,1(sp) ;в rB адрес табл
LOAD b,1(B) ;адрес второго эл-та таблицы
LOAD b,0(B) ;в rB MIN
CMR a,b ;сравнение эл-та массива c MIN
JNN X ;переход по полож и нулевому знач
LOAD b,1(sp) ;адрес табл в rB
LOAD b,1(B) ;загруз в rB адреса второго эл-та табл
STOR a,0(B) ;сохр наим элем
X: pop a ;
pop b ;
ret ;возврат в осн функцию
;
;ПП возведения в степень
;
POWER: push b ;
push a ;
LOAD a,1(a) ;адрес минимального числа
LOAD a,0(a) ;минимальное число в rA(основание)
LOAD b,1(sp) ;в rB адрес табл
LOAD b,2(B) ;адрес показателя степени
LOAD b,0(B) ;показатель степени в rB
XCHG ;обмен регистров
push b ;сохранить основание в стеке
MVI b,1 ;результат
CYCL: push a ;счетчик
MUM a,2(sp) ;умножение
pop a ;счетчик из стека
LOOP a, CYCL ;цикл по адресу CYCL
pop a ;основание из стека
LOAD a,1(sp) ;адрес табл
LOAD a,1(a) ;адрес мин числа
STOR b,0(a) ;сохр мин число в степени
pop a ;
pop b ;
ret ;
Fresh_MaN вне форума Ответить с цитированием
Старый 11.04.2010, 11:13   #2
Fresh_MaN
 
Регистрация: 10.04.2010
Сообщений: 4
По умолчанию

Товарищи, горит срок сдачи =(((((
Fresh_MaN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матрицы. ОЧЕНЬ ВАЖНО !!! Не могу найти ошибку в коде pasha92 Помощь студентам 0 24.12.2009 20:19
не могу найти ошибку в коде pavelstraut Общие вопросы C/C++ 5 24.07.2009 23:20
Не могу найти ошибку в коде! Natasha666 Помощь студентам 1 20.05.2009 09:27
помогите найти ошибку в коде Joker88 Помощь студентам 1 04.03.2008 12:43
Паскаль. Не могу найти ошибку. Нужна помощь! Nexx Помощь студентам 10 06.12.2007 19:12