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

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

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

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

Выпуск № 1035
от 02.06.2008, 06:35

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

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 138082: Напиши макро, которое вызывают с помощью: LIST 100, SPACE SPACE DW ? DW OFFSET SPACE + 4 DW ? DW OFFSET SPACE + 8 … … … DW ? DW OFFSET SPACE + 396 DW ? DW -1 Подс...
Вопрос № 138119: Как написать процедуру на ассемблере такого типа: Procedure xxx(x,y:integer); begin x:=x+y; end; как оформить такую процедуру я знаю а вот как ей передать параметры нет((( побывал через стек командами Push...Pop не получаться ...

Вопрос № 138.082
Напиши макро, которое вызывают с помощью:
LIST 100, SPACE


SPACE DW ?
DW OFFSET SPACE + 4
DW ?
DW OFFSET SPACE + 8




DW ?
DW OFFSET SPACE + 396
DW ?
DW -1

Подсказка: можно воспользоваться дополнительным макро, которое будет читаться из макро LIST
Оцените, для чего может использоваться это макро.
Отправлен: 27.05.2008, 14:41
Вопрос задала: Sbuber (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Sbuber!
Макро под TASM и пример использования в приложении
Макро используется для формирования связанного списка записей
следующего вида:
rec struc
value dw ?
next dw ?
rec ends

где value - значение поля значения записи,
next - адрес следующей записи в списке.
Число записей и имя списка задаются параметрами макро.
Для чего можно использовать?...Да везде, где нужно построить подобный список...

Приложение:

---------
Удачи!

Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 30.05.2008, 13:32

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Sbuber!

Макрос в приложении.
В прикрепленном файле находится сгенерированный компилятором файл листинга. Данный макрос служит для создания массива данных и заполнения его нужной информацией. Область применения разнообразна(таблица переходов, конечные автоматы и т.д.).

О файле листинга:
В строке 16 со смещением 100Н в основной программе запускается макрос.
В строке 17 со смещением 100Н начинает работать макрос первого уровня(1 в начале строки) метка Space получает адрес относительно начала сегмента.
В строках 18-19 работает макрос второго уровня, он заполняет память нужными значениями.
Удачи!

Приложение:

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
И только наступив на грабли мы приобретаем драгоценный опыт!

Ответ отправил: Зенченко Константин Николаевич (статус: Профессор)
Украина, Киев
Тел.: +380958380164
Адрес: Украина г.Киев
----
Ответ отправлен: 30.05.2008, 14:16


Вопрос № 138.119
Как написать процедуру на ассемблере такого типа:
Procedure xxx(x,y:integer);
begin
x:=x+y;
end;
как оформить такую процедуру я знаю а вот как ей передать параметры нет(((
побывал через стек командами Push...Pop не получаться ... программа дает ошибку или просто закрываться(((
Отправлен: 27.05.2008, 17:39
Вопрос задал: Делий Роман (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Trulala
Здравствуйте, Делий Роман !

Мне кажется, что эта процедура ошибочна, так как возврат результата в одном из параметров не самый красивый вариант.
Вероятно, здесь имеет место подпрограмма-функция (тогда xxx:= x+y;) или же параметры являются указателями на x и y.

function xxx(x,y:integer):longint;
begin
xxx:= x+y;
end;

Возможный вариант смотрите в приложении; TurboPascal генерирует не совсем корректный код для такой функции.

Приложение:

Ответ отправил: Trulala (статус: 2-ой класс)
Ответ отправлен: 28.05.2008, 07:27
Оценка за ответ: 5
Комментарий оценки:
Да я согласен с вами я допустил там ошибку)) но ето токо тестовий пример вот такой код должен бить
Var
X:integer;
Procedure xxx(z,c:integer);
begin
x:=c+z;
end;
Begin
end.

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Делий Роман !

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

Приложение:

---------
И только наступив на грабли мы приобретаем драгоценный опыт!

Ответ отправил: Зенченко Константин Николаевич (статус: Профессор)
Украина, Киев
Тел.: +380958380164
Адрес: Украина г.Киев
----
Ответ отправлен: 28.05.2008, 23:27


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

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

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

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

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

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


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


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 4.92 pre 5.0 RC2 от 09.05.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное