Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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

Ответ
 
Опции темы
Старый 24.11.2017, 13:54   #1
MyName-Name-MyName
 
Регистрация: 15.11.2017
Сообщений: 7
Репутация: 10
По умолчанию jmp offset JE - JA

Как правильно настроить прыжок ??? Нужно от esi как то закомбенировать с ebx .... Но чего то все попытки четны.

Код:


  lea esi, [Dest]
  not esi
  and esi, 15


  lea ebx, [offset @@StartPos ]
  add ebx, 6 + (1 * 2) // Move2
  jmp ebx

@@StartPos:
  JE @@ToTo
  JA @@Move1
  JA @@Move2
  JA @@Move3
  JA @@Move4
  JA @@Move5
  JA @@Move6
  JA @@Move7
  JA @@Move8
  JA @@Move9
  JA @@Move10
  JA @@Move11
  JA @@Move12
  JA @@Move13
  JA @@Move14
  JA @@Move15
  JA @@Move16

Расстояние между JE и JA составляет 2
MyName-Name-MyName вне форума   Ответить с цитированием
Старый 24.11.2017, 15:12   #2
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,152
Репутация: 938
По умолчанию

..что-то не понятный код у тебя.
это 32 или 16-бит - т.е. для винды, или доса?
и вроде ни фасм, ни масм..

Цитата:
Сообщение от MyName-Name-MyName Посмотреть сообщение
Расстояние между JE и JA составляет 2
если код для доса, то адрес после JE будет 2-байтный, плюс сама 1-байтная инструкция перехода(JE) - итого 3 байта. если код для винды, то адрес 4-байтный - соответственно будет 5-байт.

и вообще, у фасма свой формат аналога CASE...
__________________
Нашедшего выход - затаптывают первым..
R71MT вне форума   Ответить с цитированием
Старый 24.11.2017, 15:37   #3
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,152
Репутация: 938
По умолчанию

вот здесь я затрагивал эту тему..
__________________
Нашедшего выход - затаптывают первым..
R71MT вне форума   Ответить с цитированием
Старый 25.11.2017, 00:10   #4
MyName-Name-MyName
 
Регистрация: 15.11.2017
Сообщений: 7
Репутация: 10
По умолчанию

По порядку пересмотрел все адреса, увы - так не получится как я хотел.

Компилятор - Delphi

Выделяет адреса по своему, и если по порядку идёт до 9 то дальше отрыв может быть не на 2 а на 16 и 8 с чем связано - не знаю..
MyName-Name-MyName вне форума   Ответить с цитированием
Старый 25.11.2017, 01:26   #5
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 917
Репутация: 667
По умолчанию

Посмотреть в отладчике - более надёжно, чем сидеть и гадать.
Black Fregat вне форума   Ответить с цитированием
Старый 25.11.2017, 12:16   #6
7in
(aka Jin X) !RTFM!
Форумчанин
 
Аватар для 7in
 
Регистрация: 14.12.2014
Адрес: Самара
Сообщений: 285
Репутация: 147
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
если код для доса, то адрес после JE будет 2-байтный, плюс сама 1-байтная инструкция перехода(JE) - итого 3 байта. если код для винды, то адрес 4-байтный - соответственно будет 5-байт.
Ты немного путаешь.
В 16 битах есть короткий je - 2 байта (опкод + short-адрес) и длинный - 4 байта (опкод 2 байта + near-адрес 2 байта).
В 32 битах так же короткий je - 2 байта (опкод + short-адрес) и длинный - 6 байт (опкод 2 байта + near-адрес 4 байта).

Я вообще сути вопроса не понял.
Что пытаешь сделать?
__________________
Делаю лабы на Asm/Delphi/Pascal: asmlabs.ru
7in вне форума   Ответить с цитированием
Старый 25.11.2017, 13:12   #7
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,152
Репутация: 938
По умолчанию

Цитата:
Сообщение от 7in Посмотреть сообщение
и длинный - 4 байта (опкод 2 байта + near-адрес 2 байта).
нет никакой разницы в длинне инструкций переходов.
все они 1-байтные, и отличаются всего одним битом: NEAR(E9h), FAR(EAh) и SHORT(EBh).
вся разница в адресе.. (и модели памяти)
Изображения
Тип файла: png jmp.png (968 байт, 11 просмотров)
__________________
Нашедшего выход - затаптывают первым..
R71MT вне форума   Ответить с цитированием
Старый 25.11.2017, 13:18   #8
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,152
Репутация: 938
По умолчанию

Код:

C:\debug
-a
0CA1:0100    jmp  short 200  ;<-- 3 байта
0CA1:0103    jmp  near  220  ;<-- 3 байта
0CA1:0106    jmp  far   250  ;<-- 5 байтов
0CA1:010B

__________________
Нашедшего выход - затаптывают первым..
R71MT вне форума   Ответить с цитированием
Старый 25.11.2017, 15:38   #9
MyName-Name-MyName
 
Регистрация: 15.11.2017
Сообщений: 7
Репутация: 10
По умолчанию

Идея была в том, что бы провести тесты. Как данная конструкция будет работать по сравнению с базой адресов из dd пространства.

Мысль заключалась в том, что мы выбираем на сколько прыгнуть вперёд, что бы с того места прыгнуть к нужному месту.

dd реализует такой asm код
Код:

Project71.dpr.303: dd  @@ToTo,@@Move1,@@Move2,@@Move3,@@Move4,@@Move5,@@Move6,@@Move7,@@Move8,@@Move9,@@Move10,@@Move11,@@Move12,@@Move13,@@Move14,@@Move15,@@Move16
0040AF87 B2B2             mov dl,$b2
0040AF89 40               inc eax
0040AF8A 00CB             add bl,cl
0040AF8C AF               scasd 
0040AF8D 40               inc eax
0040AF8E 00D7             add bh,dl
0040AF90 AF               scasd 
0040AF91 40               inc eax
0040AF92 00E4             add ah,ah
0040AF94 AF               scasd 
0040AF95 40               inc eax
0040AF96 00F8             add al,bh
0040AF98 AF               scasd 
0040AF99 40               inc eax
0040AF9A 0003             add [ebx],al
0040AF9C B040             mov al,$40
0040AF9E 0015B0400028     add [$280040b0],dl
0040AFA4 B040             mov al,$40
0040AFA6 0039             add [ecx],bh
0040AFA8 B040             mov al,$40
0040AFAA 0048B0           add [eax-$50],cl
0040AFAD 40               inc eax
0040AFAE 005EB0           add [esi-$50],bl
0040AFB1 40               inc eax
0040AFB2 0075B0           add [ebp-$50],dh
0040AFB5 40               inc eax
0040AFB6 008AB040009F     add [edx-$60ffbf50],cl
0040AFBC B040             mov al,$40
0040AFBE 00BBB04000D8     add [ebx-$27ffbf50],bh
0040AFC4 B040             mov al,$40
0040AFC6 00F1             add cl,dh
0040AFC8 B040             mov al,$40
0040AFCA 000F             add [edi],cl
0040AFCC B658             mov dh,$58
0040AFCE FF885AFFE9DB     dec dword ptr [eax-$241600a6]
0040AFD4 0200             add al,[eax]
0040AFD6 000F             add [edi],cl
0040AFD8 B758             mov bh,$58
0040AFDA FE6689           db $fe $66 $89 
0040AFDD 5A               pop edx
0040AFDE FEE9             db $fe $e9 
0040AFE0 CE               into 
0040AFE1 0200             add al,[eax]
0040AFE3 000F             add [edi],cl
0040AFE5 B758             mov bh,$58
0040AFE7 FE0F             dec byte ptr [edi]
0040AFE9 B648             mov dh,$48
0040AFEB FD               std

MyName-Name-MyName вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jmp на абсолютный адрес Sam Gold Assembler 15 02.02.2015 10:18
JMP DWORD PTR [PAddress] - как узнать адрес Enkee Assembler 1 03.11.2011 13:14
команда jmp 777user777 Assembler 1 31.07.2011 00:28
Сгенерировать опкод JMP near 32bit Tronix Assembler 8 08.02.2011 00:34
jmp illegal descriptor type 0 deHimer Assembler 6 06.01.2010 16:30


07:36.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru