Вопрос № 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)
оба регистра есть и в 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!?
Отвечает: 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