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

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


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

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

Выпуск № 548
от 17.09.2006, 18:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 351, Экспертов: 34
В номере:Вопросов: 5, Ответов: 6


Вопрос № 55074: Здравствуйте. Помогите пожалуйста разобраться с командами or и and, как ими пользоваться и зачем они нужны ? Сколько не читал про эти команды в книгах, нихрена не понял....
Вопрос № 55082: Здравствуйте ! Кто-нибудь знает как пользоваться функцией 50h прерывания 21h ? Ну и за одно функцией 49h....
Вопрос № 55114: Здравствуйте! Почему в Delphi eax, в Masm 6.11 ax?...
Вопрос № 55141: Здравствуйте! Расскажите пожалуйста че нибудь про работу с файлами. Как например записать в файл массив чисел или строку....
Вопрос № 55150: Добрый день уважаемые эксперты!Не судите строго за следующий вопрос начинающего ассемблировщика: CSEG segment org 100h Begin: mov ah,9 mov dx,offset Message int 21h int 20h Message db 'Hello, world!$' CSEG ends...

Вопрос № 55.074
Здравствуйте. Помогите пожалуйста разобраться с командами or и and, как ими пользоваться и зачем они нужны ? Сколько не читал про эти команды в книгах, нихрена не понял.
Отправлен: 11.09.2006, 20:11
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

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

Команды OR, AND, XOR выполняют побитовые операции ИЛИ, И, исключающее ИЛИ соответственно.
Их формат - <команда> <операнд 1>,<операнд 2>.
i-ый бит результата формируется из i-ых битов операндов в соответствии с таблицей:
оп1 0 0 1 1
оп2 0 1 0 1
OR 0 1 1 1
AND 0 0 0 1
XOR 0 1 1 0
Например, инструкция OR AL,DL при AL=15h и DL=78h записывает в AL число 7Dh, так как
AL=00010101
DL=01111000
рез=01111101.
Подобное на языке высокого уровня - AL = AL or DL;.

Немного о флагах.
- CF и OF всегда обнуляются
- ZF устанавливается только в случае, если результат = 0
- SF копирует старший бит результата
- PF устанавливается при чётном числе установленных битов в результате
- AF меняется непредсказуемым образом
- остальные флаги не меняются

Используются эти команды, например, для установки(OR), сброса(AND) и инвертирования(XOR) бит. Так, команда AND AL,0FCh сбрасывает 2 младших бита AL.

Команда XOR используется для обнуления регистров, например, XOR AX,AX. Выгода - в меньшем по сравнению с MOV AX,0 числе байт в машинном представлении.

Иногда возникает необходимость проверить значение регистра на ноль или на знак. Надо соответствующим образом установить флаги. Для этого можно применить AND AX,AX и переходы JZ, JS. Выгода опять-таки в меньшем по сравнению с CMP AX,0 размере машкода.

Удачи!
---------
Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: 3-ий класс)
Ответ отправлен: 11.09.2006, 20:52
Оценка за ответ: 5


Вопрос № 55.082
Здравствуйте ! Кто-нибудь знает как пользоваться функцией 50h прерывания 21h ? Ну и за одно функцией 49h.
Отправлен: 11.09.2006, 20:47
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 6)

Отвечает: Sergijj
Здравствуйте, Whiteman!

Цитата по int 21h fn 50h в приложении.
Цитата по int 21h fn 51h в приложении. Не... в приложение не вместилось...
Цитата по int 21h fn 49h в приложении.

Если нужно ещё что-нибудь - пишите.

Приложение:

---------
Стучитесь! И Вас откопают...

Ответ отправил: Sergijj (статус: 5-ый класс)
Ответ отправлен: 12.09.2006, 09:25
Оценка за ответ: 3
Комментарий оценки:
А по русски ?


Вопрос № 55.114
Здравствуйте!
Почему в Delphi eax, в Masm 6.11 ax?
Отправлен: 12.09.2006, 08:50
Вопрос задал: KuchumHan (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: ADSota
Здравствуйте, KuchumHan!

ЕАХ - 32-х битный регистр
АХ - 16-и битный регистр...

оба регистра есть и в MASM и в delphy...
---------
Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Специалист)
Ответ отправлен: 12.09.2006, 09:10
Оценка за ответ: 5


Вопрос № 55.141
Здравствуйте! Расскажите пожалуйста че нибудь про работу с файлами. Как например записать в файл массив чисел или строку.
Отправлен: 12.09.2006, 12:26
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

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

У прерывания INT 21h есть целый ряд функций по работе с файлами.
1. Создание файла
Параметры: AH=3Ch, CX=атрибуты файла (см. намного ниже), DS:DX=адрес ASCIIZ-строки с именем файла. Результаты: если флаг CF=1, то произошла ошибка (её код в AX), файл создать не удалось. Если же CF=0, то в AX содержится файловый манипулятор (ФМ), т.е. число, идентифицирующее файл. Созданный файл автоматически открывается для записи
2. Открытие файла
Параметры: AH=3Dh, AL=режим открытия (0-чтение, 1-запись), DS:DX-адрес ASCIIZ-строки с именем файла. Результат - если CF=1, то ошибка; иначе AX=ФМ.
3. Закрытие файла
Параметры: AH=3Eh, BX=ФМ.
4. Чтение из файла
Параметры: AH=3Fh, BX=ФМ, CX=число байт для чтения, DS:DX-адрес буфера для сохранения прчитанных данных.
Результаты: а) CF=1 - ошибка. б) CF=0. AX=число реально прочитанных байт. УВАГА! Попытка чтения за концом файла не приводит к ошибке, просто количество реально прочитанных символов полагается равным 0.
5. Запись в файл
Параметры: AH=40h, BX=ФМ, CX=число байт для записи, DS:DX-адрес записываемых данных.
Результаты: CF=1 - ошибка, иначе AX=число реально записанных байт
6. Стирание файла
Параметры: AH=41h, DS:DX-адрес ASCIIZ-строки с именем файла
7. Перемещение указателя чтения-записи в файле (все байты файла нумеруются с 0)
Параметры: AH=42h, AL=метод перемещения, BX=ФМ, CX:DX-знаковое смещение указателя в байтах.
Метод перемещения: 00-от начала файла, 01-от текущей позиции, 02-от конца файла
Результат:CF=1-error, else DX:AX-новое значение указателя
8. Чтение атрибутов файла
Параметры: AX=4300h, DS:DX-адрес ASCIIZ-строки с именем файла
Результат: CF=1 - ошибка, иначе
АТРИБУТЫ в CX: бит 0 - только чтение, бит 1 - скрытый, бит 2 - системный файл, бит 4 - каталог, бит 5 - архивный.
9. Запись атрибутов файла
Параметры: AX=4301h, CX=новые атрибуты, DS:DX-имя файла
Результаты: сигнал ошибки в CF

Теория кончилась. Пример использования этих функций - в приложении. Оно записывает в новоиспечённый файл строку mess.

УДАЧИ!..

Приложение:

---------
Факультет ПМ-ПУ - лучший в СПбГУ!

Ответ отправил: Олег Владимирович (статус: 3-ий класс)
Ответ отправлен: 12.09.2006, 22:26
Оценка за ответ: 5
Комментарий оценки:
Спасибо ! Сразу все понятно !


Вопрос № 55.150
Добрый день уважаемые эксперты!Не судите строго за следующий вопрос начинающего ассемблировщика:
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends
end Begin
если строка начинается с 109h нельзя ли mov dx,offset Message напиать после int 20h , ведь данная ф-ция выводит строку ds:dx какая разница когда я укажу ее смещение.Объясните строчку Message db 'Hello, world!$' каим образом 'Hello, world! переводиться в ASCII если просмотреть соответсвующие регистры там ASCII символы и что такое db!?
Отправлен: 12.09.2006, 13:32
Вопрос задал: Maksim,V,I/max (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Gluck3D
Здравствуйте, Maksim,V,I/max!
1) Написать mov dx,offset Message после int 20h нельзя, т.к тогда эта строка просто не выполнится. Вообще вам стоит посмотреть в литературе про то как работают прерывания. Для данного случая - 9 функция 21h прерывания выводит строку, адрес строки должен находится в dx - т.е перед прерыванием регистры должны быть сформированы! Если это сделать позже то функция получит неправильные параметры.
2) За вас это делает компилятор.
3) db - Define Byte - определить (задать) байт – директива для определения данных.
Ответ отправил: Gluck3D (статус: 1-ый класс)
Ответ отправлен: 12.09.2006, 16:12
Оценка за ответ: 4

Отвечает: Волков Павел Юрьевич
Здравствуйте, Maksim,V,I/max!
В Message db 'Hello, world!$' строка и так в ASCII, откройте исходник в шестнадцатеричном редакторе и сравните коды по таблице ASCII.
---------
Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 7-ой класс)
Ответ отправлен: 12.09.2006, 20:03


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

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

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

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

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


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


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

В избранное