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

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


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

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

Выпуск № 256
от 25.04.2002, 02:05

Администратор: Калашников Олег
Сайт Администратора: Программирование на Ассемблере


Старейшины рассылки
(по состоянию на 25.04.2002, 02:05)

1. Broken Sword - ответов: 450.
2. Painbringer (нечто наподобие домашней страницы) - ответов: 384.
3. Sensey - ответов: 362.
4. DiGiT - ответов: 338.
5. Dron (Операционная система с нуля!) - ответов: 335.



 Вопрос № 118

Добрый день.
Подскажите, как прочитать матрицу(к примеру 20*20) из входного файла(txt).
Желательно, показать кусок кода.
Заранее, спасибо.

Отправитель: PoZiTroN
Вопрос отправлен: 20.04.2002, 17:39
Подгруппа: Пользовательская работа с Windows

_______________

Отвечает Asmer
Здравствуйте, PoZiTroN!
Лови свеженькое! Эта прога читает матрицу и выводит её на экран.
Пиши, если что!
Удачи, PoZiTron!


Приложение:


Отправлено: 20.04.2002, 22:14
Отправитель: Asmer (регистрация: 12/04/2002, ответов на счету: 44)
LegION
Россия, Димитровград




 Вопрос № 92

Уважаемые эксперты, подскажите пожалуйста: можно ли в режиме линейной адресации пользоваться строковыми командами типа stosb, stosw, movsd и прочими.
В примере из книги В.Кулакова "Программирование на аппаратном уровне" производится настройка регистров FS или GS на расширеную память. Аналогичным образом пытался настроить ES - всё работало, при этом обращение к памяти производилось так: mov FS:[EDI],AL, если использовать ES, то: mov ES:[EDI],AL, тоже работает, но когда:

mov EDI,LinearAddres
mov AX,1234h
cld
stosw

система (DOS) зависает. В чём фигня?

Отправитель: Алексей (LastyCat@rambler.ru)
Вопрос отправлен: 19.04.2002, 10:12
Подгруппа: Общие вопросы по программированию на Ассемблере под DOS

_______________

Отвечает DiGiT
Доброе время суток, Алексей!
Скорее всего нет нельзя так как в дос не включена 32 битная адресация, и команды stosx по умолчанию будут адресовать через si , di а не edi,esi.


Отправлено: 19.04.2002, 11:08
Отправитель: DiGiT (регистрация: 28/12/2001, ответов на счету: 338)
ICQ:133534725
Russia(),Student

_______________

Отвечает Beeblebrox
Приветствую Вас, Алексей!
Подозреваю, что ошибка может крыться в нарушении страничной защиты. Например, edi указывает на конец страницы, тогда с al фокус проходит, а когда работаешь со словами, следующий байт попадает в другую страницу, которая может быть защищена. Это всего лишь гипотеза, из формулировки вопроса сложно сделать какие-то серьезные выводы.


Отправлено: 19.04.2002, 11:46
Отправитель: Beeblebrox (регистрация: 13/03/2002, ответов на счету: 80)
URL: http://beeblbrx.narod.ru - Beeblebrox / TMA HomePage
ICQ #75393045
Ukraine, Kharkov

_______________

Отвечает Dron
Добрый день, Алексей!

Это зависит от того, куда указывает es...
сегмент должен быть корректен. если пользуешься экстендерами, то в случае некорректности получишь эксепшин.
если делаешь что-то сам - установи экспешины, дабы отлавливать свои же ошибки.

у меня все работает и в линейном режиме и со страничным преобразованием. :)


Отправлено: 19.04.2002, 11:58
Отправитель: Dron (регистрация: 28/12/2001, ответов на счету: 335)
Информзащита
Адрес: Москва
URL: http://asmdev.narod.ru/asmos.html - Операционная система с нуля!
2144510
Россия, Москва

_______________

Отвечает Топор
Доброе время суток, Алексей!

Можно, но иногда команды сканирования двойных слов не работают как задумано - чешут байты или слова. LinearAddres - проверь её размерность, в данном случае нужно DD.

Удачи !



Отправлено: 19.04.2002, 21:40
Отправитель: Топор (регистрация: 15/03/2002, ответов на счету: 87)
Радио "Эхо Москвы в Самаре"
Адрес: 443011, Самара, ул. Советской Армии, 217
Тел.: (8462)160302, 162918
URL: http://listen.to/btemple - Хорошая Русская Металлическая команда
Россия, Самара




 Вопрос № 93

Привет всем!
Вот реальный лист с траблами одного далекого от компутеров человека:
1) Ошибка системных файлов!
2) Не находится Windows-98("где он" зачеркнуто), Windows-95 находится на диске D, а где 98?
3) Отсоединены провода на панели корпуса и кнопка турбо.
4) Как повысить частоту и на сколько? Хотелось бы на 233Мгц. (хотя у самого П100)
5) Возможно затаился где-то вирус.(Выскакивал).
6)

ЗЫ. Не отвечайте через рассылку, если что. :)))

Отправитель: Эксперт DiGiT (digit@economy.chita.ru)
Вопрос отправлен: 19.04.2002, 10:23
Подгруппа: Общие вопросы по программированию на Ассемблере под DOS

_______________

Отвечает Asmer
Здравствуйте, DiGiT!
На вопросы 1,2-отвечаю format c: format d: и поставь себе нормальную винду.
возможно решишь проблему 5.
На 4 вопрос отвечаю-Либо с помощью биоса, есть такая фишка на AMI.
Либо с помощью джамперов. Смотри в руководство по своей матери и ищи джампера
для повышения частоты своей шины. сотку реально догнать до 166. 233-кулер надо больно мощный.
Дешевле купить новый проц ;).
5- Dr.Web . Прогони пару раз и всё будет пучком. Да, чуть не забыл когда
вирус будет выскакивать ещё раз постарайся его поймать.;). Пиши если что.
Удачи, DiGiT!


Отправлено: 20.04.2002, 08:38
Отправитель: Asmer (регистрация: 12/04/2002, ответов на счету: 44)
LegION
Россия, Димитровград




 Вопрос № 94

У меня вопрос к именитым экспертам Dron и DiGiT.
Вы чего народ вводите в заблуждение?

Отвечает DiGiT
Здравствуйте, Rust_br!
Не работает, не позволят 386-ой из памяти заносить в стек, а константы пожалуйста.

Отвечает Dron
Приветствую Вас, Rust_br!
Очень просто...
потому что нет такой команды
push mem16...
есть либо push r16/32 либо push imm16
Я понятно написал? либо непосредственное значение, либо регистр. третьего не дано.

Стыдно, господа!

Отправитель: Эксперт Beeblebrox
Вопрос отправлен: 19.04.2002, 10:39
Подгруппа: Общие вопросы по программированию на Ассемблере под Win32

_______________

Отвечает DiGiT
Приветствую Вас, Beeblebrox!
Ты что бунтуешь. Если в IBM PC не определена операция mem to mem мы ж не виноваты. А остальное мож и компилятор сам преобразует к виду
mov reg,mem
push reg
Это уже не наши проблемы. Но запомните опереция mem to mem невозможна.


Отправлено: 19.04.2002, 11:03
Отправитель: DiGiT (регистрация: 28/12/2001, ответов на счету: 338)
ICQ:133534725
Russia(),Student

_______________

Отвечает Dron
Доброе время суток, Beeblebrox!

Я не понял это наезд или справедливая критика? если это попытка на справедливую критику - где доказательства?
приведи мне программу с такой вот командой, которая компилится!
или, что еще лучше - код такой команды... :)

а то, что ты написал - это наезд.


Отправлено: 19.04.2002, 12:02
Отправитель: Dron (регистрация: 28/12/2001, ответов на счету: 335)
Информзащита
Адрес: Москва
URL: http://asmdev.narod.ru/asmos.html - Операционная система с нуля!
2144510
Россия, Москва

_______________

Отвечает Пуля
Приветствую Вас, Beeblebrox!
Я бы даже сказал не "господа" а товварищи...
"стыдно" - ИМ ? Ха ха ха. Кто ИХ опускать то будет ? Правильно, никто. И уж темболее не с моими 20-тью ответами жаловаться...
А вообще у них юмор такой, понимаешь ? Я тоже.

P.S.
Адрес не кинул - засоряю рассылку...

(expertpulya@narod.ru)



Отправлено: 19.04.2002, 12:55
Отправитель: Пуля (регистрация: 25/03/2002, ответов на счету: 32)
URL: http:\\www.1c.ru - Windows Must Die
Россия, Омск

_______________

Отвечает masquer
Доброе время суток, Beeblebrox!
Абсолютно согласен.


Отправлено: 19.04.2002, 19:12
Отправитель: masquer (регистрация: 16/01/2002, ответов на счету: 111)
Украина, Николаев




 Вопрос № 96

Здравствуйте
Имеется две строки. Одна передается в переменную из командной строки, а другая регистрами ds:dx. Как их сравнить?

Отправитель: Unknown User (irvinek@mail.ru)
Вопрос отправлен: 19.04.2002, 14:17
Подгруппа: Общие вопросы по программированию на Ассемблере под DOS

_______________

Отвечает User
Здравствуйте, Unknown User!
Смотри прогу в приложении. Конечно ее можно и нужно оптимизировать, но она писалась на скорую руку, поэтому прими ее так как есть.


Приложение:


Отправлено: 19.04.2002, 17:06
Отправитель: User (регистрация: 08/04/2002, ответов на счету: 30)
Уфа

_______________

Отвечает Топор
Доброе время суток, Unknown User!

Примерный вариант смотри в приложении. Надо только помнить, что командная строка содержит ПОЛНЫЙ путь к файлу и параметры.

Удачи !


Приложение:


Отправлено: 19.04.2002, 21:33
Отправитель: Топор (регистрация: 15/03/2002, ответов на счету: 87)
Радио "Эхо Москвы в Самаре"
Адрес: 443011, Самара, ул. Советской Армии, 217
Тел.: (8462)160302, 162918
URL: http://listen.to/btemple - Хорошая Русская Металлическая команда
Россия, Самара

_______________

Отвечает DiGiT
Здравствуйте, Unknown User!
Командой repe cmpsb
Правда в асме нет такого понятия как переменная, а все якобы переменные это просто смещения.


Отправлено: 20.04.2002, 06:01
Отправитель: DiGiT (регистрация: 28/12/2001, ответов на счету: 338)
ICQ:133534725
Russia(),Student

_______________

Отвечает Samodelkin
Добрый день, Unknown User!
побайтно :) ... есть же команды сравнения строк... инициализируй CX длиной командной строки, di, si смещениями строк и rep сравнивай на здоровье


Отправлено: 20.04.2002, 08:39
Отправитель: Samodelkin (регистрация: 09/04/2002, ответов на счету: 59)
ICQ UIN#125903600
Иркутск

_______________

Отвечает v4D
Приветствую Вас, Unknown User!

Есть командочка cmps. Вот её синтаксис:
cmps адрес_приёмника(в es:edi/di), адрес_источника(в ds:esi/si)
Если нужно несколько раз сравнивать, тогда перед cmps добавляется префикс repe(repz) или repne(repnz).
repe(repz) - сравнение, пока не будет достигнут конец цепочки или если встретятся разные элементы.
repne(repnz) - аналогична предыдущей, только наоборот...


Отправлено: 20.04.2002, 22:50
На момент выхода рассылки эксперт в базе не был найден либо недавно сменил пароль.




 Вопрос № 97

Здраствуйте эксперты!
Как удалить файл без какой-либо возможности востановления? Посоветуйте программу такого рода или еше чтонить...!
С уважением... .

Отправитель: kuper (kuper@hotbox.ru)
Вопрос отправлен: 19.04.2002, 14:23
Подгруппа: Пользовательская работа с Windows

_______________

Отвечает Артём Шегеда
Доброе время суток, kuper!

В пакете NortonUtilites2002 есть фишка, которая зовётся WipeInfo (по-русски: уничтожитель информации). Она убивает всё, что можно убить (с благословления юзера, конечно :).
Кроме того, FAR умеет уничтожать файлы. Комбинация Alt-Del ставит точку на существовании любого файла.
А вообще, можно даже самому написать такую программу - даже на Pascal: быстрее получится. Идея расписана в документации на FAR, но я повторю.
1. Открывается файл для чтения/записи.
2. Пробивается по всей длине "мусором" (можно просто нулями).
3. Размер усекается до нуля.
4. Файл удаляется.

И ещё. Я слышал, что существуют способ, позволяющий восстанавливать информацию на магнитном носителе даже после того, как поверх неё была произведена запись. Но это уже чуть ли не военные технологии. Для домашнего пользователя это разорительный способ восстановления...


Отправлено: 19.04.2002, 15:59
Отправитель: Артём Шегеда (регистрация: 28/12/2001, ответов на счету: 124)
URL: http://www.shegeda.chat.ru/ - Пристанище неодинокого программиста
x-USSR, Харьков

_______________

Отвечает freeseacher
Добрый день, kuper!
в сети смотри програмулю kremlin она не только стирает без восстановления но и файлы шифрует и вообще много чаго исчо умеет. 30$ ??? !!!
так же есть sure delete (про нее много говорят, но никто ее не видел), сам не ставил рекламить не буду.
Но мона свою написать! это не сложно и будешь абсалютно уверен, что она не сохранила тебе инфу где-нить в другом месте.
Пишется элементарно:
1. открываешь файл удаляешь 5 строк и сохраняешь его и это в цикле.
2. определяешь где файл физически лежит и перезаписываешь это место раз 10-20.


Отправлено: 19.04.2002, 18:09
Отправитель: freeseacher (регистрация: 03/02/2002, ответов на счету: 84)
Тел.: 8(3832)366362
Новосибирск

_______________

Отвечает Samodelkin
Приветствую Вас, kuper!
элементарно - затереть его содержимое нуликами... а потом проссто удалитьт ... wipeinfo из norton utilities примерно это самое и делает, очень тщательно


Отправлено: 20.04.2002, 08:41
Отправитель: Samodelkin (регистрация: 09/04/2002, ответов на счету: 59)
ICQ UIN#125903600
Иркутск

_______________

Отвечает Ghost
Здравствуйте, kuper!
Есть специальные программы которые удаляют наверняка т.е. физически, на место файла прописывают нули или одинички, такие проги как правило наз. VIP программами, есть в пакете Дядюшки Нортона.


Отправлено: 20.04.2002, 10:57
Отправитель: Ghost (регистрация: 30/03/2002, ответов на счету: 41)
ua, Odessa

_______________

Отвечает Tiger
Здравствуйте, kuper!
Для этих целей есть множество прог. Лично меня устраивает программа WipeInfo, что входит в комплект утилит Дядюшки Нортона (может и отдельно где есть, не знаю).
Смысл этих прог в чем? В том, что на то место, которое занимал файл много раз (можешь сам установить сколько) перезаписывается какая-нить беспорядочная последовательность единичек и нулей вот и все. Таким образом усложняется прощесс восстановления этой инфы. Естественно, чем больше перезаписываешь, тем сложнее восстанавливать, но и времени знаимает больше.


Отправлено: 20.04.2002, 12:03
Отправитель: Tiger (регистрация: 28/12/2001, ответов на счету: 191)
URL: http://www.tigeer.narod.ru - Что-то вроде того

_______________

Отвечает Blackeye
Приветствую Вас, kuper!
Можно использовать Norton Wipe из Nrton Utilities


Отправлено: 21.04.2002, 18:23
Отправитель: Blackeye (регистрация: 15/02/2002, ответов на счету: 98)
URL: http://www.soft4master.h1.ru - Delphi, my programms...
Украина, Запорожье

_______________

Отвечает Lonely L
Добрый день, kuper!

Самый простой способ. Записать вместо текущей информации, какую нибуть чепуху. А потом удалить.


Отправлено: 21.04.2002, 21:11
Отправитель: Lonely L (регистрация: 26/01/2002, ответов на счету: 56)
Тел.: (0572) 11-66-62
Украина, Харьков

_______________

Отвечает Frank
Добрый день, kuper!
Ну если на асме то можешь прочитать из ФАТа в каких кластерах лежит твой файл и забить все нулями.
А если проще, то в нортон утилитах есть такая функция как обнулить свободное пространство.


Отправлено: 21.04.2002, 22:21
Отправитель: Frank (регистрация: 14/01/2002, ответов на счету: 177)
КПИ,ФЭЛ,ДА-02
ICQ: 100341415 E-mail: Frank_U@mail.ru
Украина, Киев




 Вопрос № 104

Уважаемые эксперты !
У меня такой вопрос. Как в консольном режиме под Win 9x, в Visual C++ 6, выводить символы с нужными аттрибутами в нужную позицию, в "conio.h" нужные функции отсутсвуют.
P. S а можно ли вообще вызывать функции BIOS под Windows?

Отправитель: Andrew_XX
Вопрос отправлен: 19.04.2002, 18:50
Подгруппа: Пользовательская работа с Windows

_______________

Отвечает LAO
Доброе время суток, Andrew_XX!
gotoxy(int x,int y) - установить курсор в позицию x, y
textattr(int attr), textbackground(int color), textcolor(int color) - аттрибуты цвета
cprintf(const char *format[,argument,...]), putch(int ch), cputs(const char *str) - вывод строк и символов с заданными аттрибутами цвета (см. выше).
Все функции объявлены в conio.h. :))
BIOS под Windows - далеко не все и вообще не желательно. Лучше через функции API.


Отправлено: 19.04.2002, 20:36
Отправитель: LAO (регистрация: 05/03/2002, ответов на счету: 102)
Россия, Москва

_______________

Отвечает Dream
Приветствую Вас, Andrew_XX!
С какими атрибутами? ты наверно имееш в виду цвет символов и
палитры - если да, то нет ничего проще -к примеру так:

#include

void main()
{
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
SMALL_RECT srct;
CHAR_INFO chiBuffer[160];
COORD coord1, coord2;
char ddd[666];
CharToOem("2:5095/38 - Ура! Да Здраствует Ассемблер и С++", ddd);
DWORD cWritten;
coord1.Y = 0; coord1.X = 0;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsoleOutputCharacter(hStdout, ddd, lstrlen(ddd), coord1, &cWritten);
for (int i = 0; i < lstrlen(ddd); i++)
{
WORD wColors = 1 + i * 3;
coord1.X = i;
WriteConsoleOutputAttribute(hStdout, &wColors, 1, coord1, &cWritten);
}
srct.Top = 0; srct.Left = 0; srct.Bottom = 1; srct.Right = 79;
coord1.Y = 0; coord1.X = 0;
coord2.Y = 1; coord2.X = 80;
ReadConsoleOutput(hStdout, chiBuffer, coord2, coord1, &srct);
for (i = 0; i < 50; i++)
{
srct.Left = (SHORT)((double)(79 - lstrlen(ddd)) * rand() / RAND_MAX);
srct.Top = (SHORT)((double)25 * rand() / RAND_MAX);
srct.Bottom = srct.Top + 1;
WriteConsoleOutput(hStdout, chiBuffer, coord2, coord1, &srct);
}
Sleep(10000);
}

С наилучшими пожеланиями Dream...



Отправлено: 19.04.2002, 21:07
Отправитель: Dream (регистрация: 18/04/2002, ответов на счету: 7)
Ukraine, Kamenka-Dneprovskaya

_______________

Отвечает DiGiT
Приветствую Вас, Andrew_XX!
Юзай маздайные консольные функции. набери Console function и там разберешься.


Отправлено: 20.04.2002, 05:57
Отправитель: DiGiT (регистрация: 28/12/2001, ответов на счету: 338)
ICQ:133534725
Russia(),Student

_______________

Отвечает Asmer
Приветствую Вас, Andrew_XX!
Отвечу на поскриптум. Можно хоть из под чего, лишь бы BIOS на матери был.
Счастливо!



Отправлено: 20.04.2002, 08:36
Отправитель: Asmer (регистрация: 12/04/2002, ответов на счету: 44)
LegION
Россия, Димитровград

_______________

Отвечает Артём Шегеда
Добрый день, Andrew_XX!

Вообще-то этот вопрос не в ту тему был задан (это явно не "пользовательская работа"), но я отвечу.
Коль у тебя стоит VC, то должен быть и Win32 SDK Documentation. Если нет - возьми любой компакт с Delphi и поставь документацию. Это вступление.
А теперь по сути вопроса.
Консоль - неотъемлемая часть любой операционной системы, а посему, ОС должна обеспечивать работу с консолью. Логично было бы предположить, что Windows позволяет выполнить такие элементарные операции, как позиционирование курсора или вывод символа с заданными атрибутами. И это так.

BOOL WriteConsoleOutput(
HANDLE hConsoleOutput, // handle to a console screen buffer
CONST CHAR_INFO *lpBuffer, // pointer to buffer with data to write
COORD dwBufferSize, // column-row size of source buffer
COORD dwBufferCoord, // upper-left cell to write from
PSMALL_RECT lpWriteRegion // pointer to rectangle to write to
);

выводит строку символов с заданными атрибутами. Хотя "строка символов" - это слабо сказано. Каждый символ строки представлен в Unicode и имеет свой атрибут (правда, цветов маловато - 16). Если нет интереса раскрашивать экран, используй WriteConsole - она попроще, а если нужно только заменить цвет, то BOOL WriteConsoleOutputAttribute тебе поможет.
В общем, писать под Win32 API, не имея под рукой документацию, очень сложно. Не легче от того, что имея Help, не умеешь им пользоваться.

Удачи!


Отправлено: 20.04.2002, 11:43
Отправитель: Артём Шегеда (регистрация: 28/12/2001, ответов на счету: 124)
URL: http://www.shegeda.chat.ru/ - Пристанище неодинокого программиста
x-USSR, Харьков



КОММУНИКАЦИОННЫЙ ЦЕНТР

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и приложение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (78)
C / C++ (1)
Perl (1)
Delphi (2)
Pascal (2)
Basic / VBA (1)
Java / JavaScript (1)
PHP (1)
MySQL / MSSQL (1)
Пользователю
Windows 95/98/Me (69)
Windows NT/2000/XP (70)
"Железо" (62)
Поиск информации (1)
Администратору
Windows NT/2000/XP (1)
Linux / Unix (1)
Юристу
Гражданское право (26)
Уголовное право (1)

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




SpyLOG be number one SUPERTOP

© 2000 - 2002 Россия, Москва. Авторское право: Калашников О. А.


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

В избранное