Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Assm - Нужна помощь с массивом в ассемблере i8086

Ответить
Настройки темы
Assm - Нужна помощь с массивом в ассемблере i8086

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нужно написать программу для определения минимального числа в массиве из 10 беззнаковых 8 разрядных чисел, адреса которых хранятся последовательно в памяти, начиная с адреса 0700:1000. Для чтения адресов используйте косвенно-регистровую адресацию. Минимальный элемент замените значением константы C1, равной 0. Замените все элементы массива последовательно следующими числами: 1, 5, 7, 16, 18, 22, 34, 12, 11, 32.

Заранее спасибо

Отправлено: 17:24, 25-12-2013

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Вы просите не «помощь», а «сделать за меня»: Правила Форума.

Ждём Ваших наработок.

Отправлено: 17:44, 25-12-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вот такая наработка

MOV di,0
MOV si,1
MOV cx,10
start:
mov bl,mass[si]
cmp mass [di],bl

loop start

add si,1
mov di,si

Mass db 1h,5h,7h,16h,18h,22h,34h,12h,11h,32h

Отправлено: 17:51, 25-12-2013 | #3


Старожил


Сообщения: 283
Благодарности: 53

Профиль | Отправить PM | Цитировать


bubbler, ужс, а не код . попробую помочь, но не обещаю.

Отправлено: 00:23, 26-12-2013 | #4


Ветеран


Сообщения: 2029
Благодарности: 704

Профиль | Отправить PM | Цитировать


Цитата bubbler:
Вот такая наработка »
Если честно, я вообще не понял, что Вы написали. Ваш вариант выполнит 10 одинаковых сравнений, потом пару операций неочевидного смысла и радостно передаст управление на блок констант.
Лучше отталкивайтесь для начала от чего-то такого:
Код: Выделить весь код
     1 00000000 EB0B                    Start		JMP .start
     2                                  		align 2
     3 00000002 010507101216220C0B-     .Array:		DB 1, 5, 7, 16, 18, 22, 34, 12, 11, 32
     4 0000000B 20                 
     5 0000000C 00                      .C1		DB 0
     6 0000000D FC                      .start		CLD
     7 0000000E BCFCFF                  		MOV SP, -4
     8 00000011 8CC8                    		MOV AX, CS
     9 00000013 8EC0                    		MOV ES, AX
    10 00000015 8ED0                    		MOV SS, AX
    11 00000017 680007                  		PUSH 700h
    12 0000001A 1F                      		POP DS
    13 0000001B BE0010                  		MOV SI, 1000h
    14 0000001E B90A00                  		MOV CX, 10
    15 00000021 B3FF                    		MOV BL, -1
    16 00000023 AC                      .loop		LODSB
    17 00000024 38D8                    		CMP AL, BL
    18 00000026 7704                    		JA .loopend
    19 00000028 88C3                    		MOV BL, AL
    20 0000002A 89F7                    		MOV DI, SI
    21 0000002C E2F5                    .loopend	LOOP .loop
    22 0000002E B0[0C]                  		MOV AL, .C1
    23 00000030 8845FF                                  MOV [DI-1], AL
    24 00000033 1E                                      PUSH DS
    25 00000034 07                                      POP ES
    26 00000035 0E                                      PUSH CS
    27 00000036 1F                                      POP DS
    28 00000037 8D36[0200]                              LEA SI, [.Array]
    29 0000003B BF0010                                  MOV DI, 1000h
    30 0000003E B105                                    MOV CL, 5
    31 00000040 F3A5                                    REP MOVSW
Сразу предупреждаю - код не проверял, набросал наспех. Эффективность кода низкая в связи с использованием строчных операций (самый короткий способ воспользоваться той самой "косвенно-регистровой адресацией"). Можно было бы его упростить, пригладить, избавиться еще от одного перехода и связанной с ним метки
(заменить строки 16-18 на две клманды "CMOVBE BX, AX; CMOVBE DI, SI". Но зато в нынешнем варианте Вы можете гордо сказать преподавателю, что комбинация cmp/ja позволит процессору объединить эту пару команд, используя macrofusion.

Да, еще одно важное замечание: код был написан для аасемблера nasm (Вам его легче будет понять, чем as), но этот ассемблер не поддерживает модели памяти. Поскольку не предназначен для MS-DOS.
Поэтому инициализация сегментных регистров производилась в явном виде. Блокирование прерываний до установки сегмента стека не осуществлялось, чтобы не перегружать программу проверками IOPL/CPL/PE/VM, поскольку при некоторых комбинациях этих полей команда CLI вызовет общее нарушение защиты.

Еще раз повторяю: ЭТО ВСЕГО ЛИШЬ ЧЕРНОВИК! Я его не проверял.

P.S. Код написан неправильно!!! Читайте ниже сообщение уважаемого Efir - я неправильно понял условия задачи. Тем не менее, пока его не удаляю.

-------
Господа! Убедительная просьба не обращаться за консультациями в ЛС. Поверьте, создать ветку в соответствующем разделе форума гораздо эффективнее.


Последний раз редактировалось AMDBulldozer, 26-12-2013 в 15:35.

Это сообщение посчитали полезным следующие участники:

Отправлено: 04:55, 26-12-2013 | #5


Старожил


Сообщения: 283
Благодарности: 53

Профиль | Отправить PM | Цитировать


AMDBulldozer, по условию задачи по адресу 0700:1000 лежит не массив чисел, а массив адресов на числа. Поскольку неговорится какие это указатели, полагаю надо считать, что дальние. Вообще задача сформулирована не совсем корректно, т.к. если считать, что числа находятся по разным адресам, то это нифига не массив, как сказано в задаче, ибо массив, как известно, последовательность однотипных элементов. Если же адреса указывают на последовательно расположенные байты(числа), то нафига читать все адреса, если можно прочитать первый, а дальше по индексу. Поэтому формулировка задачи не ахти. И кстати C1 по условию константа, не инициализированная переменная, тобишь C1 equ 0.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:12, 26-12-2013 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Assm - Нужна помощь с массивом в ассемблере i8086

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
нужна помощь !!! dimon2103 Тест-форум 0 09-08-2012 16:02
Клавиатура - нужна помощь!!! Abada Тест-форум 1 19-05-2012 20:58
нужна помощь goshakiller2 Тест-форум 0 02-03-2012 15:36
Нужна помощь! SHISHA Лечение систем от вредоносных программ 3 30-10-2009 01:00




 
Переход