Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 722
от 13.05.2004, 08:00

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 5267
Отправлено ответов: 14496
Активность: 275.2 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

_vt
Статус: Профессиональный
Общий рейтинг: 118.52
[Подробней >>]
Евгений Иванов
Статус: Профессиональный
Общий рейтинг: 133.38
URL: Super Assembler Software
Телефон: НСС +7 831 3107039
[Подробней >>]
Acid Burn
Статус: Доверительный
Общий рейтинг: 128.46
[Подробней >>]
 
Pawel
Статус: Профессиональный
Общий рейтинг: 156.06
[Подробней >>]
Artemy
Статус: Опытный
Общий рейтинг: 112.07
Телефон: 8 905 549 38 66
[Подробней >>]
Dragoon
Статус: Начальный
Общий рейтинг: 107.07
[Подробней >>]
 
Foamplast
Статус: Профессиональный
Общий рейтинг: 147.84
URL: мой личный сайт
[Подробней >>]
Стас
Статус: Начальный
Общий рейтинг: 123.07
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 109.09
[Подробней >>]
 
Ayl
Статус: Профессиональный
Общий рейтинг: 116.58
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 5234. К вопросу № 5189 - это процедура сжатия буфера с цветным изображением в буфер с черно-белым изображе... (ответов: 1)
Вопрос № 5235. Здравствуйте! Спасибо всем кто пытался помоч. _vt программа работает как под XP,так и под Win98,но п... (ответов: 2)
Вопрос № 5236. Здравствуйте!!! Не могу посмотреть фильм.Стоит кодек ffdshoy. Что делать???... (ответов: 3)
Вопрос № 5237. Здравствуйте, уважаемые гуру! Возникла необходимость в программе обмена файлами между двумя компами ... (ответов: 1)
Вопрос № 5238. Уважаемые эксперты, у меня такой вопрос: Возможно ли из программы, загруженной в память, создать экз... (ответов: 2)
Вопрос № 5239. Здравствуйте, уважаемые эксперты! Заранее извините за возможно глупый вопрос, т.к. опыта в программи... (ответов: 2)
Вопрос № 5241. День добрый! Под досом не было проблем с получение случайного числа - взял показания таймера и обраб... (ответов: 4)
Вопрос № 5242. Здравствуйте Подскажите, пожалуйста, как работать(программировать) с USB-портом. А то уже год ищу (х... (ответов: 2)
Вопрос № 5243. ув.эксперты возникла необходимость в программе узнать линк ее вызвавший т.е. из меню пускпрограммыпр... (ответов: 2)
Вопрос № 5244. Здравствуйте, эксперты. Я тут решил написать программку, которая делает следующее: создаёт две функц... (ответов: 5)
Вопрос № 5245. Как процессор определяет, что он работает с числами со знаком или без знака?... (ответов: 9)

Вопросов: 11, ответов: 33


 Вопрос № 5234

К вопросу № 5189 - это процедура сжатия буфера с цветным изображением в буфер с черно-белым изображением. Отправьте кто-нибудь в рассылку



Вопрос отправлен: 06.05.2004, 23:01
Отправитель: Raptor

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Приветствую Вас, Raptor!
OK :)
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 09.05.2004, 01:18
Отправитель: _vt


 Вопрос № 5235

Здравствуйте!
Спасибо всем кто пытался помоч.
_vt программа работает как под XP,так и под Win98,но под Win98 по окончании программы она виснет и чтоб запустить
ее снова приходится закрыть окно и открыть новое.В XP ,как я уже говорил, все работает,но при повторном запуске
получается ошибка"Процессор NTVDM обнаружил недопустимую инструкцию".То что в программе ошибка _vt я знаю
и без твоей помощи-мне надо знать где она.В программе у меня не используются одновременно разные способы обращения к железу - к клавиатуре буффер клавиатуры, обработчик int9 не ставлю напрмую,а при этом обработчик int1с стоит через функцию DOS.
Все это были лишь пробные варианты так как по-нормальному все работает как я в начале письма описал.
Если ты не компетентен или тебе лень просмотреть программу-так и скажи :),но не надо говорить
что программа не работает из-за корявого оформления.
Обработчик int09h с проверкой буфера клавиатуры не работает и в пробной программе - отдельно от основного
кода.Ты бы лучше написал маленький пример такого обработчика int09,который бы обрабатывал например
клавиши с помощью буфера клавиатуры,но в готовой программе-чтоб можно было убедиться что он работает.

С ув.
Роберт


Приложение:


Вопрос отправлен: 06.05.2004, 23:26
Отправитель: Robert

[Следующий вопрос >>] [Список вопросов]

Отвечает Евгений Иванов

Добрый день, Robert!
Когда ты восстанавливаешь вектор 9-го прерывания, DS неправилен. Ошибка, проверь и исправь.
И зачем в обработчике ты делаешь такую работу?!
Это же затормозит систему.
Надо, чтобы аппаратные обработчики были быстрыми.
И в обработчике 1Сh прерывания вот это делать
mov al,20h
out 20h,al
не надо!
Ни в коем случае!
Поиграл в твою игрушку. ;)
Класс!!
Молодчина!
Для детей - самое оно!!
Лучше всяких стрелялок.
И математике учит.
Удачи!
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 08.05.2004, 19:03
Отправитель: Евгений Иванов


Отвечает _vt

Доброе время суток, Robert!
> То что в программе ошибка _vt я знаю и без твоей помощи-мне надо знать где она
> но не надо говорить что программа не работает из-за корявого оформления.
Если тебе "надо знать" - то сам и ищи, а если ты обращаешься к кому-то за помощью - будь добр, оформи по-человечески свой шедевр. Мне проще написать заново твою программу, чем ковыряться в корявом листинге.
В общем, одну ошибку я нашел - обработчик прерывания 1C не восстанавливается после выхода из твоей программы. Где ты его восстанавливаешь - искать нету никакого желания. Именно из за него, нельзя запустить любую DOS-задачу в консоли ХР после выхода.
> Ты бы лучше написал маленький пример такого обработчика int09
Я тебе лучше вышлю то, что мне понадобилось написать, для проверки твоей программы. Пока я вспоминал, как устанавливать обработчик прерывания, проявлялись все те же симптомы, как в твоей программе. В таком виде - работает. Пришлось половину твоей программы переписать. ;-) И все же, ИМХО, тебе ни к чему перехватывать int 09h.=)
E-Man : Life begins at 1000Mhz!


Приложение:

Ответ отправлен: 07.05.2004, 07:09
Отправитель: _vt


 Вопрос № 5236

Здравствуйте!!!
Не могу посмотреть фильм.Стоит кодек ffdshoy.
Что делать???



Вопрос отправлен: 07.05.2004, 00:12
Отправитель: Андрей

[Следующий вопрос >>] [Список вопросов]

Отвечает Евгений Иванов

Добрый день, Андрей!
Браться за изучение Ассемблера! %-)
И написать кодек, чтобы правильно распаковывал.
Применять только MMX команды или лучше SSE.
Хотя SSE2 будут быстрее. Они же 128-битные с плавающей точкой.
Точка плавает в кефире
..

* EMan: -=- Любовь существует! =-=


Ответ отправлен: 08.05.2004, 19:20
Отправитель: Евгений Иванов


Отвечает Acid Burn

Приветствую Вас, Андрей!
А молиться не пробывал!!! =) А вось поможет!
Ты не туда обратился, но всеже поможем...
Удаляй этот кодек нафиг, и ставь либо отдельный DivX 5.x либо набор кодеков типа K-lite codek pack.


Ответ отправлен: 08.05.2004, 22:44
Отправитель: Acid Burn


Отвечает Pawel

Приветствую Вас, Андрей!
ЗАСТРЕЛИТЬСЯ!!! :)))
Ну во-первых, ты название рассылки то прочитал???!!!
Во-вторых, в каком формате фильм(avi,mpg,mov...)?
В-ретьих, какой прогой сжат фильм???


Ответ отправлен: 07.05.2004, 21:26
Отправитель: Pawel


 Вопрос № 5237

