Срочно! программа на языке ассемблера
в ВХ – смещение массива;
в СХ – число элементов в массиве.
В основной программе вызвать описанную процедуру для двух разных массивов.
Программа есть, надо найти ошибку в 15 строке. (mov AX, @Stack).Помогите пожалуйста!!!
TITLE MyProg
.MODEL tiny
.DATA
; строки данных для вывода соответствующих комментариев по ходу работы программы
st0 db 'array 1 length 21',0dh,0Ah,'$'
st1 db 'array 2 length 17',0dh,0Ah,'$'
st2 db 'program end',0dh,0Ah,'$'
st4 db 0dh,0Ah,'$' ; строка для выполнения перехода на новую строку
; массивы данных
mas DW 2,3,54,6,2,3,54,6,54,6,2,3,54,6,54,6,2,3,54,6,0
mma DW 1,1,10,15,1,1,1,1,1,1,1,1,1,1,1,2,8
.STACK 100h
.CODE
main PROC
; основная программа
mov AX, @Stack
mov SS, AX
mov AX, @data
mov DS, AX
; проведена установка регистров сегмента данных и стека
; вывод первой строки
mov AH, 9h ;Выбор функции 9
mov DX, offset st0 ;Адрес строки
int 21h ;Вызов DOS
; загрузка адреса массива mas
mov BX, offset mas
; загрузка длинны массива
mov CX, 21
; вызов подпрограммы вывода массива
CALL Array
; вывод второй строки
mov AH, 9h ;Выбор функции 9
mov DX, offset st1 ;Адрес строки
int 21h ;Вызов DOS
; ТО ЖЕ ДЛЯ 2-ГО МАССИВА
mov BX, offset mma
mov CX, 17
CALL Array
; вывод строки завершения работы программы
mov AH, 9h ;Выбор функции 9
mov DX, offset st2 ;Адрес строки
int 21h ;Вызов DOS
;-- ОКОНЧАНИЕ РАБОТЫ ПРОГРАММЫ
mov AL, 0
mov AH, 4Ch ; MS DOS "exit"
int 21h
main ENDP
; Подпрограмма вывода массива
Array proc
mov AX, 05h ; установка счетчика для определения 5-го элемента
L1:
push AX
mov AX, [BX] ; загрузка очередного элемента
aam ; 10-я коррекция для вывода корректных 10-х чисел
or AX, 030h ; подготовка чисел к выводу
push AX ; сохранение младшего байта
mov DL, AH ;Отображаемый символ
mov AH, 6h ;Выбор функции 6
int 21h ;Вызов DOS для исполнения
pop AX
mov DL, AL ;Отображаемый символ
mov AH, 6h ;Выбор функции 6
int 21h ;Вызов DOS для исполнения
mov dl, ' ' ; вывод пробела между цифрами
mov AH, 6h ;Выбор функции 6
int 21h ;Вызов DOS для исполнения
add bx, 2
; вычисление 5-го элемента в строке
pop AX
DEC AX
cmp AX, 0
je equal ; переход если равно
jmp xod
equal:
mov AH, 9h ;Выбор функции 9
mov DX, offset st4 ;Адрес строки
int 21h ;Вызов DOS
mov AX, 05h
xod:
loop L1
mov AH, 9h ;Выбор функции 9
mov DX, offset st4 ;Адрес строки
int 21h ;Вызов DOS
ret
Array endp
end main
В tiny модели памяти надо настраивать сегменты? И не надо отступать 100h от начала сегмента? Подзабыл я дос..
.STACK 100h -> org 100h
"mov AX, @Stack
mov SS, AX" - убрать .