Миоко Таканава
Гений
(51590)
10 лет назад
Ваша программа делает совсем не то, что написано в задании.
Если я не ошибаюсь, то программа должна быть написана для функциональной модели микроЭВМ-2 Алтайского государственного технического Университета им. И. И. Ползунова.
.hex
.org 00
in 0
stor a, N
mvi b, ArrA
GetA:
push a
in 1
stor a, 00(b)
adi b, 01
pop a
loop a, GetA
mvi b, ArrB
stor b, LineB
mvi a, 01
stor a, Factor
load a, N
CreateB:
push a
mvi a, 00
stor a, Index
load a, N
CreateLine:
push a
load b, Index
load b, ArrA(b)
mum a, Factor
load a, LineB
adm a, Index
stor b, 00(a)
load a, Index
adi a, 01
stor a, Index
pop a
loop a, CreateLine
load a, Factor
adi a, 01
stor a, Factor
load a, LineB
adm a, N
stor a, LineB
pop a
loop a, CreateB
stop
N: .ds 01 ; Размер массива A
Index: .ds 01 ; Индекс массива А и индекс столбца матрицы B
LineB: .ds 01 ; Адрес начала текущей строки матрицы B
Factor .ds 01 ; Номер строки матрицы и множитель
ArrA: .ds 0A ; Массив A
ArrB: .ds 64 ; Матрица B
.end
P.S. Если не жалко, поделитесь ссылкой на программу моделирования этой модели, её ассемблер и дизассемблер.
+1
Гуру
(2634)
10 лет назад
А может она неправильно записана?
Как я понимаю на ассемблере все делается с право на лево, то есть вот код
MOV Ah,41h /записать 41h в регистр Ah
Источник: Уже непомню
есть программа уже составленная, но с ошибкой, можете поглядеть?
IN 0 ; ввод количества элементов массивов
STOR A,N ; запомнить количество элементов по адресу n
MVI b,A ; загрузить в rB адрес массива A
geta:PUSH A ; сохранить в стеке счетчик цикла
IN 1 ; ввести очередной элемент массива A
STOR A,00(B) ; запомнить его по адресу (b)+0
ADI B,01 ; вычислить адрес следующего элемента
POP A ; восстановить из стека счетчик цикла
LOOP A,geta ; замкнуть цикл по метке geta
MVI B,B ; загрузить в рB адрес массива B
LOAD A,N ; загрузить в регистр A количество элементов
getb:PUSH A
IN 2 ; ввести очередной элемент массива B
STOR A,00(B) ; запомнить его по адресу (b)+0
ADI B,01 ; вычислить адрес следующего элемента
POP A ; восстановить из стека счетчик цикла
LOOP A,getb ; замкнуть цикл по метке getb
MVI b,0 ; загружаетм в регистр B - 1
stor b,I
load a,N
xchg
cycl: load b,N
cmr a,b
jp exit
load a,N
load b,I
sbr a,b
stor a,tmp ;N-i
load a,b(tmp)
load b,a(I)
mur a,a
stor a,c(I)
load a,I
adi a,1
stor a,I
jmp cycl
exit: STOP
; останов
N: .DS 1 ; резервирование 1 байта под количество элементов
A: .ds 0a ; резервирование 10 байтов под массив A
B: .ds 0a ; резервирование 10 байтов под массив B
C: .ds 0a ; резервирование 10 байтов под массив C
tmp: .ds 0a
.org 60 ; установить абсолютный адрес 60h
; подпрограмма вычисления выражения