Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Одномерный массив, Tasm 
:(
    Опции темы
Анастасия17
Дата 19.1.2011, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 19.1.2011

Репутация: нет
Всего: нет



было задание переписать подряд в массив Y положительные и в массив Z отрицательные элементы массива X массив X у меня равен: 1,4,2,-5,3,-1


.model small
.stack
.data

MAS dw 1,4,2,-5,3,-1; массив из 6 элементов
y dw 6
z dw 6
.code

mas proc
mov ax, 0
lea bx, MAS
lea si, y
lea di, z
mov cx, 6количество элементов в массиве Х
CYCL: lodsb; получили в АХ очередной элемент из массива Х
mov ax, '0'; сравнили содержимое АХ с нулем
js bm ; если АХ <0 перейдем на bm
mov ax, '0';сравнили содержимое АХ с нулем
jnl am; если АХ > 0 или АХ = 0 пересылаем содержимое АХ в массив Y
bm: mov[di],ax; ;пересылаем содержимое АХ в массив Z 
am: mov [si],ax ;пересылаем содержимое АХ в массив y
loop CYCL ; если проверили не все элементы перейти на начало цикла
ret
summas endp
begin:
mov ax, @data
mov ds, ax
xor ax, ax


call z ; вывод z
call y; вывод y 

mov ah, 4ch ; выходим из программы
int 21h
end begin 

помогите найти ошибку(
PM MAIL   Вверх
JAPH
Дата 19.1.2011, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 8.1.2007
Где: Ленобласть

Репутация: 1
Всего: 23



"Не забывайте пользоваться кнопкой КОД." Большими красными буквами. Привыкаем smile
Код

.model small
.stack
.data

MAS dw 1,4,2,-5,3,-1
y dw 6 ; имелось в виду: y dw 6 dup (?)
z dw 6 ; а то объявляется не место для шести чисел, а одно число шесть
.code

mas proc ; не соответствует summas endp
mov ax, 0
lea bx, MAS
lea si, y
lea di, z
mov cx, 6количество элементов в массиве Х; точка с запятой съелась
CYCL: lodsb; в MAS элементы типа word, а lodsb загружает байт, причем по адресу si, а на MAS-то bx указывает.. нестыковочка
mov ax, '0'; сравнили - это CMP, с нулем как с числом - это без кавычек
js bm
mov ax, '0'; повторно сравнивать необязательно - с предыдущего сравнения флаги не менялись
jnl am
; а сюда (по смыслу) управление не попадет никогда.
; варианты:
; либо если число не должно попадать в Z, оно должно оказываться в Y,
;      и если переход на запись в Z не сработал - то можно сразу записывать в Y, ничего более не проверяя
; либо если число равно нулю, то оно не должно попадать ни в Y, ни в Z,
;      тогда нужен не jnl, а строгий jg, а здесь безусловный прыжок через запись в массивы,
;      или лучше перепрыгивать через запись по je (jz), а если прыжка не произошло - записывать в массив здесь
bm: mov[di],ax ; а передвинуть указатель? а то следующие элементы будут записываться поверх..
; вот записали в Z, а теперь.... записываем в Y? не хватает jmp
am: mov [si],ax ; аналогично - внимательно следить за указателем
loop CYCL
ret
summas endp
begin:
mov ax, @data
mov ds, ax
xor ax, ax ; зачем?
; а кто будет вызывать summas?

call z ; код этих процедур было бы неплохо включить в программу. и назвать как-нибудь отлично от метки массива
call y ; кстати, интересно, как они поймут, сколько элементов оказалось в y и z... и почему это вообще две процедуры, а не одна с параметром..

mov ah, 4ch
int 21h
end begin 


Это сообщение отредактировал(а) JAPH - 19.1.2011, 02:22


--------------------
Что непонятно - спрашиваем smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0382 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.