![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Assm - Нужна помощь с массивом в ассемблере i8086 |
|
Assm - Нужна помощь с массивом в ассемблере i8086
|
Новый участник Сообщения: 2 |
Нужно написать программу для определения минимального числа в массиве из 10 беззнаковых 8 разрядных чисел, адреса которых хранятся последовательно в памяти, начиная с адреса 0700:1000. Для чтения адресов используйте косвенно-регистровую адресацию. Минимальный элемент замените значением константы C1, равной 0. Замените все элементы массива последовательно следующими числами: 1, 5, 7, 16, 18, 22, 34, 12, 11, 32.
Заранее спасибо |
|
Отправлено: 17:24, 25-12-2013 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 17:44, 25-12-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 2
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать bubbler, ужс, а не код
![]() |
Отправлено: 00:23, 26-12-2013 | #4 |
Ветеран Сообщения: 2029
|
Профиль | Отправить PM | Цитировать Цитата bubbler:
Лучше отталкивайтесь для начала от чего-то такого: 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
|
Профиль | Отправить PM | Цитировать AMDBulldozer, по условию задачи по адресу 0700:1000 лежит не массив чисел, а массив адресов на числа. Поскольку неговорится какие это указатели, полагаю надо считать, что дальние. Вообще задача сформулирована не совсем корректно, т.к. если считать, что числа находятся по разным адресам, то это нифига не массив, как сказано в задаче, ибо массив, как известно, последовательность однотипных элементов. Если же адреса указывают на последовательно расположенные байты(числа), то нафига читать все адреса, если можно прочитать первый, а дальше по индексу. Поэтому формулировка задачи не ахти. И кстати C1 по условию константа, не инициализированная переменная, тобишь C1 equ 0.
|
Отправлено: 13:12, 26-12-2013 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
нужна помощь !!! | 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 |
|