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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.08.2011, 15:56   #1
DimitarSergius
Новичок
Джуниор
 
Аватар для DimitarSergius
 
Регистрация: 01.02.2008
Сообщений: 2
По умолчанию Использование регистров в Делфи

Извините за такой нубский вопрос:

Есть конструкция на асме:

TEST DH,080h //сравниваем DH с 080h
JE @MYPROG_0053F44B // прыгаем, если равно

Я сделал так
tmp:=copy(IntToHex(EDX,2),Length(In tToHex(EDX,2))-3,2);
if StrToInt('$'+tmp) >= $80

но специалист сказал, что это изврат и посоветовал вот так
if PByteArray(@EDX)^[2] >= $80
или
if (Byte(EDX shr 8) >= $80)
или
if Word(EDX and $FFFF0000) >= $8000

но так не работает... (может только у меня )

Я ведь правильно понимаю:
DimitarSerg / IREC
reversing...
DimitarSergius вне форума Ответить с цитированием
Старый 25.08.2011, 16:37   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> tmp:=copy(IntToHex(EDX,2),Length(In tToHex(EDX,2))-3,2);

это шо за паноптикум, какой ещё EDX на Паскале?

Если вы умудрились загнать в 32-битную переменную с именем EDX значение регистра EDX, и далее хотите проверить, а не содержат ли биты с 8 по 15 значение, похожее на $80, то делайте, как велит сердце:

Код:
if ($8000 = EDX and $0000FF00) then ...
а не как горе-специалисты.

Update: код ошибочный, см. ниже.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 25.08.2011 в 18:36.
veniside вне форума Ответить с цитированием
Старый 25.08.2011, 16:39   #3
D@rkD@iver
Форумчанин
 
Регистрация: 28.07.2009
Сообщений: 189
По умолчанию

а почему просто не открыть
Код:
asm
   TEST DH,080h //сравниваем DH с 080h
    JE @MYPROG_0053F44B // прыгаем, если равно
end;
и вся проблема
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com
D@rkD@iver вне форума Ответить с цитированием
Старый 25.08.2011, 17:38   #4
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
Я ведь правильно понимаю
Ну ты сам подумай, без "специалистов", каким образом в одном (!) двоичном разряде умудрится разместиться число 8, занимающее 4 (!) двоичных разряда ?)
mss вне форума Ответить с цитированием
Старый 25.08.2011, 17:54   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это не считая того что dh имеет размер 8-бит.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.08.2011, 18:35   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Че вы путаете человека, у него там полубайты нарисованы (по 4 бита каждый), как я понял, так что всё ОК. И значение $80 легко влазит в 8 бит.

Но, кстати, я сам протупил, и сбили меня дубовые комменты к коду:

Код:
TEST DH,080h //сравниваем DH с 080h
JE @MYPROG_0053F44B // прыгаем, если равно
Ничего там с 0x80 не сравнивается, и не переходит по равно.
Аналогичный код на Паскале (не придираясь к тому, что такое EDX и откуда оно взялось. Считаем, что там значение регистра EDX):

Код:
if (0 = EDX and $8000) then { тут кусок из MYPROG_0053F44B }
Т.е. переход, если 15-ый бит в EDX сброшен.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 25.08.2011, 19:04   #7
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
у него там полубайты нарисованы
Нарисованы черно-желтым по белому 8 бит регистра DH, в 3-м бите которого торчит восьмерка.
mss вне форума Ответить с цитированием
Старый 25.08.2011, 19:08   #8
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

я лично вижу так )

"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 25.08.2011, 19:10   #9
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Ну да, похоже и я протупил, согласен)
mss вне форума Ответить с цитированием
Старый 25.08.2011, 19:12   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если это полубайты, то тогда верно.

но код напрямую к регистрам не имеет доступа(я сейчас не про асм вставки)
то есть в итоге проще повторить код асм вставкой, или же переделать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Содержимое регистров maxwelldream Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 15.01.2011 09:28
использование swf картинок в делфи 7 Pein95 Общие вопросы Delphi 1 03.12.2010 02:05
ИСПОЛЬЗОВАНИЕ АССЕМБЛЕРА В ДЕЛФИ! IIIeneJI Помощь студентам 2 09.02.2010 17:12
много регистров nntpaha Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 22.12.2007 19:01