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

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


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

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

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

Выпуск № 174
от 01.07.2005, 12:30

Администратор:Калашников О.А.
В номере:Вопросов: 9, Ответов: 22


Вопрос № 22640: Объясните как пользователю со средним уровнем знающего паскаль, немного basic и ассемблер. Чем отличаются EXE и COM программы если можно то подробнее очень прошу ответить...
Вопрос № 22641: Тут еще такой вопрос, т.е. вопроса я не понял. Вопрос следующий: Определите следующие числовые значения в элементах данных с именами FLDA до FLDE директивы DW, содержащей последовательные значения 16, 19, 20, 27, 30 Помо...
Вопрос № 22644: Мучаюсь и мучаюсь. Времени мало, а мне уже зачет надо сдать. Опять вопрос, опять недопонял. Вопрос следующий: Покажите сгенирированный шестнадцатеричный объектный код для: DB '26' DB 26 Мне бы узнать где этот код ?<b...
Вопрос № 22647: Вопрос такой: Определить следующие числовые значения в элементах данных с именами от FLDA до FLDE: * четырехбайтового элемента, содержащего шестнадцатеричный эквивалент десятичного числа 115; четырехбайтовй - это директ...
Вопрос № 22648: Я читал литературу по ассемблеру и натолкнулся на кое - что. Цитата: "Наиболее общим именем сегмента является @date, которое в упрощенных директивах для определения сегментов используется для ссылки на используемый по умолчанию ...
Вопрос № 22657: Все тот же вопрос: Вопрос таков: Определить сгенерированный ассемблерный шестнадцатеричный объектный код для: DQ 25733Ah Насколько я помню, то DQ - это 10 байт. Почему именно объектный ?, разве файл *.obj - не объектный код пр...
Вопрос № 22662: Скажите пожалуйста на какой флаг воздействует событие обработка в одношаговом режиме? Что это за флаг. Это случайно не флаг перехвата, и для чего он нужен?...
Вопрос № 22663: Уважаемые программисты как перевести курсор на координаты экрана в MS-DOS: "строка 5, столбец 7" ?. И вообще какими командами пользоваться для манипуляции курсора по экрану и очистки определенных частей экрана ? Допусти...
Вопрос № 22664: Очень прошу ответить Как можно используя команды сдвига, переноса и сложени, умножить содержимое регистра AX на 10 ? Очень прошу ответить...

Вопрос № 22.640
Объясните как пользователю со средним уровнем знающего паскаль, немного basic и ассемблер. Чем отличаются EXE и COM программы
если можно то подробнее
очень прошу ответить
Отправлен: 25.06.2005, 17:13
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
COM-программа - это файл не более "64 Кб-256" размером.
в нём нет сегментов и таблицы передислокации ;) (relocation)
нет заголовков и т.п.
загружается по адресу 256, автоматом создаётся PSP.

вообще-то com-файл уже устарел.
и вообще ДОС.
сейчас PE-файлы используются везде.

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

Отвечает: Алексей Смуриков
Здравствуйте, Терсков Алексей Николаевич!
Exe программа мультисегментная, т.е. может быть размером больше 64kb, а COM это программа начинающаяся с адреса 100h и длиной не более 64kb!
Ответ отправил: Алексей Смуриков (статус: Студент)
Отправлен: 26.06.2005, 10:13


Вопрос № 22.641
Тут еще такой вопрос, т.е. вопроса я не понял.
Вопрос следующий:

Определите следующие числовые значения в элементах данных
с именами FLDA до FLDE
директивы DW, содержащей последовательные значения 16, 19, 20, 27, 30

Помогите пожалуйста немогу понять вопрос
что нужно сделать, как отвечать непойму.

Ассемблер изучаю толькр две недели.
Наверно что-то упустил.
Отправлен: 25.06.2005, 18:07
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!



  1. FLDA dw 16
    FLDB dw 19
    FLDC dw 20
    FLDD dw 27
    FLDE dw 30


  2. macro fld n1, n2
    FLD&n1& DW &n2&
    endm

    fld A, 16
    fld B, 19
    fld C, 20
    fld D, 27
    fld E, 30



---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 25.06.2005, 18:27
Оценка за ответ: 5
Комментарий оценки:
FLDA dw 16
FLDB dw 19
FLDC dw 20
FLDD dw 27
FLDE dw 30
Тут конечно понятно, а macro fld
это какой-то макрос чтоли ?
n1 и n2 - параметры.

Отвечает: Алексей Смуриков
Здравствуйте, Терсков Алексей Николаевич!
Я так понимаю:
FLDA dw 16
FLDB dw 19
FLDC dw 20
FLDD dw 27
FLDE dw 30
Ответ отправил: Алексей Смуриков (статус: Студент)
Отправлен: 26.06.2005, 10:15


Вопрос № 22.644
Мучаюсь и мучаюсь. Времени мало, а мне уже зачет надо сдать.
Опять вопрос, опять недопонял.
Вопрос следующий:
Покажите сгенирированный шестнадцатеричный объектный код для:

DB '26'
DB 26

Мне бы узнать где этот код ?
Я же не напишу в тетрадь кракозябру из *.obj файла
Где этот код взять да еще и шестнадцатеричный.
Наверное в отладчике но где ?
Спасибо большое за все предыдущие ответы !!!

Приложение:

Отправлен: 25.06.2005, 19:09
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
DB '26'
=
DB "2", "6"
=
32h, 36h

в icq мой постучись

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 14 суток с момента отправки ответа.
---------
Что имеем - не храним, потерявши - плачем

Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 25.06.2005, 19:22

Отвечает: Стас
Здравствуйте, Терсков Алексей Николаевич!
дополнение:
DB '26' = 32 36 (шестнацетиричное)
DB 26 = 1A (шестнацетиричное)
Ответ отправил: Стас (статус: Практикант)
Отправлен: 26.06.2005, 01:18
Оценка за ответ: 5
Комментарий оценки:
Большое Спасибо


Вопрос № 22.647
Вопрос такой:
Определить следующие числовые значения в элементах данных
с именами от FLDA до FLDE:

* четырехбайтового элемента, содержащего шестнадцатеричный
эквивалент десятичного числа 115;

четырехбайтовй - это директива dw

Правильный ли это будет ответ

FLDA dw 73h
FLDB dw 73h
FLDC dw 73h
FLDD dw 73h
FLDE dw 73h

* Однобайтового элемента, содержащего двоичный эквивалент
десятичного числа 25;

У меня вот так получается:

FLDA db 11001b
FLDB db 11001b
FLDC db 11001b
FLDD db 11001b
FLDE db 11001b

Прав ли я ?, если не прав, то в чем моя ошибка ?
Отправлен: 25.06.2005, 19:38
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
господи, кто вас такому учит, а? :(
ну ты всё правильно думаешь, только четыре байта - это DD.
а вообще скажи этому преподу, что числа ты можешь писать так, как тебе УДОБНО!
я вот всегда пишу так, как удобно число представлять. если неважно, то пишу в десятичном формате. если ты его напишешь в 16-ом, НИЧЕГО не изменится! число останется таким же! пойми ты это...

удачи!
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 25.06.2005, 19:47
Оценка за ответ: 5
Комментарий оценки:
Я заочник мне очень тяжело.
Ассемблером занимаюсь три недели.
Вы конечно правы DD - это Define Double Word
т.е. двойное слово

Отвечает: Алексей Смуриков
Здравствуйте, Терсков Алексей Николаевич!
Четыре байта это ->
dd - 4 байта
dw - 2 байта!
db -1 байт
Ответ отправил: Алексей Смуриков (статус: Студент)
Отправлен: 26.06.2005, 10:18


Вопрос № 22.648

Я читал литературу по ассемблеру и натолкнулся на кое - что.
Цитата: "Наиболее общим именем сегмента является @date, которое
в упрощенных директивах для определения сегментов используется
для ссылки на используемый по умолчанию сегмент данных"
в упрощенных дериктивах:
mov ax,@Data
mov ds,ax
в стандартных дериктивах:
mov ax,Data
mov ds,ax
как ассемблер умудряется определить, какой сегмент нужно присвоить,
да и еще всегда разный ?

Когда я испытывал все на практике, то всегда замечал, что
сегмент данных всегда разного размера, бывают и одинаковые в различных
случаях.
Может ли сегмент кода при выполнении программы, т.е. его смещение
налететь например на сегмент стека, или кода и наоборот данные
на код.
Отправлен: 25.06.2005, 19:39
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
data - это предопределённый символ (который появляется, когда указываешь директиву DATASEG), который содержит имя сегмента или группы_сегментов, определённых этой директивой совместно с MODEL!

вообще советую использоват ьчто-то подобное:

VERSION T400
IDEAL
P586
Model use16 TINY,Normal StdCall

Segment S byte public 'code' use16
Assume CS:S,DS:S

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

Отвечает: ASMодей
Здравствуйте, Терсков Алексей Николаевич!
При компиляции программы ассемблер вычисляет размеры всех сегментов программы и на основе этого распределяет сегментам их адреса. Нарушить пределы сегментов конечно можно, но это будет уже ошибкой программиста. Например если поставить JMP за предел сегмента, то она выполнится. Таким же образом можно обращаться к данным за пределами соответствующего сегмента. И конечно точно так же может возникнуть выход за границы сегмента стека (переполнение стека). Избежать таких ситуаций частично позволяет использование меток при переходах (метки всегда находятся в пределах сегмента) и использование заранее определенных переменных при обращении к данным.
Ответ отправил: ASMодей (статус: Профессионал)
Отправлен: 26.06.2005, 10:39


Вопрос № 22.657
Все тот же вопрос:
Вопрос таков:
Определить сгенерированный ассемблерный шестнадцатеричный
объектный код для: DQ 25733Ah
Насколько я помню, то DQ - это 10 байт.
Почему именно объектный ?, разве файл *.obj - не объектный код
программы, которую ножно линковать ?
В вопросе указано сгенерированный, значит где-то он генирируется, где же
он генерируется?
Вот пример: из книги шестнадцатиричный объектный код для операнда JMP:
* 27
* 6B
* C6
Это можно увидеть в отладчике "TD", а вот DQ 25733Ah ? я там не нашел.
Очень прошу помочь
Отправлен: 26.06.2005, 07:16
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: ASMодей
Здравствуйте, Терсков Алексей Николаевич!
Скомпилируйте вашу программу с подробным листингом и в нем вы увидите сгенерированные 16-ричные объектные коды для каждой инструкции программы.
Ответ отправил: ASMодей (статус: Профессионал)
Отправлен: 26.06.2005, 10:25

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
DQ - это 8 байт.
объектный - значит двоичный в твоём случае.
хотя, вполне возможно, имелось в виду именно объектный. но нафиг он тебе нужен?! это же маразм - его находить и т.п. Он тебе для программирования не нужен вообще!

00000000: 27 daa
00000001: 6BC6 imul ax,si,000 ;" "

твой же код для DQ 25733Ah равен:
3A
73
25
00
00
00
00
00

Удачи!

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


Вопрос № 22.662
Скажите пожалуйста на какой флаг воздействует событие обработка в одношаговом режиме?
Что это за флаг. Это случайно не флаг перехвата, и для чего он нужен?
Отправлен: 26.06.2005, 09:21
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: ASMодей
Здравствуйте, Терсков Алексей Николаевич!
Если я правильно понял, то речь идет о флаге TF (взято из книги Зубкова):
TF — флаг ловушки. Этот флаг был предусмотрен для работы отладчиков, не использующих защищенный режим. Установка его в 1 приводит к тому, что после выполнения каждой команды программы управление временно передается отладчику (вызывается прерывание 1).
Ответ отправил: ASMодей (статус: Профессионал)
Отправлен: 26.06.2005, 10:43

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
есть флаг TF.
Trap.
это флаг ловушки.
при каждом выполнении команды будет вызвано исключение ловушки.
используется для отладки программ.


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


Вопрос № 22.663

Уважаемые программисты как перевести курсор на координаты экрана в MS-DOS:
"строка 5, столбец 7" ?.
И вообще какими командами пользоваться для манипуляции курсора по экрану
и очистки определенных частей экрана ?
Допустим нужно очистить экран начиная с нулевого столбца 12-ой сторки
до 79-го столбца 22-й строки ?
Отправлен: 26.06.2005, 09:36
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 4

Отвечает: Алексей Смуриков
Здравствуйте, Терсков Алексей Николаевич!
Вот даю ссылку на файл краткого справочника по интеруптам!
http://www.smial.net.ru/upload/simsprav.rar
Ответ отправил: Алексей Смуриков (статус: Студент)
Отправлен: 26.06.2005, 10:22

Отвечает: ASMодей
Здравствуйте, Терсков Алексей Николаевич!
Вам понадобится справочник по прерыванию 10h, так как именно это прерывание отвечает за все действия с экраном. Например установка позиции курсора - это функция 2 прерывания 10h.
Но можно сделать и проще. Если вам просто нужно очистить какую-то часть экрана, то можно обратиться напрямую к видеопамяти. В текстовом режиме она начинается с адреса 0B800:0000h. В видеопамяти построчно хранится информация о каждом символе экрана. Каждая пара байт этой памяти представляет собой ASCII код символа и его атрибут (цвет самого символа и цвет фона). В текстовом режиме 3 (а именно он чаще всего используется) размер экрана составляет 80*25 символов. Таким образом, скажем 5 строка экрана начинается с адреса 80*2*5. Если заполнить эту область символом с кодом 20h (пробел), то получим чистый экран с 5 строки. Естественно нужно ограничить заполнение 75 строками.
Ответ отправил: ASMодей (статус: Профессионал)
Отправлен: 26.06.2005, 10:59

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
есть функции BIOS. вот их и используй.
это прерывание номер 16.
2 функция - координаты установить.

Int 10h, 02h Set Cursor Position

Sets the cursor position (row and column) for a specified display
page.

Entry AH = 02h
BH = Display page number
DH = Row
DL = Column

6 и 7 функции - очистить участки экрана.
смотри вложенный файл.
Удачи!

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 14 суток с момента отправки ответа.
---------
Что имеем - не храним, потерявши - плачем

Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 26.06.2005, 12:32

Отвечает: Berkut
Здравствуйте, Терсков Алексей Николаевич!
Прямая работа с текстовым режимом происходит через сегмент 0A000h. Для вывода сивола копируешь байт в память по адресу 0A000h:номер_строки*кол-во_столбцов+номер_столбца.
Ответ отправил: Berkut (статус: 1-ый класс)
Отправлен: 27.06.2005, 00:02


Вопрос № 22.664
Очень прошу ответить

Как можно используя команды сдвига, переноса и сложени, умножить содержимое регистра AX на 10 ?

Очень прошу ответить

Приложение:

Отправлен: 26.06.2005, 09:42
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов отправлено: 4

Отвечает: Алексей Смуриков
Здравствуйте, Терсков Алексей Николаевич!
shl ax,3 ; *8
lea ax,[ax+ax*2] ; *2
Ответ отправил: Алексей Смуриков (статус: Студент)
Отправлен: 26.06.2005, 10:25

Отвечает: ASMодей
Здравствуйте, Терсков Алексей Николаевич!
Например так:
mov bx,ax
shl ax,3
shl bx,1
add ax,bx
Ответ отправил: ASMодей (статус: Профессионал)
Отправлен: 26.06.2005, 11:17

Отвечает: Евгений Иванов
Здравствуйте, Терсков Алексей Николаевич!
умножь на 8 и добавь два раза его же:
mov ax, [number]

mov bx, ax
shl ax, 3
add ax,bx
add ax,bx

в 32-битном режиме всё проще:
mov eax,[num]

lea eax,[eax*4+eax]
shl eax, 1

Удачи!
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 26.06.2005, 12:34

Отвечает: Berkut
Здравствуйте, Терсков Алексей Николаевич!
shl eax,1
lea eax,[eax+eax*4]
Ответ отправил: Berkut (статус: 1-ый класс)
Отправлен: 27.06.2005, 00:09


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

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

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

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

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


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


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


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

В избранное