Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

delta-offset

Не могу понять до конца, как получать дельта смещение.
Вот есть след строки:
[1234:0200h] call Get_IP
[1234:0203h] Get_IP:
[1234:0203h] pop ax
[1234:0204h] sub ax,offset Get_IP
Компилятор при ассемблировании вместо Get_IP поставит ее адрес - получится:
[1234:0200h] call 0203h
[1234:0203h] pop ax
[1234:0204h] sub ax,0203h
Т.е. 203 это типа константы. Дальше заражаем файл размером 1000h, получаем:
[1234:1200h] call Get_IP
[1234:1203h] Get_IP:
[1234:1203h] pop ax
[1234:1204h] sub ax,offset Get_IP
Но ведь Get_IP= 203h, тогда call Get_IP должен перенести нас не по адресу 1203h,а
по адресу 203h,а почему-то так не получается.
Я понимаю, что call кладет в стек адрес следующей за ним инструкции и ах затем
будет = 1203h, но почему Get_IP поменялся с 203h на 1203h не понятно, это же
константа????

Номер выпуска : 4836
Возраст листа : 694 (дней)
Количество подписчиков : 528
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/418184
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Mon, 15 Aug 2005 21:14:17 +0400 (#418184)

 

Ответы:

Все дело в том, что в команде call указывается относительный адрес той
команды, на которую происходит переход. Относительно адреса команды, которая

непосредственно следует за командой call. Поэтому куда бы в файле мы не
записали приведенный код, call всегда будет вызывать просто следующую за ней

команду :-)

Да, Get_IP - константа :-) Но ассемблер при создании объектного модуля
вычисляет смещение до нее относительно следующей команды, и в качестве
операнда команды call сует это смещение.

А процессор при выполнении команды call не делает IP := смещение, а делает
IP := IP + смещение.

Номер выпуска : 4841
Возраст листа : 695 (дней)
Количество подписчиков : 527
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/418684
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

Ответить   Tue, 16 Aug 2005 20:05:44 +0600 (#418684)

 

Здравствуйте, asd.

Вы писали 15 августа 2005 г., 23:14:17:

А ты сам внимательно листинг смотрел?
[1234:1203h] Get_IP: Четко указан адрес 1203h что еще надо? Этож не
константа задаваемая при написании кода, она задается при прогоне
программы. Да и не константа это, а адрес в памяти.

Ответить   Thu, 18 Aug 2005 08:57:50 +0600 (#419514)