![]() |
|
|
![]()
|
|
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: нет Всего: 2 |
Разбираюсь с адресацией операндов команды jmp. Пока ссылаешься на метки, всё понятно, а когда пытаешься модифицировать адрес перехода с каким либо регистром - начинается недопонимание - что же я написал на самом деле, например командой
l: ... ..... ..... ..... jmp [bx+l] я даже при bx=0 не попадаю на l. Что в этом случае под l понимается - адресное выражение, а не относительное смещение? Расскажите пожалуйста о методах адресации операндов этой команды |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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. |
|||
|
||||
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: нет Всего: 2 |
Разобрался почти со всем, остался один вопрос
Есть код L:....... .......... .......... jmp [bx+L] Что транслятор вместо L подставляет? Чтот оподставляет, но систему не пойму. |
|||
|
||||
| Chingachguk |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: 11 Всего: 18 |
Ну проще всего посмотреть в отладчике.
Вот во что он превратился (отладчик - td.exe):
Видно, что компилятор сделал все очень просто:
Или в другой форме: @@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. |
||||||
|
|||||||
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: нет Всего: 2 |
Здесь что то не так
Я сам под дебагом подобное смотрел, и при смещении метки 15h конструкция [bx+lab] превращалась в [bx+ffc5]. Попробую с собаками. Или в чем мб еще загвоздка? |
|||
|
||||
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: нет Всего: 2 |
Сорри , сам посмотрел сейчас, что неправильно вопрос сформулировал!
А именно, не просто jmp [bx+lab] a jmp DS:[bx+lab]. |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: 11 Всего: 18 |
Обрати внимание все же на то, что я написал:
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 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. |
|||
|
||||
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: нет Всего: 2 |
А причем -13?
ИТАК, под masm 6.11 это выглядит, как я описал под tasm - это вообще не компилится к сожалению третьего не помню, а экзешник назывался masm16 - это представляется по всей логике - [bx+13h] -13 мне тоже не понятно, ибо от СЛЕДУЮЩЕЙ команды до метки не -13. В общем для себя я выводы сделал, и дальше загоняться в разницах компиляторов нет времени. Большое спасибо, что откликнулся. |
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |