Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Ассемблер? Это просто! Учимся программировать (FAQ)
Ассемблер? Это просто! Учимся программировать (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
Подписаться на рассылки
Форма подачи вопроса
ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!
Регистрация в качестве эксперта
Архив выпусков
Ведущий рассылки,
Калашников Олег:
Assembler@Kalashnikoff.ru
ICQ No.: 68951340
URL сайта подписчиков:
http://www.Kalashnikoff.ru
______________
По вопросам сотрудничества, рекламы и спонсорства обращайтесь:
- Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
- Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
- Издание книги (спонсорство): Sponsor@Kalashnikoff.ru
(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав. |
Реклама на сайте Kalashnikoff.ru
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу | Рейтингуется SpyLog |
В избранное | ||