Здравствуйте, уважаемые гуру!
Возникла необходимость в программе обмена файлами между двумя компами по модему в пакетном режиме. Конкретнее, один комп-клиент инициирует связь с компом-сервером, передает файлы в свою определенную папку и забирает другие тоже из своей определенной папки. В Инете нашел только такие, которые работают в интерактивном, но не в пакетном режиме ;(
Просьба либо дать линк на подходящую готовую программу, либо подсказать, как пишутся подобные проги (программы клиента и сервера).
Заранее признателен, Валера.



Вопрос отправлен: 07.05.2004, 07:14
Отправитель: Валера (sp999@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Artemy

Добрый день, Валера!
Посмотри какой-нибудь софт для FIDO... что-нибудь типа TMAIL, да и FIPS тоже скорее всего подойдет.
Ссылки сам поищи...

Ответ отправлен: 07.05.2004, 11:27
Отправитель: Artemy


 Вопрос № 5238

Уважаемые эксперты, у меня такой вопрос:
Возможно ли из программы, загруженной в память, создать экзешник(PE-файл, Windows)
т.е.
в память грузится программа, тело которой зашифровано(наверно, т.к. при дизассемблировании получаю не код, а набор констант)
дак вот, может можно как-то получить екзешник этой проги в открытом виде
Смежные вопросы: :)
1. Чем отличается прога на диске и в памяти?
наверно PE-заголовок не грузится в память, а служит для настройки какого-нибудь контекста, т.е. его надо заного генерить?
2. Насколько я помню, всякие дизассемблеры и отладчики могут дампить процесс прямо из памяти?
я так понимаю самый крутой - IDA, а он это умеет?
какие еще вы знаете хорошие?(я пробовал IDA, OllyDbg, Win32Dasm - давно это было)
И как все-таки получить из этого экзешник?
3. Какими функциями эти отладчики дампят чужой процесс, т.е. читают чужую (виртуальную?) память?
Так можно прочитать любую память у любого процесса или при создании программы чтение из др. процесса можно запретить?
Вроде можно задавать секции на Read,Write,Execute?
только вот кому это можно/нельзя делать - самой проге или всем?
P.S.
давно я этим не занимался, под рукой нет описания ни PE-формата, ни процесса загрузки проги в память
и отладчики тоже не установлены



Вопрос отправлен: 07.05.2004, 09:20
Отправитель: danver

[Следующий вопрос >>] [Список вопросов]

Отвечает Евгений Иванов

Доброе время суток, danver!
Хорошая мысль.
Есть такая программа - UnExe.
Она для ДОС.
Не знаю, есть ли сейчас новая версия этой программы для Win, но стоит попробовать.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 08.05.2004, 19:20
Отправитель: Евгений Иванов


Отвечает Pawel

Приветствую Вас, danver!
0)Да.
Можно использовать отладчик или распаковщики.
1) Что такое "прога"(com,pe,mz,elf)?
Чаще всего структурой.
2) IDA крут!!!
Получить ехе из дампа памяти? Это зависет от формата ехе (mz,pe). Если делать вручную, то это достаточно трудоёмко.


Ответ отправлен: 07.05.2004, 21:33
Отправитель: Pawel


 Вопрос № 5239

Здравствуйте, уважаемые эксперты!
Заранее извините за возможно глупый вопрос, т.к. опыта в программировании на Асме у меня пока мало.
В Си есть такая функция RegisterServiceProcess.
Я так понял (может даже правильно), что она регистрирует процесс, как сервис. (Интересно, что это значит, т.е. что такое сервис?)
Так вот, САМОЕ главное - в результате этой регистрации программа пропадает из списка, вызываемого по "Ctrl-Alt-Del" (по крайней мере так тут пишут ...).
Искал эту функцию в библиотеках masm32, и ... не нашел!
Видимо эта функция реализована в Си или в стандартных API имеет несколько иное имя.
ВОПРОС: Как создать эту функцию, используя стандартные(ую) API?
или по-другому: Как прогу на Асме скрыть от "Ctrl-Alt-Del"?



Вопрос отправлен: 07.05.2004, 20:29
Отправитель: Коля

[Следующий вопрос >>] [Список вопросов]

Отвечает Pawel

Добрый день, Коля!
Ну RegisterServiceProcess это не Функция Си а вункция WinAPI.
RegisterServiceProcess работает ТОЛЬКО в Win9*.
На вопрос Как прогу скрыть от "Ctrl-Alt-Del"? очень много ответов, и они не раз уже говорились в рассылке.
Function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer;
external 'KERNEL32.DLL';

Ответ отправлен: 07.05.2004, 21:45
Отправитель: Pawel


Отвечает _vt

Здравствуйте, Коля!
Сначала - описание из MSDN:
========
RegisterServiceProcess
The RegisterServiceProcess function registers or unregisters a service process. A service process continues to run after the user logs off.
To call RegisterServiceProcess, retrieve a function pointer using GetProcAddress on KERNEL32.DLL. Use the function pointer to call RegisterServiceProcess.
DWORD RegisterServiceProcess(
DWORD dwProcessId,
DWORD dwType
);
Parameters
dwProcessId
Specifies the identifier of the process to register as a service process. Specifies NULL to register the current process.
dwType
Specifies whether the service is to be registered or unregistered. This parameter can be one of the following values.
Value Meaning
0 Unregisters the process as a service process.
1 Registers the process as a service process.
Return Values
The return value is 1 if successful or 0 if an error occurs.
========
> Как создать эту функцию, используя стандартные(ую) API?
Загрузить ее из KERNEL32.DLL через LoadLibrary()/GetProcAdress().
> Как прогу на Асме скрыть от "Ctrl-Alt-Del"?
С использованием функции RegisterServiceProcess() можно скрыться только в Win9x. В NT-системах необходимы hook-и на некоторые системные функции, в частности NTQuerySystemInformation. На Wasm.Ru есть пример.
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 09.05.2004, 01:19
Отправитель: _vt


 Вопрос № 5241

День добрый!
Под досом не было проблем с получение случайного числа - взял показания таймера и обрабатывай их.
А вот под винду все никак не могу найти функцию, которая это делает(случайное число).



Вопрос отправлен: 08.05.2004, 16:49
Отправитель: a111 (a111_666@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Евгений Иванов

Добрый день, a111!
См архив и вопрос 5174.
привожу его здесь ;))
Ей, люди?!
А я чего-то не понимаю, кто-нибудь читает архив рассылки?!
Зачем он тогда вообще нужен?!
Или вы вообще думаете, тут вам всё напишут, вам только пиши программу и продавай? :))
Читать надо больше, дорогие мои.
sub ah,ah ;Установим начальное RND
int 1Ah
mov wptr [bp+Seed-dat],dx
mov wptr [bp+Seed+2-dat],cx

;Мощный генератор случайных чисел. IN -> AX-range; OUT -> AX-число 0...AX-1;
;Взят из C++;
proc Rnd ;=========================================================
push bx cx dx ax
mov bx,3
mov cx,43FDh
mov ax,wptr [bp+Seed-dat]
mov dx,wptr [bp+Seed+2-dat]
push bx ax
or bx,dx
mov bx,cx
jnz rnd_1_1
mul bx
pop ax bx
jmp rnd_1_2

rnd_1_1:
mul bx
mov cx,ax
pop ax dx
push ax
mul dx
add cx,ax
pop ax
mul bx
add dx,cx
rnd_1_2:
add ax,9EC3h
adc dx,26h
mov wptr [bp+Seed-dat],ax
mov wptr [bp+Seed+2-dat],dx
mov ax,dx
and ah,127
pop cx
cwd
idiv cx
mov ax,dx
pop dx cx bx
ret
endp
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 08.05.2004, 19:24
Отправитель: Евгений Иванов


Отвечает Acid Burn

Приветствую Вас, a111!
Если у тебя есть книга Зубкова "Ассемблер для Windows..." то посмотри ее, в ней есть специальная глава "Генерация случайных чисел" - вот там есть несколько примеров. Я посоветовал бы вам скачать эту книгу... она поможет решить многие проблемы!


Ответ отправлен: 08.05.2004, 22:30
Отправитель: Acid Burn


Отвечает Dragoon

Здравствуйте, a111!
А какие собственно проблемы? Просто получай системное время
запросом у Windows'а c помощью GetSystemTime или GetLocalTime.

Ответ отправлен: 10.05.2004, 11:56
Отправитель: Dragoon


Отвечает Foamplast

Доброе время суток, a111!
Я использую CryptGenRandom() из advapi32.dll. Она заполняет буфер случайными числами, причём гарантируются определённые свойства этой поледовательности для всего буфера в целом. Перед её вызовом необходимо будет вызвать CryptAcquireContext().


Ответ отправлен: 11.05.2004, 22:08
Отправитель: Foamplast


 Вопрос № 5242

Здравствуйте
Подскажите, пожалуйста, как работать(программировать) с USB-портом. А то уже год ищу (хотя и не очень активно) и найти абсолютно ничего не смог.



Вопрос отправлен: 08.05.2004, 21:05
Отправитель: RusWin (Raznoe@nvkz.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает Pawel

Добрый день, RusWin!
Используй OUT , IN :)
Описания USB портов есть на http://www.usb.org/

Ответ отправлен: 10.05.2004, 21:07
Отправитель: Pawel


Отвечает _vt

Добрый день, RusWin!
Сюда заходил?
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 09.05.2004, 01:20
Отправитель: _vt


 Вопрос № 5243

ув.эксперты возникла необходимость в программе узнать линк
ее вызвавший т.е. из меню пускпрограммыпрогпрог.lnk.
Есть ли возможность это сделать т.к. командная строка не катит виндоуз подставляет свою.
сенкс.



Вопрос отправлен: 08.05.2004, 22:09
Отправитель: arthy

[Следующий вопрос >>] [Список вопросов]

Отвечает Pawel

Здравствуйте, arthy!
Можно но,только используя HOOK.


Ответ отправлен: 10.05.2004, 21:09
Отправитель: Pawel


Отвечает _vt

Доброе время суток, arthy!
Если я правильно понял задачу, то это сделать невозможно. Да и это ни к чему.
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 09.05.2004, 01:19
Отправитель: _vt


 Вопрос № 5244

Здравствуйте, эксперты.
Я тут решил написать программку, которая делает следующее:
создаёт две функции 60-го прерывания:
нулевая выполняет очистку экрана;
первая вводит 4-х байтное число с экрана в пару регистров AX,DX.
Вообще, это мне удалось (я приложил текст программки)
Дальше я захотел, чтобы эти обработчики прерываний стали резидентными, но вот здесь что-то не заладилось (текст прилагаю). Когда я пошагово исполняю тестовую программку через TD, система выдаёт ошибку (Процессор NTDVM обнаружил недопустимую инструкцию CS:0000 IP:0077 OP:f0 37 05 10 02). Помогите разобраться, где я допустил ошибку, или если не очень сложно предложите свой вариант решения задачи.
К слову, мне главное разобраться в том, как написать резидентный обработчик прерывания 60h, в котором вызываются другие прерывания.
Я пробовал написать кусок этой программки (очистку экрана), переопределяя 21h - всё получалось. Может проблема в 60h?
Заранее благодарен.
Евгений.


Приложение:


Вопрос отправлен: 09.05.2004, 00:42
Отправитель: Евгений

[Следующий вопрос >>] [Список вопросов]

Отвечает Pawel

Здравствуйте, Евгений!
60-е прерывание зарезервировано системой!

Ответ отправлен: 10.05.2004, 21:11
Отправитель: Pawel


Отвечает Евгений Иванов

Приветствую Вас, Евгений!
96-ое прерывание используется уже.
Используй другое, начиная с 135-го.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 09.05.2004, 11:27
Отправитель: Евгений Иванов


Отвечает Стас

Здравствуйте, Евгений!
Все работает, за исключением:
lea dx,cs:namepar
call dword ptr cs:[int_21h_vect]
DS продолжает указывать другой сегмент, и буффер ввода строки может оказаться незвестно где.
Кроме того непонятно зачем использовать call dword ptr cs:[int_21h_vect], чем тебя не устраивает Int 21(и int10)? Эффект тот же только о PUSHF перед каждым CALL делать не нужно.
Кроме того перевод из символов в число какой-то корявый, посмотри твой же вариант, но облегченный.
И наконец такая деталь: если прерывание до этого не использовалось, то по адресу 0:60h*4 лежат нули, которые ты подставишь своему jmp dword ptr cs:[int_60h_vect]. JMP 0:0 ничего хорошего не даст.
Удачи.

Приложение:

Ответ отправлен: 09.05.2004, 22:54
Отправитель: Стас


Отвечает _vt

Доброе время суток, Евгений!
Вызывай в резиденте прерывания 10h и 21h нормальным способом (int 10h, int 21h) и работать будет правильно. В 60h проблем нету - это прерывание как раз свободно для таких целей.
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 11.05.2004, 04:10
Отправитель: _vt


Отвечает Foamplast

Здравствуйте, Евгений!
Первое, что бросается в глаза - Вы запускаете программу, написанную для одной операционной системы под другой системой. (для ДОС под Уиндовс).


Ответ отправлен: 11.05.2004, 22:08
Отправитель: Foamplast


 Вопрос № 5245

Как процессор определяет, что он работает с числами со знаком или без знака?



Вопрос отправлен: 09.05.2004, 07:52
Отправитель: Tiana (ptaniya@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Dragoon

Доброе время суток, Tiana!
А он и не определяет. Для чисел со знаком и без знака сложение и вычитание выполняется одинаково (add и sub).
Для умножения и деления есть особые команды (idiv и imul),
правда они выполняются несколько дольше обычных.

Ответ отправлен: 10.05.2004, 11:52
Отправитель: Dragoon


Отвечает Стас

Добрый день, Tiana!
Никак. Процессору все равно что обрабатывать и как. Все определяет команда которую вы даете процессору.

Ответ отправлен: 09.05.2004, 20:57
Отправитель: Стас


Отвечает Pawel

Добрый день, Tiana!
Он не определяет.

Ответ отправлен: 10.05.2004, 21:13
Отправитель: Pawel


Отвечает Евгений Иванов

Здравствуйте, Tiana!
Есть соглашения. Есть бит знака (старший самый).
Есть команды проверки, они учитывают диапазон чисел со знаком.
Например, байт от -128 до +127.
То есть, числа все одинаковые, без знака. Это только от команды зависит, учитывать бит знака, или нет. См. справочник по команде, там будет выделено.

* EMan: -=- Любовь существует! =-=


Ответ отправлен: 09.05.2004, 11:27
Отправитель: Евгений Иванов


Отвечает vitya

Доброе время суток, Tiana!
Никак.

Ответ отправлен: 09.05.2004, 10:10
Отправитель: vitya


Отвечает _vt

Приветствую Вас, Tiana!
Для процессора существует обычная арифметика (байтом кодируются числа 0..255) и дополнительная - для чисел со знаком (-127..+127). Инструкции процессора, работающие со числами имеющими знак, при выполнении арифметических действий изменяют флаг знака в регистре флагов. Остальные инструкции работают с обычными числами. Сам процессор никак не определяет, с какими числами он работает.
E-Man : Life begins at 1000Mhz!


Ответ отправлен: 11.05.2004, 04:10
Отправитель: _vt


Отвечает Ayl

Приветствую Вас, Tiana!
А никак. Зависит от используемых команд.
Для сложения и вычитания ему вообще пофигу.
А для умножения и деления есть парные команды - mul и imul, div и idiv.


Ответ отправлен: 11.05.2004, 17:28
Отправитель: Ayl


Отвечает Foamplast

Здравствуйте, Tiana!
Классный вопрос. Никак.
Всё зависит от того, как их рассматривать. В следующем примере переход Jg произойдёт, а Ja - нет.
Mov     Eax, 0x00000001
Mov Ecx, 0xffffffff
Cmp Eax, Ecx
Jg .ifgreater
Ja .ifabove

Дело в том, что условие g в составе условных команд Jg, Cmovg и им подобных рассматривает числа как знаковые, таким образом Eax=1, а Ecx=-1 и Eax > Ecx. А вот условие a рассматривает числа как беззнаковые, таким образом Eax=1, а Ecx=4294967295, поэтому Eax < Ecx.

Это не относится к числам FPU. В них знак числа указывается явно. Т.е. если старший бит (обычно 79-й, 63-й или 31-й) установлен, то число отрицательное, иначе - положительное.




Ответ отправлен: 11.05.2004, 22:08
Отправитель: Foamplast


Отвечает Acid Burn

Добрый день, Tiana!
Он и не определяет... для разных видов чисел есть спец. команды.

Ответ отправлен: 12.05.2004, 15:10
Отправитель: Acid Burn



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (25)
C / C++ (15)
Perl (4)
Builder / Delphi (19)
Pascal (20)
Basic / VBA (4)
Java / JavaScript (4)
PHP (12)
Криптография (8)
WinAPI (10)
Радиоэлектроника (5)
Пользователю
Windows 95/98/Me (35)
Windows NT/2000/XP (51)
"Железо" (27)
Поиск информации (14)
Администратору
Windows NT/2000/XP (26)
Linux / Unix (9)
Юристу
Гражданское право (10)
Семейное право (7)
Трудовое право (9)
КоАП (6)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное