Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Адресация опреандов у JMP, Ликбез, шаг 3 
:(
    Опции темы
zalex
Дата 16.11.2005, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: нет
Всего: 2



Разбираюсь с адресацией операндов команды jmp. Пока ссылаешься на метки, всё понятно, а когда пытаешься модифицировать адрес перехода с каким либо регистром - начинается недопонимание - что же я написал на самом деле, например командой
l: ...
.....
.....
.....
jmp [bx+l]

я даже при bx=0 не попадаю на l. Что в этом случае под l понимается - адресное выражение, а не относительное смещение?

Расскажите пожалуйста о методах адресации операндов этой команды

PM MAIL   Вверх
Chingachguk
Дата 17.11.2005, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



Когда ты пишешь [...], то скобки говорят, что нужно вытащить (чаще всего) из памяти адресок и уже его использовать как операнд для (тут - прыжка).

Те:

SomeLabel:

...

jmp word ptr AddrOfSomeLabel

...

AddrOfSomeLabel dw offset SomeLabel

Можешь написать так:

SomeLabel:

...

mov ax,word ptr AddrOfSomeLabel
jmp ax

...

AddrOfSomeLabel dw offset SomeLabel

А вообще лучше можно увидеть все в отладчике...




--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
zalex
Дата 17.11.2005, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: нет
Всего: 2



Разобрался почти со всем, остался один вопрос

Есть код

L:.......
..........
..........
jmp [bx+L]

Что транслятор вместо L подставляет? Чтот оподставляет, но систему не пойму.

PM MAIL   Вверх
Chingachguk
Дата 17.11.2005, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



Ну проще всего посмотреть в отладчике.

Код

Вот какой код был у меня:

@@Label:

  nop
  nop
  nop
  nop

  jmp  word ptr [bx+@@Label]

  ret


Вот во что он превратился (отладчик - td.exe):

Цитата
cs:010090            nop
cs:0101 90            nop
cs:0102 90            nop
cs:0103 90            nop
cs:0104 FFA70001      jmp    [bx+0100]
cs:0108 C3            ret


Видно, что компилятор сделал все очень просто:

Код

@@Label:

  nop
  nop
  nop
  nop

  jmp  word ptr [bx+(offset @@Label)]

Или в другой форме:

@@Label:

nop
nop
nop
nop

jmp word ptr @@Label[bx]

Те он полагает, что в памяти по адресу @@Label+bx находится некое слово (dw), которое надо использовать как целевой адрес перехода.





--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
zalex
Дата 17.11.2005, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: нет
Всего: 2



Здесь что то не такsmile
Я сам под дебагом подобное смотрел, и при смещении метки 15h конструкция [bx+lab] превращалась в [bx+ffc5].

Попробую с собаками. Или в чем мб еще загвоздка?

PM MAIL   Вверх
zalex
Дата 17.11.2005, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: нет
Всего: 2



Сорри , сам посмотрел сейчас, что неправильно вопрос сформулировал!

А именно, не просто jmp [bx+lab] a jmp DS:[bx+lab].

PM MAIL   Вверх
Chingachguk
Дата 18.11.2005, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



Обрати внимание все же на то, что я написал:

Цитата
cs:0104 FFA70001      jmp    [bx+0100]



--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
zalex
Дата 20.11.2005, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: нет
Всего: 2



2 Chingachguk - ежели у Вас еще осталось чуть чуть терпения, то вразуми!
Всё, что выше написано - вполне понятно, разобрано. Но в следующем примере просто голову поломал.

dosseg
.model small
.stack 200h
.data
zz db 0

.CODE

PStart:
mov ax, @data
l: mov ds, ax

mov bx, 0
mov al, zz
jmp ds:[bx+l]
nop


add cx, 1
mov ah, 4ch
int 21h
END PStart

Команду с jmp под дебагом я вижу как jmp [bx+FFF3]. Почему? Смщение у l=13h


PM MAIL   Вверх
Chingachguk
Дата 21.11.2005, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 11
Всего: 18



Возможно, потому, что FFF3h = -13. Посмотри коды команды в окошке данных твоего отладчика (если это td.exe - в нижнем окошке укажи смотреть данные по адресу cs:ip (ALT+F10...)). Или же просто нажми F3 в файловом менеджере.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
zalex
Дата 21.11.2005, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 13.5.2005

Репутация: нет
Всего: 2



А причем -13?
ИТАК, под masm 6.11 это выглядит, как я описал
под tasm - это вообще не компилится
к сожалению третьего не помню, а экзешник назывался masm16 - это представляется по всей логике - [bx+13h]


-13 мне тоже не понятно, ибо от СЛЕДУЮЩЕЙ команды до метки не -13.

В общем для себя я выводы сделал, и дальше загоняться в разницах компиляторов нет времени. Большое спасибо, что откликнулся.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.