Сейчас на форуме: tyns777, zds (+3 невидимых)

 eXeL@B —› Программирование —› Test EDI,1 сушествует ли короткий формат (3 байта?)
Посл.ответ Сообщение

Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 23 ноября 2009 19:18
· Личное сообщение · #1

???




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 23 ноября 2009 19:57
· Личное сообщение · #2

ты можешь сначала присвоить значение регистру, а потом использовать двухбайтную команду
Code:
  1. test reg32,reg32
  2.  
  3. 85C7     test         edi,eax


т.к. при размере операнда в дворд, код будет таким:
Code:
  1. F7C701000000      test edi,1


-----
EnJoy!





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 23 ноября 2009 20:24
· Личное сообщение · #3



Code:
  1. BT edi,00000001h


выглядит как
Code:
  1. 00477331      0FBAE7 01      BT EDI,1

длина 4

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 23 ноября 2009 20:30 · Поправил: _ruzmaz_
· Личное сообщение · #4

если это просто для условного перехода, то можно использовать
Code:
  1. D1DF       rcr   edi, 1

edi не сохраняется (хотя можно и восстановить через rcl), но зато 2 байта



Ранг: 0.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 ноября 2009 17:17
· Личное сообщение · #5

Code:
  1. and edi, 1 ; 3 байта





Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 24 ноября 2009 17:46
· Личное сообщение · #6

byteResearcher, тогда регистр EDI поменяется

-----
Лучше быть одиноким, но свободным © $me




Ранг: 38.7 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 24 ноября 2009 18:01
· Личное сообщение · #7

Судя по документации, варианта с единицей нет.



Ранг: 0.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 ноября 2009 19:36
· Личное сообщение · #8

BoRoV ну так нужно(если конечно есть нужда) учитывать это, на прямую не противоречит условию топикстартера, а нужен ему этот Edi после использования или нет - неизвестно, запихнуть в стек
Code:
  1. push Edi
  2. and Edi, 1
  3. pop Edi


По-необходимости, за-частую (на моем опыте проверено), что после проверки Edi ненужен,
так-что, Вывод: Если Edi не нужен то можно и не сохранять стек
или иначе




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 24 ноября 2009 20:34 · Поправил: Isaev
· Личное сообщение · #9

что-то я не понял что вы тут дружно решаете?
может просто
Code:
  1. dec EDI

и на нуль проверять?
зато 1 byte!

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 24 ноября 2009 20:53
· Личное сообщение · #10

Isaev
+10

а если требуется не менять EDI, можно на каждой ветке поставить INC EDI. Вот и будет решение в три байта.



Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 24 ноября 2009 21:00
· Личное сообщение · #11

Isaev пишет:
dec EDI

дык бит 0 надо проверить, если edi != 1 тогда неполучицца)

... и кстати
mak пишет:
BT edi,00000001h

надо BT edi,0




Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 24 ноября 2009 21:05 · Поправил: Sunzer
· Личное сообщение · #12

2 0xy а что дальше будешь делать? переход куда то или что?

А так Isaev все сказал

DEC EDI
JNZ \ JE




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 24 ноября 2009 21:51 · Поправил: Isaev
· Личное сообщение · #13

_ruzmaz_ пишет:
дык бит 0 надо проверить,

хз что надо!
0xy надо ждать, его идею не совсем просекли!
если надо бит 0, то ты уже написал
Code:
  1. rcr edi, 1
  2. или
  3. shr edi,1

2 байта
если результат важено сохранить значение регистра, то у makа наверное самый короткий вариант

PS: нет, можно сохранить значение регистра и проверить бит 0 в 2 byte!
изврат, но работает!

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 24 ноября 2009 22:01
· Личное сообщение · #14

Что надо по-моему очевидно. Явно не компилятор пишет. Видимо надо сделать патч чтобы был переход или ещё что-то, но существуют ограничения на патч кода по кол-ву байт. Тут зависит от конкретной ситуации, так что пока надо ждать топикстартера - пусть опишет саму проблему.




Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 24 ноября 2009 22:02 · Поправил: Sunzer
· Личное сообщение · #15

Да нет же, самый короткий вариант, если результат важен, если нет тогда отбросьте инкремент:

Code:
  1. DEC EDI
  2. JNZ \ JE loop
  3. INC EDI
  4. ...
  5. loop:
  6. INC EDI


Хотя может флаги разные будут возведены...
Смотря какие флаги важны ТС




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 24 ноября 2009 22:05
· Личное сообщение · #16

Code:
  1. 004445C5      57            PUSH EDI
  2. 004445C6      9D            POPFD

и проверяй флаг переноса!

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 67.4 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 24 ноября 2009 22:11
· Личное сообщение · #17

Isaev пишет:
Code:

004445C5      57            PUSH EDI004445C6      9D            POPFD


и проверяй флаг переноса!


+1, надо на заметку такой способ взять)



Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 24 ноября 2009 22:37
· Личное сообщение · #18

Isaev пишет:
004445C5      57            PUSH EDI
004445C6      9D            POPFD

+20
... но со строковыми операциями надо будет по-осторожней)




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 24 ноября 2009 22:46
· Личное сообщение · #19

И запороть флаг destination и хз, что ещё. Который потом отомстит на копировании строк. Казнить!
DEC EDI
JNZ \ JE loop
не эквивалетно test edi,1. Ибо последнее-проверка 1 бита, а не всего числа на 1.
Если ничего не портить, в 3 байта не уместится, я считаю.


 eXeL@B —› Программирование —› Test EDI,1 сушествует ли короткий формат (3 байта?)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати