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

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


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

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

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 331
от 01.01.2006, 11:21

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


Вопрос № 32252: Читаю рассылку Калашникова. Возникли следующие вопросы: Что означает equ? Объясните (и расшифруйте) доходчиво, а то что-то не совсем пока понятно? ... Message db 'Hello!$' почему здесь $ fileName db 'file',0 а здесь 0 db - de...
Вопрос № 32262: Попробовал скомпилировать и запустить программу из 3 части рассылки.Она должна что-то выводить на экран, но ничего не выводит. Почему? И ещё. Когда я её компилировал TASM'ом всё скомпилировалось без проблем, а MASM выдаёт такую ошибку - LINK : f...

Вопрос № 32.252
Читаю рассылку Калашникова. Возникли следующие вопросы:
Что означает equ? Объясните (и расшифруйте) доходчиво, а то что-то не совсем пока понятно?
...
Message db 'Hello!$' почему здесь $
fileName db 'file',0 а здесь 0

db - define byte, т.е. резервируем 1 байт. Каким образом этот байт связан
со строкой?

db - define byte
dw - define word
Это ясно, а вот
dd - это define dowble word ?
dq - ?
dt - типа define ten bytes - так что ли?
Если есть еще какие-то define расшифруйте пожалуйста - все осмысленное дается легче!

Отправлен: 26.12.2005, 22:12
Вопрос задал: REFERI (статус: Студент)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Евгений Иванов
Здравствуйте, REFERI!
EQU - это эквивалент. то есть, то, что будет заменяться.
например, я применяю вот такие вещички


    b equ byte
    w equ word
    ww equ dword
    t equ type
    ofs equ offset
    m equ mask


при этом потом мне писать меньше:
mov al, [b esi]
это значит то же , что и
mov al, [byte esi] или mov al, [byte ptr esi]

доллар и 0 - это окончание строки. вот и всё. такое соглашение.

DB никак не связан со строкой. просто байты можно указывать в виде строки - ьак иногда проще.
например,
szIn db 'o:in', 0
szOut db 'o:out', 0
szDid db 'o:did', 0

ну и остальные объявление данных есть, dw, dd.


    DB Define byte
    DD Define doubleword
    DF Define farword
    DP Define six-byte unit
    DQ Define quadword
    DT Define ten-byte unit
    DW Define word


    DP = DF - Это 6 байт (48 бит).
    Note: This directive is normally only used with the 80386 processor.


---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 26.12.2005, 22:22
Оценка за ответ: 5
Комментарий оценки:
Спасибо!

Отвечает: Юра
Здравствуйте, REFERI!
1) Директива EQU эквивалентна '=', с той разницей, что значением выражения с исп. '=' может быть только целое число.
2) К строке db имеет то отношение, что определяет место резервируемое под элемент строки
3) dd определяет двойное слово
dq определяет учетверенное слово
dt определяет удесятеренное слово
Ответ отправил: Юра (статус: 2-ой класс)
Отправлен: 26.12.2005, 23:48
Оценка за ответ: 2
Комментарий оценки:
По-русски я знаю как это! Я спрашивал по-английски!
<К строке db имеет то отношение, что определяет место резервируемое под элемент строки
Это вообще цитата моего вопроса а не ответ.
Хотя вы еще 2-ой класс и вроде бы как можно вам это простить, но я считаю что лучше вас поправить сразу, чтобы ответы ваши учитывались при здаче экзамена, а то зря потратите время, давая такие ответы...
Хороший ответ можно посмотреть выше!

Отвечает: Лысков Игорь Витальевич
Здравствуйте, REFERI!
Немного дополню (0 и $):
Если строка заканчивается $, значит она будет выводиться на экран с помощью
mov ah,9
lea dx, message
int 21h
Просто ДОС выросла из других ОС, где строка заканчивалась долларом, ну и
для совместимости так и осталось.
Потом поняли, что нулем удобнее заканчивать, но было уже поздно.
Кстати, это единственная функция, где используется знак доллара.

И еще о строках. Есть два способа записи строк.
Первый, принятый в С: строка заканчивается нулем.
Второй, принятый в Паскале: вначале пишется длина строки, затем сама строка.
В этом способе получается ограничение - строка не может быть больше 255.

---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: 10-ый класс)
Отправлен: 27.12.2005, 10:13


Вопрос № 32.262
Попробовал скомпилировать и запустить программу из 3 части рассылки.Она должна что-то выводить на экран, но ничего не выводит. Почему?
И ещё. Когда я её компилировал TASM'ом всё скомпилировалось без проблем, а MASM выдаёт такую ошибку - LINK : fatal error LNK1561: entry point must be defined.В чём дело?
Заранее спасибо

Приложение:

Отправлен: 27.12.2005, 05:27
Вопрос задал: IceBerk (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Евгений Иванов
Здравствуйте, IceBerk!
_beg:
push 3
pop ax
int 4*4

---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 27.12.2005, 09:58


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

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

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

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

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


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


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

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное