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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2010, 12:55   #1
Steil
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 14
Вопрос Объясните кто-нибудь код ASSEMBLERа

Объясните пожалуйста ассемблерный код, если можно поподробней=))

mov di,offset array
mov bx,8

mov ax,1
mov dx,ax
m_loop:
stosw
add ax,dx
xchg ax,dx
dec bx
jnz m_loop
Steil вне форума Ответить с цитированием
Старый 15.05.2010, 21:22   #2
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

Код:
mov di,offset array ; смещение некой метки array в di
mov bx,8              ; цикл будет повторятся 8 раз, счётчик в bx

mov ax,1              ;в ax помещаем единицу
mov dx,ax             ;копируем единицу ещё в dx
m_loop:
stosw                   ;сохраняем 16бит (AX == 1) в указатель array [es:di]
add ax,dx              ;прибавляем AX = AX + DX
xchg ax,dx             ;AX = DX, опять единица в AX
dec bx                  ;уменьшаем счётчик
jnz m_loop             ;если счётчик не ноль, то повторим цикл (всего 8 раз)
Итог - код запишет в array единицу восемь раз
Виталий Серов вне форума Ответить с цитированием
Старый 16.05.2010, 01:15   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Код:
xchg ax,dx             ;AX = DX, опять единица в AX
А то, что дх стал равен бывшему ах != 1 вы забыли... Соответственно, итог не совсем итог.
p51x вне форума Ответить с цитированием
Старый 16.05.2010, 04:47   #4
Steil
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 14
По умолчанию

Но этот код соответствует следующему заданию?

Написать на ассемблере процессора Intel 8086 фрагмент программы, заполняющий массив заданного размера целыми 16-разрядными
числами ряда Фибонначи. Начало массива задано в регистре DI,
количество заполняемых ячеек – в BX.

Последний раз редактировалось Steil; 16.05.2010 в 04:58.
Steil вне форума Ответить с цитированием
Старый 16.05.2010, 08:13   #5
Виталий Серов
Заснувший
Форумчанин
 
Регистрация: 13.03.2009
Сообщений: 213
По умолчанию

Цитата:
А то, что дх стал равен бывшему ах != 1 вы забыли... Соответственно, итог не совсем итог.
Вы правы

Цитата:
Но этот код соответствует следующему заданию?

Написать на ассемблере процессора Intel 8086 фрагмент программы, заполняющий массив заданного размера целыми 16-разрядными
числами ряда Фибонначи. Начало массива задано в регистре DI,
количество заполняемых ячеек – в BX.
да, соответствует

Последний раз редактировалось Виталий Серов; 16.05.2010 в 09:08.
Виталий Серов вне форума Ответить с цитированием
Старый 16.05.2010, 09:10   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Цитата:
Явно DX нигде больше не используется, приведённый код описан правильно
А это что???
Код:
add ax,dx
Это же цикл! Сами же согласились.

Цитата:
Нет.
Точно не проверял, но очень похоже что да. А в вашем коде...

Цитата:
add di,0 ;вот в этой строке не уверен, знаю что адрес нужно прибавлять, но регистр
;di ведёт себя как-то странно
Потому что не надо трогать di. С ним уже stosw сделала.
p51x вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не знаю как выполнить.кто-нибудь...ну кто-нибудь... blina Общие вопросы по Java, Java SE, Kotlin 1 12.05.2010 11:43
Объясните код Neymexa SQL, базы данных 1 23.03.2010 17:55
Нужен кто-нибудь, кто сможет подсказать, как подступиться к программированию Delphi & C++ Koshka_Kali Помощь студентам 2 30.11.2008 13:23
Объясните код Neymexa Общие вопросы по Java, Java SE, Kotlin 1 29.11.2008 02:33
объясните код Rend1 Общие вопросы Delphi 18 01.02.2008 14:52