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

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 659
от 18.01.2007, 15:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 375, Экспертов: 32
В номере:Вопросов: 4, Ответов: 9


Вопрос № 70663: Привет... Работаю с FPU... Не знаю как считать флаги регистра состояний SR... Вот регистр SR: | В С3 TOP С2 С1 С0 ES РЕ UE ОЕ ZE DE IE | Нашел вот такую команду: FSTSW AX - Сохраняет текущее значение регистра SR в пр...
Вопрос № 70666: Помогите начинающему программисту как правильно откомпилировать и получить COM-файл в MASM611.Просьба разложите пример 1-ый из книги "Ассемблер это просто!" по полочкам непосредственно запуск MASM611 и получение COM-файла.Спасибо!...
Вопрос № 70695: Уважаемые эксперты! Почему максимальное значение SP равно FFFE, а не FFFF ? И что находится в FFFF ? ...
Вопрос № 70741: Привет экспертам... Я недавно давал вопрос - как считать флаги регистра SR сопроцессора... увидел ответы и понял, что не во всей полноте поставил вопрос... написал пояснение в мини-форуме - ответа пока нет... ID моего вопроса 70663. Дайт...

Вопрос № 70.663
Привет...

Работаю с FPU...
Не знаю как считать флаги регистра состояний SR...
Вот регистр SR:
| В С3 TOP С2 С1 С0 ES РЕ UE ОЕ ZE DE IE |

Нашел вот такую команду:
FSTSW AX - Сохраняет текущее значение регистра SR в приемник (регистр АХ или 16-битная переменная)...пол дела СДЕЛАНО...

Как мне эти биты повыдерать с регистра AX и записать в выделенные под них переменные?...Или может быть есть другой способ решить данную задачу?

Заранее спасибо...
Отправлен: 12.01.2007, 18:08
Вопрос задал: BugZex (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Олег Владимирович
Здравствуйте, BugZex!

Да, первый шаг сделан - FSTSW AX.
А можно вопрос - зачем выделять по одному байту на каждый однобитный флаг?
(Россия - щедрая душа :), но всё же)
Их можно проверять прямо в AX по мере надобности. Удобно пользоваться командой TEST AX,0020h, допустим. Она, не меняя операндов, устанавливает флаги так же, как и AND AX,20h. Так что если бит 5 (PE) в AX установлен, она сбросит ZF; если бит 5 в AX сброшен, получится ZF=1.

Если проверка нужна после сравнения (FCOM и т.п.), применяйте FSTSW AX и следом за ней SAHF, копирующую AH в младший байт регистра флагов. После них можно применять те же команды перехода, что и при сравнении беззнаковых.

Удачи!
---------
Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: 10-ый класс)
Ответ отправлен: 12.01.2007, 18:31

Отвечает: Евгений Иванов
Здравствуйте, BugZex!

Это флаги. Используй команду TEST для взятие их значений.

TEST EAX,1
JNZ установлен
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +78313145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 12.01.2007, 18:35

Отвечает: ramok
Здравствуйте, BugZex!

флаги не принято "выдергивать и записывать в выделенные под них переменные".
с флагами обычно работают с помощью команд булевых операций and(И), or(ИЛИ), xor(Исключающее ИЛИ) или специальные команды типа test. В сочетании с командами условного перехода jz, jnz и так далее.

Посмотрире в своем учебнике главу по перечисленным командам
Ответ отправил: ramok (статус: 8-ой класс)
Ответ отправлен: 12.01.2007, 19:01

Отвечает: Лысков Игорь Витальевич
Здравствуйте, BugZex!
В случае языка С и ASM вставок:
Запиши в байтовую переменную bRes значение AH после FSTSW AX
Определи имена битов
#define SF 0x80
#define ZF 0x40
#define AF 0x10
#define PF 0x04
#define CF 0x01
И анализируй при помощи команд типа
IF (bRes & ZF) ... // взведен флаг Z

PS Можно сохранить и AX в слове, потом анализировать биты слова
---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 15.01.2007, 10:50


Вопрос № 70.666
Помогите начинающему программисту как правильно откомпилировать и получить COM-файл в MASM611.Просьба разложите пример 1-ый из книги "Ассемблер это просто!" по полочкам непосредственно запуск MASM611 и получение COM-файла.Спасибо!
Отправлен: 12.01.2007, 18:20
Вопрос задал: Koks777 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: IceWolf
Здравствуйте, Koks777!
Посмотрите вот эти ответы:
http://rusfaq.ru/info/Question/68300
http://rusfaq.ru/info/question/66551
http://rusfaq.ru/info/question/63325
С уважением, IceW0|f.
---------
Идеальных защит не существует, ибо то, что создано человеческим разумом, им же будет и разрушено!
Ответ отправил: IceWolf (статус: 6-ой класс)
Ответ отправлен: 13.01.2007, 02:44
Оценка за ответ: 5
Комментарий оценки:
Спасибо,очень рад.Живу в Казахстане и советоваться не с кем.


Вопрос № 70.695
Уважаемые эксперты!
Почему максимальное значение SP равно FFFE, а не FFFF ?
И что находится в FFFF ?
Отправлен: 12.01.2007, 22:30
Вопрос задал: Andrej11 (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Олег Владимирович
Здравствуйте, Andrej11!

В стэк можно записывать и извлекать из него как минимум 2 байта сразу (заметьте, команды POP AL нету!).
Поэтому обычно в SP хранятся чётные числа.
Однако, в него вполне возможно поместить 0FFFFh, но POP AX тогда вызовет ошибку, ведь она попытается прочитать байт по адресу SS:10000h, а он не существует.

PS
Кстати, на мой взгляд, максимальное значение SP есть 0, означающее, что стэк размером 64К пуст.

Удачи!
---------
Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: 10-ый класс)
Ответ отправлен: 12.01.2007, 22:54

Отвечает: IceWolf
Здравствуйте, Andrej11!
Известно, что программу можно завершить(если вы не толкали ничего в стэк, или затем выровняли его) инструкцией ret. Эта инструкция извлекает из стека адрес и передаёт по нему управление. Так вот при запуске программы в стеке лежит число 0, поверьте в отладчике. Т.е. управление будет передано по адресу CS:0, а там находятся байты CD20-код INT 20h-завершение программы. Т.е. при старте стэк не пуст, там лежит 0, записаный туда загрузчиком.
С уважением, IceW0|f.

---------
Идеальных защит не существует, ибо то, что создано человеческим разумом, им же будет и разрушено!
Ответ отправил: IceWolf (статус: 6-ой класс)
Ответ отправлен: 13.01.2007, 02:25

Отвечает: Евгений Иванов
Здравствуйте, Andrej11!

Эти два эксперта ответили по большинству правильно, а именно то, что в стек записываются командой push сразу чётное число байт (4 или 2).

Но никакого максимального значения нет.

Если про размер стека, то он равен размеру установленного сегмента для стека и может быть любым значением от байта до 4 Гб.
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +78313145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 13.01.2007, 19:45


Вопрос № 70.741
Привет экспертам...

Я недавно давал вопрос - как считать флаги регистра SR сопроцессора... увидел ответы и понял, что не во всей полноте поставил вопрос... написал пояснение в мини-форуме - ответа пока нет...
ID моего вопроса 70663. Дайте ответ пожайлуста...
Отправлен: 13.01.2007, 13:55
Вопрос задал: BugZex (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: ramok
Здравствуйте, BugZex!

> Все не так ПРОСТО!....
> Я пишу на СИ ( BCB ) и делаю asm вставки...
| В С3 TOP С2 С1 С0 ES РЕ UE ОЕ ZE DE IE |
все советы остаются в силе. флаги сохраняются в переменную, после чего в коде С с помощью логических операндов проверять на наличие или отсутствие флага.
& это and (применятся для обнуления бит и проверки на наличие установленного бита)
| это or (используется для установки бит)
^ это xor (используется для инвертации нужных битов)

примерный пример в приложении

> Так как компилятор от Borland, то там нет команд условного перехода. Поэтому здесь надо как-то по другому поступить...
команды условного перехода во встроенном ассемблере борланда тоже есть.
пример 2 делает тоже что и 1 только силами ассемблера

Приложение:

Ответ отправил: ramok (статус: 8-ой класс)
Ответ отправлен: 13.01.2007, 17:02


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

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

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.40 beta от 14.01.2007
Яндекс Rambler's Top100

В избранное