Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Срочно! программа на языке ассемблера

71K
03 июня 2011 года
Gira
1 / / 03.06.2011
Задание такое: Написать и отладить программу на языке ассемблера. В программе описать процедуру, которая выводит массив на экран по 5 элементов в строке. Параметры передавать следующим образом:

в ВХ – смещение массива;

в СХ – число элементов в массиве.

В основной программе вызвать описанную процедуру для двух разных массивов.
Программа есть, надо найти ошибку в 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
14
03 июня 2011 года
Phodopus
3.3K / / 19.06.2008
В tiny модели памяти надо настраивать сегменты? И не надо отступать 100h от начала сегмента? Подзабыл я дос..
252
04 июня 2011 года
koderAlex
1.4K / / 07.09.2005
какой нах стек ?
.STACK 100h -> org 100h

"mov AX, @Stack
mov SS, AX" - убрать .
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог