![]() |
|
|
![]()
|
|
| Vandalko |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 7.5.2007 Репутация: нет Всего: нет |
Ести пример из методички по цикличному сдвигу двойных слов:
Компилируется это горе(учитывая количество ошибок) только в таком виде:
Но проверка в отладчике показала на ошибку уже при первом проходе цикла... Но у меня есть подозрение
на:
Знатоки, подскажите, как выполнить циклический сдвиг двойных слов используя команду shrd |
||||||||
|
|||||||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
Vandalko,
команда move eax,ebx+4[esi*4] на "правильном" ассемблере должна выглядеть так: mov eax,[ebx+esi*4+4] а если принять во внимание команду lea ebx,block, то обе команды lea ebx,block и mov eax,[ebx+esi*4+4] можно заменить на одну mov eax,blok[esi*4+4]
Это сообщение отредактировал(а) Mikl_ - 16.3.2009, 14:30 |
|||
|
||||
| Vandalko |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 7.5.2007 Репутация: нет Всего: нет |
огромное спасибо за обьяснение, но что если нужно выполнить циклический сдвиг 121 раз ? тогда этот пример не подходит...
Давайте вернемся к моей реаизации - вот, программа после некоторых исправлений, но к сожалению программа вылетает с ошибкой...
|
|||
|
||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
Vandalko,
Это сообщение отредактировал(а) Mikl_ - 17.3.2009, 12:39 |
|||
|
||||
| Vandalko |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 7.5.2007 Репутация: нет Всего: нет |
OllyDbg мне пока сложноват - учить надо
А вот Turbo Debugger самое оно... Вобщем компилил-компилил я это чудо на 32битном masme и так ничего и не добился... Все решилось после компиляции на 16битном masm Конечный вид програмы(если есть желание - просмотрите и скажите есть ли тут хоть доля правильности Я ведь правильно понимаю, что 0000h-FFFFh это двойное слово ?
Во всяком случае спасибо за советы Програма дополнилась новым заданием - вывести информацию о количестве последовательных портов... Добыть саму информацию было несложно, но вот как теперь вывести ее на экран ? Обратите внимание на выделеный участок кода. По идее он должен бы вывести число, но... ничего так и не выводит.... Это сообщение отредактировал(а) Vandalko - 16.3.2009, 17:51 |
|||
|
||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
Vandalko,
1) не плохо свои листинги снабжать комментариями, если ты DOS только изучаешь, то я за 20 лет его забыл окончательно. Да и в практическом программировании DOS не применяется 2) если вврху листинга нет директивы .radix 2 или .radix 8 или .radix 16, то снабжать десятичные цифры спецификатором d как в этой команде mov ecx,6d не нужно -- это только вводит в заблуждение, другое дело если у тебя установлено .radix 16, тогда 6Dh=109 3) это что за бред shrd [ebx+esi*4],eax,121 32-разрядный регистр или ячейку памяти больше чем на 32 бита не сдвинуть -- разрядов не хватает! 4) не правильно, число в диапазоне от 0000h до 0FFFFh (от 0 до 65535) это слово, двойное слово это число в диапазоне от 00000000h до 0FFFFFFFFh (от 0 до 4294967295) 5) прерывание 11h - получить список оборудования; возвращает в регистре AX список оборудования BIOS; в регистре AX в 9-11 разрядах число установленных последовательных портов
Это сообщение отредактировал(а) Mikl_ - 17.3.2009, 07:16 |
|||
|
||||
| Vandalko |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 7.5.2007 Репутация: нет Всего: нет |
спасибо за комментарии...
shrd [ebx+esi*4],eax,121 - ну, нужно ведь выполнить циклический сдвиг на 121 бит... этот вариант скомпилился и я его оставил Теперь вопрос по отладчику - скажем мне нужно переслать какието данные в сегмент кода, как это можно увидеть в отладчике ? Я имею ввиду не факт пересылки а присутствие этих данных (если конечно такое возможно, ибо mov cs:0100,temp компилится, но каких то изменений в отладчике не наблюдается - хотя, учитывая мой опыт работы с ASM скорее всего я просто незнаю как их увидить)? По поводу вывода количества последовательных портов, то код в предыдущим варианте был не конечным вариантом - я потом доделал и все нормально работало, но во всяком случае спасибо за Ваш алгоритм - он будет третьим P.S. P.S.2. Мальчик я, мальчик... Это сообщение отредактировал(а) Vandalko - 23.3.2009, 23:31 |
|||
|
||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
Ну или как вариант, сдвигаем на четыре переменные вправо, а потом 32-25=7 осужествляем циклический сдвиг влево на 7 бит иначе если ты сдвигаешь вправо или влево на 32 или больше разрядов в твой переменной будут нули во всех разрядах! Это сообщение отредактировал(а) Mikl_ - 19.3.2009, 09:08 |
|||
|
||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
Vandalko,
Это сообщение отредактировал(а) Mikl_ - 19.3.2009, 12:37 |
|||
|
||||
| YDI |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 7.4.2009 Репутация: нет Всего: нет |
Ув. товарищи, почти эта же прога, при компиляции выдает ошибку "деление на ноль". Укажите где промах.
Это сообщение отредактировал(а) YDI - 14.4.2009, 01:49 |
|||
|
||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
YDI,
.model tiny подразумевает создание COM-файла, у которого сегмент кода, стека и данных сосредоточены "в одном флаконе" (в одном сегменте |
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |