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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2010, 20:46   #1
Nafanja20
Пользователь
 
Регистрация: 26.03.2010
Сообщений: 12
По умолчанию Ошибка в программе, ассемблер

Уважаемые программисты, скажите пожалуйста что исправить, чтобы программа правильно работала
Определить симметричный ли массив, то есть ровни ли между собой равноудаленные от концов элементы массива и подать ответ «1», если так, или «0» если нет
А программа выводит просто числа

INCLUDE LIBMACRO.INC
PROGRAM PR_10_1

.DATA
yes db 1
no db 0
n equ 25
mas db 1,2,3,4,5,3,7,8,9,10,11,12,13,12,11 ,10,9,8,7,6,5,4,3,2,1

start;
assume ds:@data, es:@data
mov ax,@data

mov cx,12
mov si,n
mov di,0
dec si

m1:
mov al,mas[si]
wword mas[si]
wword mas[di]
cmp al,mas [di]
jne m2
inc di
dec si
loop m1
wword yes
jmp ex
m2:
wword no
ex:
return
END PR_10_1

Последний раз редактировалось Nafanja20; 27.05.2010 в 23:22.
Nafanja20 вне форума Ответить с цитированием
Старый 28.05.2010, 07:59   #2
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

изменить цикл так
Код:
m1:
mov al,mas[si]
cmp al,mas [di]
jne m2
inc di
dec si
loop m1
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 28.05.2010, 08:49   #3
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Nafanja20
а я бы сделал так
Код:
.286
.model tiny
.code	
org 100h
start:  mov ax,3;стираем с экрана
	int 10h
	mov si,offset mas
	mov bx,len-2
a0:     lodsb;получить очередной элемент массива
	cmp al,[si+bx];проверить симметричность
	jne a1;если не равны -- сообщить об этом
	sub bx,2
	jns a0;массив закончился?
	mov bx,1; ответ «1»
	jmp a2
a1:	mov bx,0; ответ «0»
a2:	shl bx,1
	mov dx,indx[bx]
	mov ah,9;выводим надпись на экран
	int 21h
	mov ah,0;пока не нажмут любую клавишу
	int 16h
exit:	ret;конец программы
mas db 1,2,3,4,5,3,7,8,9,10,11,12,13,12,11,10,9,8,7,6,5,4,3,2,1
len = $-mas;длина массива
string1 db 'Массив симметричный$'
string2 db 'Массив несимметричный$'
indx dw string2,string1 
end start

Последний раз редактировалось Mikl___; 28.05.2010 в 09:21.
Mikl___ вне форума Ответить с цитированием
Старый 28.05.2010, 09:44   #4
Nafanja20
Пользователь
 
Регистрация: 26.03.2010
Сообщений: 12
По умолчанию

Спасибо Вам большое!
А что значит
shl bx,1
Nafanja20 вне форума Ответить с цитированием
Старый 28.05.2010, 10:00   #5
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
Сообщение от Nafanja20
А что значит shl bx,1
умножить содержимое BX на 2, еще можно так add bx,bx
на весы не забудь нажать
Mikl___ вне форума Ответить с цитированием
Старый 28.05.2010, 10:14   #6
Nafanja20
Пользователь
 
Регистрация: 26.03.2010
Сообщений: 12
По умолчанию

indx dw string2,string1
значит что string1 и string 2 имеют индексы 0 и 1?
Nafanja20 вне форума Ответить с цитированием
Старый 28.05.2010, 10:40   #7
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

indx dw адрес string2,адрес string1; массив адресов
indx[0]=адрес string2
indx[2]=адрес string1
Mikl___ вне форума Ответить с цитированием
Старый 07.06.2010, 21:04   #8
Nafanja20
Пользователь
 
Регистрация: 26.03.2010
Сообщений: 12
По умолчанию

Простите пожалуйста за навязчивость, но я не понимаю как объяснить эту строку
mov bx,len-2
Для чего мы вычитаем 2?
Nafanja20 вне форума Ответить с цитированием
Старый 08.06.2010, 04:03   #9
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
mov bx,len-2
Для чего мы вычитаем 2?
Нумерация элементов массива идет не с 1, а с 0 поэтому номер последнего элемента n-1, кроме того после команды lodsb произойдет увеличение содержимого si на 1 поэтому bx=len-2
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в программе larin1974 Помощь студентам 7 06.03.2010 20:44
В чем ошибка??? (язык ассемблер) Joker_35815 Помощь студентам 5 11.11.2009 22:05
Ассемблер.Ошибка при ассемблировании. Foster Помощь студентам 7 04.02.2009 13:51
Ассемблер. Факториал числа. Коментарии к программе Irwin Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 03.05.2007 13:52