Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: Qraizer
Дата сообщения: 25.08.2010 05:25
Что такое десятичный формат? FBSTP?
Автор: bomzzz
Дата сообщения: 25.08.2010 05:57
ну как бы да
Автор: bomzzz
Дата сообщения: 25.08.2010 12:16
сделал. только вот не понятно почему на такую команду пишет
fist несоответсвие размеров
fistp а на такую не пишет. хотя вроде по описанию это означает только выталкивание результата из сопроцессора

разобрался операции с 80 битовыми только опции с p могут делать
Автор: bomzzz
Дата сообщения: 25.08.2010 15:00
а вот интересно на всех компьютерах сопроцессор есть?
Автор: Qraizer
Дата сообщения: 26.08.2010 05:34
Уже да. Все FPU сынтегрированы с CPU, начиная с i486. Исключения были только для 486SX и K°, эдакие целероны. Начиная с Pentium (который P5) исключений больше нет.

Добавлено:
Вот если ты имел ввиду не только x86, то там сложнее. Не у всех, но из процессоров десктопного направления таковые редкость.
Автор: bomzzz
Дата сообщения: 26.08.2010 08:00
просто насколько корректно использовать в программе сопрцоессор

Добавлено:
скажем если у человека винда хп, или даже 2000 - у него сопроцессор есть? хотя обычно программы соместимость пишут и на 98 винду.
чета не смог с ходу придумать как 64 битное 16 ричное число в десятичное перевести без сопроцессора

Добавлено:
15 значное десятичное асци число в шестнадцатиричное придумал как перевести, а как 64 битное 16 ричное в десячтиное никак не придумывается, разве что в столбик
Автор: VGrad
Дата сообщения: 31.08.2010 04:00

Цитата:
а вот интересно на всех компьютерах сопроцессор есть?
Начиная с Pentium инегрированы, а в ранних моделях нужно смотреть на материнскую плату.

Цитата:
486SX и K°, эдакие целероны
Celeron скорее обозначает кастрированный L2 Cache, а не отсутствие сопроцессора.

Цитата:
просто насколько корректно использовать в программе сопрцоессор
Корректно !
Даже при его отсутствии ОС Windows сэмулируют выполнение его комманд.

Автор: bomzzz
Дата сообщения: 31.08.2010 05:32
Автор: bomzzz
Дата сообщения: 04.09.2010 09:40
никто не подскажет - задаю палитру видеоадаптеру из 256 цветной бмп картинки.
в бмп же все задом наперед, поэтому пытаюсь цвета поллитры задавать от FF к 0. и вот фигу, не задается. а от 0 к FF задается. нельзя что ли задом наперед?
Автор: ZorgeHT
Дата сообщения: 05.09.2010 13:13
bomzzz, "задом наперед" имеется в виду не от FF к 0, а Blue Green Red вместо Red Green Blue в компонентах цвета.
Если BMP 32-х битный, то соответственно Blue Green Red Alpha.
А сама палитра именно что от 00 к FF индексирована.

Если к видеоадаптеру обращаетесь напрямую (или через прерывание int 10 в DOS) и он VGA, то у него значения составляющих в палитре хранятся в регистрах по 6 бит, то есть значения составляющих в палитре нужно еще и сдвигать на два разрядов вправо, чтобы поместились в сетку регистров контроллера, иначе на экране будет фигня вместо изображения.
Автор: bomzzz
Дата сообщения: 05.09.2010 13:20
нет имееться ввиду задавать палитру не от 0 до FF а от FF к 0.
если бы фигня получилась это было бы еще ничего, а не получается вообще ничего при таком задании поллитры

Добавлено:
поллитра то идет правильно в бмп, только порядок цветов не в том порядке, но цикл loop в ассемблере идет в сторону уменьшения от заданного числа циклов до 0, поэтому для оптимизации кода я заменил организованные цикл через проверку на loop, и задавал поллитру адаптеру задом наперед - от ff до 0. но в этом случае ничего не получилось картинка получилась черным квадратом, то есть как будто не задались цвета. вот я и спрашиваю можно ли задавать поллитру так - потому как не нашел никаких замечаний на этот счет
Автор: bomzzz
Дата сообщения: 06.09.2010 00:22
нет можно задом наперед задавать. видимо какую то ошибку ляпнулю заново переписал все работает
на 7 байт короче стало
Автор: bomzzz
Дата сообщения: 06.09.2010 02:57
как досовская программа может получить свое имя? ну или открыть сама себя??

если на нулевую строку сослаться она вообще ниче не открывает.
исли из псп выудить имя cmdline= , то под виндой такое не работает
Автор: SERGE_BLIZNUK
Дата сообщения: 06.09.2010 07:51
DOS программы могли получить своё имя через PSP
например, вот здесь
ОПЕРАЦИОННАЯ СИСТЕМА DOS Прикладные программы в среде DOS Префикс программного сегмента
цитирую:

