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

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


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

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

Выпуск № 618
от 03.12.2006, 02:05

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


Вопрос № 64402: есть программа: CSEG segment org 100h DER mov ah,9 mov dx,offset e int 21h int 20h e db'Hello.$' CSEG segment end DER Что обозначает на выходе программы символ db,в контексте e db 'Hello.$'? Почему...
Вопрос № 64432: Почему не работает код? Ожидание нажатия срабатывает а надпись 'Вы ввели y$' немогу получить... Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International CSEG segment assume CS:CSEG org 100h Start: mov a...

Вопрос № 64.402
есть программа:
CSEG segment
org 100h
DER
mov ah,9
mov dx,offset e
int 21h
int 20h
e db'Hello.$'
CSEG segment
end DER

Что обозначает на выходе программы символ db,в контексте e db 'Hello.$'?
Почему именно db и что это команда ,оператор и т.д.?
Я так понял,что он закреплен жестко,так как и dx,в случае mov dx,offset.
Спасибо за ответы.
Отправлен: 27.11.2006, 12:37
Вопрос задал: Metrok (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Брона Вячеслав
Здравствуйте, Metrok!
Конструкция <name> db '<value>$' - это на самом деле не команда, а объявление с резервирования места в байтах и одновременно заполнение зарезервированной области байтами <value> текстовой константы, или переменной (это уже зависит от того, как программа будет его интерпритировать).
В Ассемблере есть несколько видов резервирования области памяти под переменные и/или константы. DB - резервирование байт, DW - резервирование слов (16 разрядов), DD - резервирование двойных слов (32 разряда), и т.д.

Есть замечательня книга "Programming for MS DOS" автор Rollings. Названия, к сожалению точно не помню, но народ активно программирующий на Ассемблере с ней знаком, и я даже встречал ее в электронных библиотеках. В этой книге приведено и очень подробно разбирается масса примеров по программированию на Ассемблере под МС ДОС.
Если найдете - не пожалеете потраченного на поиски времени.
Ответ отправил: Брона Вячеслав (статус: 1-ый класс)
Ответ отправлен: 27.11.2006, 13:18
Оценка за ответ: 5

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

DEFINE BYTE

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

Отвечает: Перл-Харбор
Здравствуйте, Metrok!
e db'Hello.$' - это объявление переменной, точнее массива по 1 байту. e - название самой переменной, db тип переменной 1 байт, dw слово, dd 2 слова и т.д. Текст в скобках это и есть массив символов, функция 9, 21 прерывания выведет все символы до бакса. Offset это смещение переменной, от куда начинать вывод текста.


---------
Поддаться, что бы победить.
Ответ отправил: Перл-Харбор (статус: 1-ый класс)
Ответ отправлен: 27.11.2006, 15:47

Отвечает: _beast
Здравствуйте, Metrok!

db - это деректива, которая определяет данные размером в байт. Встречая такую дерективу, ассемблер вычисляет операнды и записывает их значения в последовательные байты памяти.
Ответ отправил: _beast (статус: 3-ий класс)
Ответ отправлен: 28.11.2006, 07:24


Вопрос № 64.432
Почему не работает код? Ожидание нажатия срабатывает а надпись 'Вы ввели y$' немогу получить...
Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International

CSEG segment
assume CS:CSEG
org 100h
Start:
mov ah,10h
int 16h
cmp al,'y'
jz m1

int 20h

m1:
mov ax,9h
mov dx,offset str0
int 21h

str0 db 'Вы ввели y$'

CSEG ends
end Start
Отправлен: 27.11.2006, 14:58
Вопрос задал: Snik (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 8)

Отвечает: Перл-Харбор
Здравствуйте, Snik!
попробуй так
CSEG segment
assume CS:CSEG
org 100h
Start:
mov ah,10h
int 16h
cmp al,'y'
je m1

int 20h

m1:
mov ax,9h
mov dx,offset str0
int 21h
Int 20h
str0 db 'Вы ввели y$'

CSEG ends
end Start

---------
Поддаться, что бы победить.
Ответ отправил: Перл-Харбор (статус: 1-ый класс)
Ответ отправлен: 27.11.2006, 15:49

Отвечает: Волков Павел Юрьевич
Здравствуйте, Snik!
Может быть нехватает паузы после вывода строки.
Подправил сорец:

CSEG segment
assume CS:CSEG
org 100h
Start:
mov ah,10h
int 16h
cmp al,'y'
jz m1

fin:
int 20h

m1:
mov ax,9h
mov dx,offset str0
int 21h
mov ah,10h
int 16h
jmp fin
str0 db 'Вы ввели y$'

CSEG ends
end Start
---------
Век живи, век учись.
Ответ отправил: Волков Павел Юрьевич (статус: 9-ый класс)
Ответ отправлен: 27.11.2006, 18:36


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное