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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2017, 12:54   #1
MyName-Name-MyName
 
Регистрация: 15.11.2017
Сообщений: 7
По умолчанию 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, 14:12   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

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

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

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

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

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

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

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

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

Цитата:
Сообщение от 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/C++/Python/VBA(Excel): asmlabs.ru
7in вне форума Ответить с цитированием
Старый 25.11.2017, 12:12   #7
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

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

Код:
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, 14:38   #9
MyName-Name-MyName
 
Регистрация: 15.11.2017
Сообщений: 7
По умолчанию

Идея была в том, что бы провести тесты. Как данная конструкция будет работать по сравнению с базой адресов из 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 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jmp на абсолютный адрес Sam Gold Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 15 02.02.2015 09:18
JMP DWORD PTR [PAddress] - как узнать адрес Enkee Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 03.11.2011 13:14
команда jmp 777user777 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 31.07.2011 00:28
Сгенерировать опкод JMP near 32bit Tronix Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 07.02.2011 23:34
jmp illegal descriptor type 0 deHimer Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 06.01.2010 15:30