![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 07.03.2016
Сообщений: 3
|
![]()
добрый день. необходимо поменять местами соседние элементы 10-элементного массива слов. решил писать тупо в лоб и максимально просто(ничего не знаю потому что)
когда переношу первый элемент массива в ax, то всё идёт как по маслу. пытаюсь всунуть второй элемент массива в bx, но вместо предполагаемой семёрки туда влазит 700h т.е если верно понимаю, семерка записалась в bh. в итоге программа пошла коту под хвост. и мне интересно почему так вышло. мб мое предположение неверно, мб я дебик. поясните, пожалуйста :D Код:
товарищи программисты. пожалуйста. помогите разобраться ;D Последний раз редактировалось jekos1; 07.03.2016 в 14:59. |
![]() |
![]() |
![]() |
#2 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]() Код:
|
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
jekos1,
Если задействовать 32-битные регистры, то можно сразу читать в EAX по-два слова. Остаётся поменять слова местами и записать EAX обратно в массив. Рулить здесь будут команды LODSD/STOSD/ROL, и длина массива. Команды LODS/STOS (B/W/D) удобны тем, что автоматом увеличивают указатели ESI/EDI. LODSD - читает в EAX двойное слово из адреса ESI; STOSD - пишет двойное слово из EAX в адрес EDI; ROL - выталкивает старший(левый) бит, в младший(правый), указанное кол-во раз. В итоге получаем такой код на FASM'e: Код:
Нашедшего выход - затаптывают первым..
|
![]() |
![]() |
![]() |
#4 |
Новичок
Джуниор
Регистрация: 07.03.2016
Сообщений: 3
|
![]() |
![]() |
![]() |
![]() |
#5 | |
Новичок
Джуниор
Регистрация: 07.03.2016
Сообщений: 3
|
![]() Цитата:
даже если это верно(сейчас проверю), то почему? ; заработало.благодарю. но всё равно интересно как это устроено. если не составит труда, поясните Последний раз редактировалось jekos1; 07.03.2016 в 19:29. |
|
![]() |
![]() |
![]() |
#6 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
32-битные регистры поддерживает не ТАСМ, а процессор.
Инструкции есть такие, значит плохо искал.
Нашедшего выход - затаптывают первым..
|
![]() |
![]() |
![]() |
#7 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]()
а че тут пояснять?
это твой проход влоб с правильным размером элемента массива (2 байта). |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поменять местами элементы массива | CkooTuHa | Помощь студентам | 1 | 18.12.2014 17:08 |
Найти минимальный и максимальный элементы массива Х и поменять их в массиве местами. Элементы массива вычисляются по формуле Xi=(( | Милашечка | Помощь студентам | 0 | 26.05.2013 13:01 |
Поменять местами элементы массива Pascal | olga_v95 | Помощь студентам | 2 | 19.03.2013 23:04 |
Поменять местами элементы одномерного массива | McFrey | Помощь студентам | 8 | 08.12.2011 23:03 |