169 похожих чатов

Какой смисил такого кода? asm call Label Label: pop ax sub ax, offset

Label

В ax всегда же будет 0?

42 ответов

121 просмотр

нулевой смысл

Vlad- Автор вопроса
Timofej 17.1
нулевой смысл

А если серьезно?

У тебя в ах ничего не помещено

в ax будет регистр ip

Alexey
У тебя в ах ничего не помещено

не знаете - не советуйте

Mixail Frolov
не знаете - не советуйте

А что туда помещаться

Vlad- Автор вопроса
Mixail Frolov
в ax будет регистр ip

В ax будет адрес метки Label, але потім sub ax, offset Label должен оьнулить?

Alexey
А что туда помещаться

reg ax = reg ip на момент вызова подпрограммы

Vlad- Автор вопроса

w[esp] = retAddr и esp+2 ax = retAddr и esp-2 ax - retAddr = 0 Да, будет ноль. Китайский код: видимость деятельности без самой деятельности. Потому что чем больше кода тем выше зарплата. Аххах.

Vlad- Автор вопроса
Станислав Баранцев
w[esp] = retAddr и esp+2 ax = retAddr и esp-2 ax -...

Да но дальше в книге показано що в ax буде 1000

Это нужно для вычисления виртуального адреса программы. После pop ax в AX будет виртуальный адрес на метку Label, а после sub ax, offset от виртуального адреса на метку отнимется смещения метки в коде, и мы получим начальный адрес.

Vlad- Автор вопроса
КТ315
Это нужно для вычисления виртуального адреса прогр...

ОК, а чем виртуальний адрес отличається от offset?

КТ315
Это нужно для вычисления виртуального адреса прогр...

Неужели? При компиляции call delta станет call 401014 например А offset delta тоже станет 401014. Константы вбитые жёстко в код. Тут не может быть вычислений.

Vlad
ОК, а чем виртуальний адрес отличається от offset?

Я же написал - offset это смещение. Относительно 0.

Станислав Баранцев
Неужели? При компиляции call delta станет call 40...

Нет, там будет относительный call. Опкод такой.

КТ315
Нет, там будет относительный call. Опкод такой.

Может быть. Вполне. Я правда когда дизассемблирую то даже относительные адреса влсстанавливаю до абсолютных. Опкоды есть и по относительным и по абсолютным. Только отладчик развеет наши сомнения!

Станислав Баранцев
Может быть. Вполне. Я правда когда дизассемблирую...

У меня никаких сомнений нет, я этот трюк с вычислением IP наизусть знаю, и там у call всегда будет относительный опкод. Хватит новичка путать в таких очевидных вопросах.

Vlad
Я тоже так думав

Ты хотя бы код вручную тоже собирай, отлаживай. Сам увидишь, что там вычисляется в AX.

Vlad- Автор вопроса
Vlad
screenshot не понимаю(

Код покажи.

Vlad- Автор вопроса
КТ315
Код покажи.

Просто call Label

Vlad
Просто call Label

sub как написал, покажи.

Vlad
screenshot

а теперь сделай тоже самое для винды в формате PE

Vlad
screenshot

Всё правильно работает. Ты в своём пространстве запускаешь, поэтому 0. У тебя org установлен.

КТ315
Всё правильно работает. Ты в своём пространстве за...

Перекинешь в чужое пространство - там будет виртуальный адрес другой, будет уже не 103-103.

Mixail Frolov
а теперь сделай тоже самое для винды в формате PE

хотя там вроде тоже ничего не будет, не помню

Vlad
screenshot не понимаю(

Ты тут ещё не показал как у тебя call опкод выглядит.

Это для ДОС?

Vlad- Автор вопроса

В ax будет адрес Label

А потом 0

Vlad
Да

Скинь всю книжку, интересно почитать, что они имеют в виду.

Vlad- Автор вопроса
randomize usr
Скинь всю книжку, интересно почитать, что они имею...

Книжка "Асемблер это просто" О. Калашников

Vlad- Автор вопроса
The Bird of Hermes
А потом 0

Мне уже КТ все обяснив

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта