Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2011, 01:48   #1
Debris
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 32
По умолчанию Относительное смещение данных

Здравствуйте, есть програмка, пишет слова "привет" и сидит на флешке:
Код:
mov ax,cs
mov ds,ax
cld
xor ax,ax
add ax,7D00h
mov si,ax
lodsb<----------
cmp al,0..........|
jz -------------|-------
mov bx,7h........|........|
mov ah,0Eh......|........|
int 10h............|........|
jmp-------------........|
halt<------------------
На 100h адресе находится злополучный "привет"
Я не силён в ассамблере, и непойму какой камондой или методом можно избавится от адреса 7D00, и загрузить в AL данные по относительному адресу типа mov al,[EIP+100h], хочу сделать блок чтоб он работал на любом адресе а не тока на заранее известном

Последний раз редактировалось Stilet; 15.08.2011 в 07:28.
Debris вне форума Ответить с цитированием
Старый 15.08.2011, 09:31   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
и сидит на флешке
Ценнейший комментарий)

Цитата:
чтоб он работал на любом адресе
lea si, [любой адрес] ;
mss вне форума Ответить с цитированием
Старый 15.08.2011, 09:33   #3
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Debris
> нЕПойму какой камОндой или методом можно избавится от адреса 7D00
не понятно зачем так сложно
Код:
xor ax,ax; ax=0
add ax,7D00h; ax=0+7D00h
mov si,ax; si=7D00h
lodsb; mov al,ds:[si] si=si+1
если можно было
Код:
mov si,7D00h
lodsb
> загрузить в AL данные по относительному адресу типа mov al,[EIP+100h]
во-первых, здесь 16-разрядная адресация т.е. mov al,[ip+100h]
во-вторых, это делается вот так
Код:
call a1
a1: pop bx; bx=ip
mov al,[bx+100h]
Mikl___ вне форума Ответить с цитированием
Старый 15.08.2011, 10:42   #4
Debris
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 32
По умолчанию

"Сидит на флешке" имелось в виду находится в первом секторе, с нулевого адреса, и гружу я прогоу, выставляя в биос загрузку с флешки....
LEA вроде как работает с метками, я пишу кодами я не использую ни директивы ни переменные, также нелзя? LEA si, [rel 100h]
С загрузкой si через ax, я конечно тупанул...(думал что он сегментный si) )
А получить IP можно только через стек?, Хотелось просто сделать блок который не использовал никаких постоянных адресов - всмысле я добовлял его к программе в любом месте и не волновался что в нём внутри нужно гдето менять адреса (стёк)
Debris вне форума Ответить с цитированием
Старый 15.08.2011, 10:51   #5
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
я пишу кодами
Месье знает толк в извращениях)

Цитата:
LEA вроде как работает с метками
LEA - это Load Effective Address. Метка - лишь частный случай адресации.
mss вне форума Ответить с цитированием
Старый 15.08.2011, 11:06   #6
Debris
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 32
По умолчанию

Всётаки не пойму как я могу тут LEA использовать
Debris вне форума Ответить с цитированием
Старый 15.08.2011, 11:21   #7
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Debris
мой вариант получения ip не содержит меток и адресонезависим
Код:
E80000 | call $+3
5B | pop bx; bx=ip
8A870001 | mov al,[bx+100h]
а вот так в ip загружается заданное значение
Код:
mov bx,адрес
jmp bx
или так
Код:
push адрес
retn

Последний раз редактировалось Mikl___; 15.08.2011 в 11:42.
Mikl___ вне форума Ответить с цитированием
Старый 15.08.2011, 11:29   #8
Debris
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 32
По умолчанию

Понял.... Спасибо, щас перепишу свой код, даже в табличку выпишу)

Последний раз редактировалось Debris; 15.08.2011 в 11:42.
Debris вне форума Ответить с цитированием
Старый 15.08.2011, 12:07   #9
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
не пойму как я могу тут LEA использовать
Вот если бы ты не страдал ерундой с машинным кодированием и таки воспользовался компилятором, то компилятор бы сам посчитал тебе исполнительный адрес, причем без явных извращений с получением значения IP.
mss вне форума Ответить с цитированием
Старый 15.08.2011, 20:24   #10
Debris
Пользователь
 
Регистрация: 14.06.2009
Сообщений: 32
По умолчанию

И так всё работает! Всмысле програма Hello my world написаная на машинном коде, и запускаемая с загрузочной области винтов и флешек). И что бы труд не пропал для таких извращенцев как я, поделюся
HMW.7z
там 2 картинки с ассамблером и 2 файла с относительным размещение даных и без
Debris вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Относительное позиционирование melkortheshadow HTML и CSS 6 13.04.2011 23:10
Относительное позиционирование Vinnipux HTML и CSS 1 25.02.2011 07:49
Как прописать относительное выделение строк? Ogeris Microsoft Office Excel 4 27.10.2010 11:31
Смещение компонента Volt Общие вопросы Delphi 9 20.01.2010 00:36
Смещение в WinHex bmw Софт 4 22.03.2009 02:16