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

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


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

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

Выпуск N 090

Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"

Дата выхода: 2001-09-09


Вопрос №823

Здравствуйте уважаемыу эксперты!
У меня 3 вопроса по выпуску рассылки №4.
1) Зачем в первой программе знаки "<>" перед меткой Next_face?
2) Если их убрать, то программа все равно не работает.
Tasm выдает ошибку:Near jump or call to different cs
Почему?
3) Почему не работает вторая программа? Вроде она правильная?

Ответ

Здравствуйте, TanaT!

1) Да не нуно там <>. Это просто из-за формата html всякий мусор просачивается.
2) А чтоб этого не было, после
CSEG segment
вставь строку
ASSUME CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
3) Использовалось зарезервированное слово str и не было вставлено строки ASSUME CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG (см. выше).

Приложение:


Отправил эксперт: Василий
Эксперт отправил ответов (всего): 55

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №822

Мне надо умножать, делить дробные + и - числа, 2 байта целая и 2б дробная части

Ответ

Здравствуйте, Дмитрий!

Используй сопроцессор.


Отправил эксперт: Василий
Эксперт отправил ответов (всего): 56

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №821

Уважаемые экперты!
Я начинающий.
Подкажите пожалуйста откуда можно скакачать необходимые утилиты для изучения и работы асемблером.
У Калашникова с сайта не получается скачать.
(Качаю алигатором)

Ответ

Здравствуйте, SERG!

Я тут тебе письмецо выслал. Прочти.


Отправил эксперт: Василий
Эксперт отправил ответов (всего): 57

Экспертная группа: Работа с MASM/TASM

Вопрос №829

Что такое equ? (Пример: "Buffer equ $")

Ответ

Здравствуйте, Alex!
Константа в виде целого числа, адреса или строки символов!


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 91

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №832

Hello,

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

Читаю рассылку давно, иногда можно найти дельные вещи, спасибо. Умею и могу многое из того, о чем вы только дискутируете. Но это чудесно, на самом деле ;-))

Однако, мне как человеку не очень-то молодому но с не очень малым опытом хотелось бы продолжить тему кривых отвечателей.
Собственно, суть в том, что лично мне, как и подавляющему большинству моих знакомых серьезных программеров значительно приятнее читать НОРМАЛЬНЫЙ, ТОЛКОВЫЙ текст.

Мужики, задавайте вопросы человеческим языком, не нужно выпендриваться друг перед другом в знании того, что мы и так все знаем, кстати, сленга тоже. (Поверьте, я лично, очень хорошо владею и этим языком тоже). Нормальный текст приятно читать, на него приятно отвечать, над ним интересно посидеть.

Эксперты, отвечайте нормальным языком, чтобы все хамье старалось задать вопрос по-человечески, на настоящем русском.

Sincerely, ChB.

Ответ

Здравствуйте, Charlie Besheny!
Совершенно согласен! И хочется, чтобы все прочитали это послание!
СЛАВА РУССКОМУ ЯЗЫКУ!


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 92

Экспертная группа: Оптимизация программ

Вопрос №825

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

Ответ

Здравствуйте, Broken Sword!
- create unique file, см. пример, function_5a
- get free space, function_36h-аналогично примеру
- колво физ. дисков int13h_funct_8h
лучше второй




Приложение:


Отправил эксперт: АлександрМ
Эксперт отправил ответов (всего): 20

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №824

Многоуважаемые эксперты! Перечислите, пожалуйста, ВСЕ известные Вам способы определения количества дисков на данном компьютере и, если не в лом, проанализируйте в двух словах каждый метод.

Ответ

Здравствуйте, Broken Sword!
Ну вот прога определяет количество физических дисков(обычным перебором)! Если тебе надо определить количество логических дисков, то тоже есть вариант(через главный загрузчик), так что если надо, то пиши!

P.S.Ты справочник из интернета достал, если да, то адресок подкинь, прожалуйста..

Приложение:


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 93

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №826

К оболочке хотел приписать в верхнюю её часть, строчку.
Всё вроде сделал по алгоритму как в рассылке. Однако
она почему-то выводится настырно не в середине, а в самом
конце. Где может быть моя ощибка, что я упустил. Середину
строки и оболочки просчитал вроде верно.

Ответ

Здравствуйте, Speedy Gonsalez!
Вопрос-то я понял, но вот что мне делать - написать за тебя вывод строки или провести анализ всех ошибок, которые можно при этом допустить? Где исходники-то?


Отправил эксперт: DM
Эксперт отправил ответов (всего): 35

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №831

Почему перед выполнением двухбайтного div надо
обнулять dx?

mov ax, 10
mov bx, 10
div bx
- программа зависает.
Если перед div вставить xor dx, dx - то работает нормально.
В dx помещается остаток от деления, но почему его надо предварительно обнулять?

Ответ

Здравствуйте, Евгений!
Если двухбайтный делитель, то делимое - 4х-байтное, и содержится оно в DX:AX (старшая-младшая часть). Т.е. если при 2х-байтном делителе нужно 2х-байтное делимое, DX нужно обнулять. Почему виснет-не знаю, должен делить с глюками.


Отправил эксперт: DM
Эксперт отправил ответов (всего): 38

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №833

Здравствуйте!

Вот StaS, что ты хотел!!!

.model small
.data
bank db 160 dup (052h),160 dup (027h)
; каждый байт = тетрада + тетрада
; тетрада включает в себя биты I,R,G,B
; где I-яркость,R-красный,G-зеленый,B-голубой
; итого 16х16=256 цветов
.stack 100h
.code
start:
mov ax,@data
mov ds,ax

mov ax,0013h ; видеорежим 320 на 200 и 256 цветов
int 10h

mov ax,0a000h
mov es,ax

cld
mov si,offset bank
mov di,320*100
mov cx,320
rep movsb

mov ah,4ch
int 21h
end start

Вопрос экспертам.
Кто придумал эту глупость: сочетание красного, зеленого и
голубого? Ведь дураку понятно, что все цвета получаются
из красного, ЖЕЛТОГО и голубого:
К+Ж = оранжевый
К+Г = фиолетовый
Ж+Г = ЗЕЛЕНЫЙ
К+Ж+Г = коричневый
К+О+Ж+З+Г+С+Ф=белый

То же самое и в TV-set-е схемы: красный-зеленый,
красный-голубой. Что это? Ошибка?

С уважением,Alex12

Ответ

Здравствуйте, Alex12!

На принтерах цвет вообще рисуется Голубым, Фиолетовым и Жёлтым
(CMY) - но это т.к. принтер рисует на белой бумаге, однако
мониторы/телевизоры рисуют на чёрном фоне, поэтому цвет
рисуется Красным, Синим и Зелёным (RGB).

Цвета Red <-> Cyan, Green <-> Magenta и Blue <-> Yellow являются взаимно
дополняющими. Т.е., например, (White - Cyan) = (Black + Red).

А ещё цвет можно представлять в формате HLS - Hue, Light & Saturation.
Вообще, существует дофига вариантов представления цвета, в общем каждый из них полезен в определённой ситуации.


Отправил эксперт: Nik
Эксперт отправил ответов (всего): 102

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №833

Здравствуйте!

Вот StaS, что ты хотел!!!

.model small
.data
bank db 160 dup (052h),160 dup (027h)
; каждый байт = тетрада + тетрада
; тетрада включает в себя биты I,R,G,B
; где I-яркость,R-красный,G-зеленый,B-голубой
; итого 16х16=256 цветов
.stack 100h
.code
start:
mov ax,@data
mov ds,ax

mov ax,0013h ; видеорежим 320 на 200 и 256 цветов
int 10h

mov ax,0a000h
mov es,ax

cld
mov si,offset bank
mov di,320*100
mov cx,320
rep movsb

mov ah,4ch
int 21h
end start

Вопрос экспертам.
Кто придумал эту глупость: сочетание красного, зеленого и
голубого? Ведь дураку понятно, что все цвета получаются
из красного, ЖЕЛТОГО и голубого:
К+Ж = оранжевый
К+Г = фиолетовый
Ж+Г = ЗЕЛЕНЫЙ
К+Ж+Г = коричневый
К+О+Ж+З+Г+С+Ф=белый

То же самое и в TV-set-е схемы: красный-зеленый,
красный-голубой. Что это? Ошибка?

С уважением,Alex12

Ответ

Здравствуйте, Alex12!
Знакомы ли тебе понятия аддитивной и субтактивной цветовых схем? Ну так вот, то что ты говоришь справедилво для субтрактивной цветовой схемы (т.е. той где свет от источника отражается от поверхности, там переизлучается только часть пришедшего света в области спектра соответствующей определенным частотам для данного тела. Воспринимаясь глазом, данные частоты дают такое понятие как цвет). В субтрактивной цветовой схеме основными являются цвета: ГОЛУБОЙ (цвет морской волны), ПУРПУРНЫЙ и ЖЕЛТЫЙ (по инему CYAN, MAGENTA & YELLOW т.е. CMY). Такая модель используется при печати. Нетрудно сообразить, что сумма всех цветов дает ЧЕРНЫЙ.
ГОЛУБОЙ+ПУРПУРНЫЙ=СИНИЙ
ПУРПУРНЫЙ+ЖЕЛТЫЙ=КРАСНЫЙ
ЖЕЛТЫЙ+ГОЛУБОЙ=ЗЕЛЕНЫЙ
Экран же монитора или телевизора использует аддитивную модель, т.к. он не отражает свет, а сам его излучает. В этом случае основными цветами являются КРАСНЫЙ, ЗЕЛЕНЫЙ и СИНИЙ (по импортному RED, GREEN & BLUE т.е. RGB). Сумма всех цветов - наиболее яркая комбинация - БЕЛЫЙ.
КРАСНЫЙ+СИНИЙ=ПУРПУРНЫЙ
СИНИЙ+ЗЕЛЕНЫЙ=ГОЛУБОЙ
ЗЕЛЕНЫЙ+КРАСНЫЙ=ЖЕЛТЫЙ
З.Ы. Учи физику!


Отправил эксперт: Painbringer
Эксперт отправил ответов (всего): 106

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №838

Здраствуйте!
Каков наилучший способ преобразования числа с плавающей
запятой в формате сопроцессора в строку символов
1. с фиксированным кол-м знаков после запятой
2. в экспоненциальном (по основанию 10) виде?

Ответ

Здравствуйте, Евгений!

В экспоненциальном, на мой взгляд.


Отправил эксперт: Василий
Эксперт отправил ответов (всего): 58

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №836

Прошу прощения у экспертов, но..
Хотелось бы ответить Alex_у на вопрос, что такое EQU.
так как об этой директиве можно сказать больше.
EQU от сокращенного Эквивалент.
Директива (как было уже сказано) для описания констант, чисел,символьных строк.
С родни знаку равенства =.
знак равенства = применяется только для чисел.
Есть тонкости.
Если описать имя константы с помощью EQU то изменить значение константы нельзя.
Применяя знак =, делать это можно свободно.
Ассемблер встретив описание с помощью EQU сохраняет текст этого выражения, а при помощи знака = - только его значение.
например:
шишек = 100
кедров =10
шишек_всего = шишек * кедров 'выражение

здесь выражене вычисляется сразу, и если далее в программе
ШИШЕК или КЕДРОВ измениться, значение ШИШЕК_ВСЕГО не измениться.
Если описать с помощью EQU:
шишек_всего QUE шишек * кедров 'выражение
то сохраняется текст выражения следующий за EQU,и далее
применяя в программе ШИШЕК_ВСЕГО мы получим истиный результат с учетом последних значений ШИШЕК и КЕДРОВ, как бы
они не менялись в программе.
Если я был не прав по отношению к правилам, то не топайте ногами.
Просто я вспомнил как в своем колхозе полгода распрашивал у окружающих про эту штучку.

Ответ

Здравствуйте, oleg!

Молоток, так держать!!!!!!!!!


Отправил эксперт: Василий
Эксперт отправил ответов (всего): 59

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №833

Здравствуйте!

Вот StaS, что ты хотел!!!

.model small
.data
bank db 160 dup (052h),160 dup (027h)
; каждый байт = тетрада + тетрада
; тетрада включает в себя биты I,R,G,B
; где I-яркость,R-красный,G-зеленый,B-голубой
; итого 16х16=256 цветов
.stack 100h
.code
start:
mov ax,@data
mov ds,ax

mov ax,0013h ; видеорежим 320 на 200 и 256 цветов
int 10h

mov ax,0a000h
mov es,ax

cld
mov si,offset bank
mov di,320*100
mov cx,320
rep movsb

mov ah,4ch
int 21h
end start

Вопрос экспертам.
Кто придумал эту глупость: сочетание красного, зеленого и
голубого? Ведь дураку понятно, что все цвета получаются
из красного, ЖЕЛТОГО и голубого:
К+Ж = оранжевый
К+Г = фиолетовый
Ж+Г = ЗЕЛЕНЫЙ
К+Ж+Г = коричневый
К+О+Ж+З+Г+С+Ф=белый

То же самое и в TV-set-е схемы: красный-зеленый,
красный-голубой. Что это? Ошибка?

С уважением,Alex12

Ответ

Здравствуйте, Alex12!

У нас в радиотехническом университете в том числе проходят курс телевидения. Так вот, по данному курсу существует огромное количество литературы. Возьми где-нибудь в библиотеке какую-нибудь книгу (желательно постарее, там обычно пишут более подробно) по цветному телевидению. Вот там ты обо всем узнаешь.


Отправил эксперт: Василий
Эксперт отправил ответов (всего): 60

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №839

Здраствуйте эксперты!
Обьясните как понимать такую строку: db 10 dup (10) и Text db '.......$'? db- зарезервировать ОДИН байт! dup зарезервировать ГРУППУ байт (вот тота я и непойму это(db 10 dup (10) и Text db '.......$')...).

P.S. Спасибо Василий за русиф (ну и не только...).

Ответ

Здравствуйте, Alex!
Так как ассемблер язык низкого уровня и имеет доступ к памяти, то в нем есть понятие смещения, поэтому Text поидее содержит первую '.', но при обращении к Text, допустим функ. 9 int 33 использует смещение и ищет 24h, т.е mov XX,byte ptr [Text][Y], где Y - смещение относительно Text! А dup используется для повторений одной и той же последовательности, заданной определенным типом!


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 94

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №837

Товарищи ЭКСПЕРТЫ подскажите ссылки по ОПТИМИЗАЦИИ ПРОГРАММ
и в частности OpenGL программ для Delphi!!!!

Ответ

Здравствуйте, Sniper!
На счет OpenGl, могу сказать: для рисования используй только три примитива(точка, линия, треугольник), знай хорошо высшую математику и никакой оптимизации тебе не потребуется!

А если тебе по OpenGl проги нужны,
то пиши по адресу: Orlando@kaluga.ru !
У меня есть пару десятков классных примерчиков(600 килов занимают)!


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 95

Экспертная группа: Оптимизация программ

Вопрос №839

Здраствуйте эксперты!
Обьясните как понимать такую строку: db 10 dup (10) и Text db '.......$'? db- зарезервировать ОДИН байт! dup зарезервировать ГРУППУ байт (вот тота я и непойму это(db 10 dup (10) и Text db '.......$')...).

P.S. Спасибо Василий за русиф (ну и не только...).

Ответ

Здравствуйте, Alex!

Пожалуйста!

Значит так. Формат примерно такой:
DB <число байт> DUP (<чем их заполнить по умолчанию>)
DW <число слов> DUP (<чем их заполнить по умолчанию>)
DD <число двойных слов> DUP (<чем их заполнить по умолчанию>)
Т.е. DB 10 DUP(10) приведет к тому, что в памяти ты получишь массив байт: 0A 0A 0A 0A 0A 0A 0A 0A 0A 0A (10 байт по 0Ah).
То же самое можно записать и так (но так дольше и длиннее):
DB 10
DB 10
DB 10
DB 10
DB 10
DB 10
DB 10
DB 10
DB 10
DB 10
Если тебе вдруг захотелось иметь в памяти массив символов, то для упрощения записи делают так:
DB 'abcde'
хотя можно было бы и так:
DB 'a' (или же DB 61h - код символа 'a')
DB 'b' (или же DB 62h - код символа 'b')
DB 'c' (или же DB 63h - код символа 'c')
DB 'd' (или же DB 64h - код символа 'd')
DB 'e' (или же DB 65h - код символа 'e')



Отправил эксперт: Василий
Эксперт отправил ответов (всего): 61

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №843

Здравствуйте всем

Проблема такая
Регистры Ah или Al могут содержать только 2 бита информации
Допустим мне лень писать mov al,1
ah,1

и я записал ax,11

Я если длина числа нечетная. По какому принципу он раскидает
его по регистрам?

С уважением...

Ответ

Здравствуйте, Александр!
Если al=2 и ah=1, то ax=0201h, т.е. старшая часть - ah,
а младшая - al!


Отправил эксперт: Orlando
Эксперт отправил ответов (всего): 96

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №843

Здравствуйте всем

Проблема такая
Регистры Ah или Al могут содержать только 2 бита информации
Допустим мне лень писать mov al,1
ah,1

и я записал ax,11

Я если длина числа нечетная. По какому принципу он раскидает
его по регистрам?

С уважением...

Ответ

Здравствуйте, Александр!
mov ax, 101h
первый байт_в_ah
второй_в_al


Отправил эксперт: АлександрМ
Эксперт отправил ответов (всего): 21

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №839

Здраствуйте эксперты!
Обьясните как понимать такую строку: db 10 dup (10) и Text db '.......$'? db- зарезервировать ОДИН байт! dup зарезервировать ГРУППУ байт (вот тота я и непойму это(db 10 dup (10) и Text db '.......$')...).

P.S. Спасибо Василий за русиф (ну и не только...).

Ответ

Здравствуйте, Alex!
Dup создаёт массив повторяющихся байт/слов/двойных слов, а Db может создать один байт (db '$'), а может - массив байт (db 'qwerty$', с таким же успехом db 'q', db 'w', db 'e', db 'r', db 't', db 'y', db '$', просто так проще, а после компиляции будет одно и то же.)


Отправил эксперт: DM
Эксперт отправил ответов (всего): 39

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Подписаться на рассылки

Рассылки Subscribe.Ru
Ассемблер? Это просто! Учимся программировать
Ассемблер? Это просто! Учимся программировать (FAQ)

Форма подачи вопроса

ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!

Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!


Ваше имя *:

Ваш e-mail *:

Подгруппы:

Вопрос *:

Прилагаемая программа (если необходимо):


Регистрация в качестве эксперта

Архив выпусков


Ведущий рассылки,

Калашников Олег: Assembler@Kalashnikoff.ru
ICQ No.:
68951340
URL сайта подписчиков: http://www.Kalashnikoff.ru

______________

По вопросам сотрудничества, рекламы и спонсорства обращайтесь:

  1. Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
  2. Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
  3. Издание книги (спонсорство): Sponsor@Kalashnikoff.ru

Рассылка 'Ассемблер? Это просто! Учимся программировать (FAQ)' Рассылка 'Ассемблер? Это просто! Учимся программировать'


(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу
Рейтингуется SpyLog

В избранное