Цитата:
Слово префикса с относительным адресом 002СН хранит сегментный адрес блока окружения, в котором находится несколько АSCIIZ-строк (последовательности символов в коде АSCII, заканчивающиеся нулевым байтом). Блок окружения наследуется от программы, которая вызывала функцию ЕХЕС для загрузки выполняющейся в данный момент программы. В блоке находится такая информация, как текущий путь, используемый программами файла СОММАND.СОМ для поиска выполнимых программ, расположение на диске самого файла СОММАND.СОМ, формат запроса пользователя, который выдается СОММАND.СОМ. Хвост команды - это остаток командной строки (после имени программы), запустившей транзитную программу; хвост команды копируется в префикс, начиная с относительного адреса 0081Н. Длина хвоста команды, без учета символа возврата в конце строки, помещается в байт с относительным адресом 0080Н.


под Windows это всё работает (т.к. эмулируется работа DOS).

Автор: bomzzz
Дата сообщения: 06.09.2010 10:08
если бы было так просто я бы не спрашивал, и естсественно сам проверил и попробовал сначала
разница как видищь существенная и главное об имени ни слова

Добавлено:
разве через Е2 выполнить комманду echo %0 это работает с третьего доса. и получить имя из входного потока консоли.
Автор: Qraizer
Дата сообщения: 07.09.2010 04:14
bomzzz, ну ты б прочитал бы какой-нибудь материал по блоку окружения, а. За концом блока окружения (два подряд нуля) лежит его расширение. Сначала WORD - циферка, сколько строк в расширении, затем сами строки. Первая строка, и чаще всего единсвтенная - полный путь с маршрутом.
Автор: bomzzz
Дата сообщения: 07.09.2010 10:17
если бы знать заранее что читать может и почитал бы
psp кончается двойным нулем, потом идет 01 00, и за ним путь с именем заканчивающееся нулем.
Автор: bomzzz
Дата сообщения: 11.09.2010 06:30
а как некоторые программы умудряются так открывать файлы для записи, что эти файлы остаются доступны и для чтения и для записи другим программам, которые так тоже умеют (записи) и не умеют тоже (только чтения).

они какую то специальную функцию используют или пишут прямо на диск, или перехватывают чужие хендлы и открывают файл только на момент записи и тут же закрывают... типа такого
Автор: Abs62
Дата сообщения: 11.09.2010 10:42
bomzzz
Читай описание функции CreateFile, флаги FILE_SHARE_******.
Автор: bomzzz
Дата сообщения: 11.09.2010 13:07
http://www.vsokovikov.narod.ru/New_MSDN_API/Menage_files/fn_createfile.htm

а тогда у файла будет свой указаетль для каждого открывшего его процесса или надо самому считать указатель через овердапед структуру. тут чета ниче не написано пра ето.
Автор: Abs62
Дата сообщения: 11.09.2010 14:27
bomzzz
У каждого хэндла, возвращаемого CreateFile, свой указатель.
Автор: bomzzz
Дата сообщения: 11.09.2010 14:29
спс
Автор: Vostrikovskiy
Дата сообщения: 15.09.2010 20:48
Кто-нибудь сталкивался с эффективной программой перемножения матриц?
Автор: bomzzz
Дата сообщения: 16.09.2010 03:08
Vostrikovskiy
википедию посмотри
Автор: Benchmark
Дата сообщения: 18.09.2010 16:17
bomzzz

Цитата:
как досовская программа может получить свое имя?


Ну например так:

mov ax, 1203h
int 2Fh
lds dx, ds:[bp-1Ah]

В результате dx будет указывать на имя программы. Заработает это под windows или нет - х.з.
Автор: bomzzz
Дата сообщения: 20.09.2010 10:35
как в TASM скомпилировать BIN файл?
Автор: VIP777VIP
Дата сообщения: 01.10.2010 10:45
Люди, хочу начать учить ассемблер. Подскажите, плиз, с чего начать? Какую литературу почитать?
Автор: bomzzz
Дата сообщения: 01.10.2010 11:11
любую. по ассемблеру нет хороших книжек - хороших в смсысле просто и доходчиво написанных, в расчете на знания школьника. одной не обойдешься. будешь из разных выкалупывать. по крайней мере мне не попадалось. для любой уже нужна некая база знаний, опираясь на которую ты сам и выбирай что тебе лучше
Автор: iMPRE7
Дата сообщения: 12.10.2010 16:45
Добрый день,

Мне нужно ввести с клавиатуры восьмеричное число и перевести его в десятичное. Сама процедура мне понятна. Но как дать асму знать что это именно восьмеричное число? Пробовал добавлять "o" например 173o. Но мне это не очень подходит. Поделитесь пож кто что знает.

Спс заранее
Автор: Benchmark
Дата сообщения: 15.10.2010 01:21
iMPRE7

Цитата:
Пробовал добавлять "o" например 173o


А зачем ?

В восьмеричном числе могут быть только цифры от 0 до 7, т.е. символы с кодами от 30h до 37h. Если введенная строка удовлетворяет этому условию, значит считать, что введено восьмеричное число, если в строке нашелся любой другой символ - выводить ошибку. Ну и код что-то вроде:

lea si, input_str ; введенная строка
mov cx, input_str_length ;длина введенной строки
test cx, cx
jz error ; строка нулевой длины нам не нужна
check_input:
lodsb
cmp al, 30h
jb error
cmp al, 37h
ja error
loop check_input ; проверяем поочередно все символы
jmp convert_input ; переходим на код конвертации в десятичное число
....
error:
тут_ругаемся_на_ошибку

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.