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

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


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

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

Выпуск № 658
от 03.11.2003, 23:10

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 4420
Отправлено ответов: 12756
Активность: 288.5 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Евгений Иванов
Статус: Профессиональный
Общий рейтинг: 141.98
URL: Super Assembler Software
Телефон: НСС +7 831 3107039
[Подробней >>]
never_again
Статус: Доверительный
Общий рейтинг: 137.66
[Подробней >>]
dr_dolphin
Статус: Доверительный
Общий рейтинг: 119.31
[Подробней >>]
 
netus
Статус: Начальный
Общий рейтинг: 107.31
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 117.12
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 112.74
[Подробней >>]
 
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 110.82
[Подробней >>]
_vt
Статус: Профессиональный
Общий рейтинг: 121.05
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 106.53
URL: Savage Metal Club - жизнь в стиле рок-н-ролл
Телефон: +7 901 710 3146
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 4392. Уважаемые эксперты ,возможно ли сделать функцией wsprintf сделать форматированую конверсию из це... (ответов: 2)
Вопрос № 4393. Добрый вечер. Нужно написать ф-ию, добавляющую в конец одной строки другую строку(char s1[],s2[]). К... (ответов: 4)
Вопрос № 4394. Эй, чуваки! Зацените Бит!!!! (особенно те, кто только учится) Эта типа самомодифицирующаяся демка в... (ответов: 3)
Вопрос № 4395. Уважаемые эксперты, я слышал об ассемблере очень много и эти мнения были разнообразны. Сам я занимаю... (ответов: 3)
Вопрос № 4396. Народ помогите! Как мне на асме включить компьютер, т.е. как изменить дату и время включения в CMOS?... (ответов: 1)
Вопрос № 4397. Уважаемые эксперты ! Есть код на Сях. //----------------- char *m; m = (char*) malloc(0xFF); m='... (ответов: 3)
Вопрос № 4398. Здравствуйте уважаемые эксперты. Где можно достать справочник по всем функциям BIOS?... (ответов: 3)
Вопрос № 4399. Привет всем. У нас в юнивере преподы по АСМу тупые - тупые (по поводу преподавания). Как пример - н... (ответов: 3)
Вопрос № 4400. Здравствуйте уважаемые эксперты. Я зарегистрировался экспертом под именем Frost. Мне написали, что ч... (ответов: 3)

Вопросов: 9, ответов: 25


 Вопрос № 4392

Уважаемые эксперты ,возможно ли сделать функцией wsprintf сделать форматированую конверсию из целого в строку вот в таком формате 9 999 999 т.е каждые три знака отделяются пробелом ,если возможно , то как если нет ,то как это можно сделать другим способом , заранее благодарен .....



Вопрос отправлен: 29.10.2003, 16:23
Отправитель: greg

[Следующий вопрос >>] [Список вопросов]

Отвечает Евгений Иванов

Здравствуйте, greg!
Дели на 1000 и получай свои 3 знака и так далее...
* EMan: ---===*** Любовь существует! ***===---


Ответ отправлен: 29.10.2003, 17:29
Отправитель: Евгений Иванов


Отвечает never_again

Добрый день, greg!
Ребята, вы издеваетесь? Второй вопрос подряд по С!!! Это вообщето раздел для Ассеблерщиков, а для Сишников своя комнатка есть!!!


Ответ отправлен: 29.10.2003, 23:54
Отправитель: never_again


 Вопрос № 4393

Добрый вечер.
Нужно написать ф-ию, добавляющую в конец одной строки другую строку(char s1[],s2[]).
Как это можно сделать?
Спасибо.



Вопрос отправлен: 29.10.2003, 19:03
Отправитель: Char

[Следующий вопрос >>] [Список вопросов]

Отвечает dr_dolphin

Здравствуйте, Char!
Либо функцией WinAPI lstrcat, либо обычным
копированием области памяти в другую область
(командой movs например).
Удачи !


Ответ отправлен: 30.10.2003, 07:33
Отправитель: dr_dolphin


Отвечает Евгений Иванов

Здравствуйте, Char!
lstrcat используй и будь счастлив...
* EMan: ---===*** Любовь существует! ***===---


Ответ отправлен: 29.10.2003, 19:35
Отправитель: Евгений Иванов


Отвечает never_again

Здравствуйте, Char!
возьми массив по длинне равный двум твоим массивам вместе плюс один (для ноля) и впиши сначала первую, а потом вторую строку. для этого в С кажется даже функция есть специальная. полистай Help Borland'овсик и посмотри все функции которые на str начинаются.


Ответ отправлен: 29.10.2003, 23:50
Отправитель: never_again


Отвечает netus

Здравствуйте, Char!
Попробуй так:
DATASEG

; в Str1 первая часть информационная,
; а вторая как некоторый буфер который будет
; использоваться для записи туда второй строки.
; Если ты его не определишь, то при
; записи в конец строки Str1 ты можешь
; затереть другие данные
Str1 DB “12345”,”00000”
Str2 DB “67890”

ENDS
CODESEG

mov SI,offset Str1 ; смещение первой строки
add SI,5 ; теперь SI указывает на
; конец строки Str1
mov BX,offset Str2 ; смещение второй строки
mov CX,5 ; счетчик итераций
@@M0
mov AL,[BX] ; в AL, содержимое по адресу [BX]
mov [SI],AL ; AL в память по адресу [SI]
inc SI
inc BX
loop @@M0
; после этого строка Str1 как бы увеличивается
; до размера 10 байт (но за счет буфера она
; уже была 10 байтной, поэтому никакие
; другие данные мы не затерли)

ENDS
По крайней мере у меня такой номер прошел.
Удачи!


Ответ отправлен: 30.10.2003, 11:11
Отправитель: netus


 Вопрос № 4394


Эй, чуваки! Зацените Бит!!!!
(особенно те, кто только учится)
Эта типа самомодифицирующаяся демка в которой всё время разные паттерны. Запускается через паскаль. Если в винде фасмом компилить, то ошибку выдаёт и клозется. А так прикольно.
Тов. эКсперты, пропустите в рассылку pls, я думаю новичкам очень интересно будет. Я сегодны случайно в колледже от нечего делать такую штуку слабал, прикольно!!!

program fuck;
{$G+}
begin
asm
xor ax,ax
int 10h
push 0b800h
pop es
xor di, di
@@: in ax, 40h
mov word ptr es:[di], ax
inc di
int 10h
@@ok:
in al, 60h
dec al
jz @@fuck
jmp @@
@@fuck:
end;
end.



Вопрос отправлен: 30.10.2003, 02:24
Отправитель: ЭДИК

[Следующий вопрос >>] [Список вопросов]

Отвечает dr_dolphin

Добрый день, ЭДИК!
Самомодифицирующаяся программа - это программа, которая
в процессе своего выполнения меняет свой КОД, в Вашей программе я этого не вижу....
В качестве лабораторной по информатике наверно такое прокатит ...
Всего наилучшего !

Ответ отправлен: 30.10.2003, 07:37
Отправитель: dr_dolphin


Отвечает Евгений Иванов

Приветствую Вас, ЭДИК!
Это таймер что-ли? Код неплохой, но вроде нет ничего самоизменяющегося!!..
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 30.10.2003, 20:53
Отправитель: Евгений Иванов


Отвечает Ayl

Добрый день, ЭДИК!
Ну и где тут самомодификация? Кстати, для того, чтобы новичкам интересно было, неплохо бы откомментировать текст.
Далее. Не знаю, на что у тебя фасм ругается, но строчка int 10h после inc di явно лишняя. Странно, что прога вообще пашет.
Далее. Ты не проверяешь указатель di. Под виндой прога вылетает. Подозреваю, это происходит при записи слова при значении регистра di равному FFFF. Потому что если заменить inc di на add di, 2 все работает.
В третьих, конструкцию
dec al
jz @@exit
jmp @@
@@exit:

лучше заменить на
dec al
jnz @@

Четвертый вопрос - а нафига вообще Паскаль? Просто на асме нельзя было написать?

И последнее - а название программы это показатель чего? Плохого настроения?

Ответ отправлен: 30.10.2003, 12:16
Отправитель: Ayl


 Вопрос № 4395

Уважаемые эксперты, я слышал об ассемблере очень много и эти мнения были разнообразны. Сам я занимаюся разработкой программ, работающих с базами данных, как с локальными так и с сетевыми (хранящиеся на серваках Oracle). Несколько дней назад у меня появилось сильное желание освоить Ассемблер, но как мне говорят мои друзья, которые также занимаются программированием, это не так-то просто, а я то точно знаю что трудности я умею преодолевать, тем более если у меня появляется такой интерес и желание, то всегда добиваюсь своей цели. Тем более у меня иногда возникают такие проблемы, которые лучше было бы решить с помощью написания процедуры на ассемблере, тем более что на С я не пишу, хотя хотелось бы сделать познания и в нем, но все упирается во время. Я смотрю Вы часто упоминается про С, и если Вы мне скажете что без С не возможно изучить ассемблер то я займусь и С. Мне просто кажется что с помощью ассемблера я смогу писать маленькие процедуры на нем в Delphi, если будет такая необходимость. Подскажите мне, пожалуйста, с чего начать мое познание, какую литературу использовать и где ее можно взять в Интернете. Заранее благодарен.



Вопрос отправлен: 30.10.2003, 08:25
Отправитель: Денис

[Следующий вопрос >>] [Список вопросов]

Отвечает Евгений Иванов

Доброе время суток, Денис!
Любой язык программирования необходим для обработки данных.
От этого и иди.
Есть как-бы ящик: в него подаёшь данные, он обрабатывает и выдаёт данные на выход. Это и называется программированием...
А насчёт изучения - читай архив, всё было уже отвечено...
Если что интересует конкретно, спрашивай письмом или здесь!
Бывай!
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 30.10.2003, 20:53
Отправитель: Евгений Иванов


Отвечает never_again

Добрый день, Денис!
Похвальное желание.
Ассемблер можно запросто выучить отдельно от Си и наоборот.
Одно другому не мешает. Зато, зная ассемблер, понимаешь процессы происходяшие на самом низком уровне и прогшраммирование на языках высокого уровня становится на много легче.
информацию по асму достать очень легко. зайди на хттп://ввв.гугл.ру сделай поиск по слову ассемблер или assembler. в первом случае ты получишь 19500 ссылок, а во втором - 897000.
Удачи.
И пусть весь мир полюбит ассемблер, а все девчонки ассемблерщиков!!

Ответ отправлен: 30.10.2003, 16:36
Отправитель: never_again


Отвечает Ayl

Доброе время суток, Денис!
Ну, что Вам сказать. Знание Си или любого другого языка высокого уровня в освоении ассемблера ничем не поможет, а только помешает. Это первое.
Второе. Судя по всему Вас интересует программирование на асме под Windows. Для этого нужно хорошо знать WinAPI и правила вызова подпрограмм. Еще нкплохо бы разбираться в организации защищенного режима, зотя при использовании встроенного асма это не так уж и важно.
Далее. Как Вы собираетесь его использовать? Если только для написания части кода в проекте Delphi, то основной упор нужно сделать на соответствие типов данных в Delphi и ассемблере (как представляются числа, строки, массивы, записи и объекты), понимать структуру программы (где находится код, данные, стек и т.п.).
Естественно, нужно знать команды вссемблера, но это не представляет трудности. Это есть в любой книжке по ассемблеру.
Насчет литературы. Для изучения команд читайте рассылку "Ассемблер? Это просто!". Правда в ней первые 30 уроков посвящены программированию под ДОС, но поможет в освоении команл. Последующие выпуски - это уже программирование для винды.
Для освоения организации защищенного режима можно почитать рассылку "Процессор INTEL в защищенном режиме". Только, к сожалению, она уже давно не выходила. Остановилась на роковом 13-м выпуске :-(
Из книг рекомендовал бы Юрова "Программирование на языке ASSEMBLER" (а названии могу ошибиться).
Если удасться найти, очень рекомендовал бы ознакомиться со следующими книгами:
Использование Turbo Assembler при разработке программ / Сост. А.А.Чекатков. - Киев: "Диалектока", 1995. - 288 с.
Г.В.Орловский. Введение в архитектуру микропроцессора 80386. Сеанс-Пресс LTD. Центр инфотехнологии ИНФОКОН, Санкт-Петербург, 1992.

В первой книге описана работа с пакетом TASM фирмы Borland, система команд процессоров Intel, включая 80486, объектно-ориентированное программирование на ассемблере, связь ассемблера с ЯВУ (Си и Паскаль) и основы программирования для Windows.

Вторая книга - это достаточно подробное и грамотное описание архитектуры процессора 80386 и работа с защищенным режимом.

Ответ отправлен: 30.10.2003, 11:42
Отправитель: Ayl


 Вопрос № 4396

Народ помогите! Как мне на асме включить компьютер, т.е. как изменить дату и время включения в CMOS?



Вопрос отправлен: 30.10.2003, 12:16
Отправитель: Evga

[Следующий вопрос >>] [Список вопросов]

Отвечает ASMодей

Приветствую Вас, Evga!
Сразу скажу, что я не пробовал делать то, что сейчас скажу, а нашел в Interrupt List. Итак, вроде бы, порядок действий для AWARD-BIOS такой:
1. Записываешь в ячейки 55h, 56h, 57h и 58h соответственно день месяца, час, минуту и секунду включения в бинарном формате (а не в формате BCD, как другие даты).
2. Устанавливаешь бит 0 в ячейке 54h
3. Выключаешь компьютер
4. Ждешь часа Х :)
Если не сработает, значит надо еще что-то сделать.


Ответ отправлен: 31.10.2003, 07:32
Отправитель: ASMодей


 Вопрос № 4397

Уважаемые эксперты !
Есть код на Сях.
//-----------------
char *m;
m = (char*) malloc(0xFF);
m='1';
//----------------
Нужен его аналог на Асме (платформа win32)
Помогите, если кто знает.



Вопрос отправлен: 30.10.2003, 20:10
Отправитель: Rin

[Следующий вопрос >>] [Список вопросов]

Отвечает Евгений Иванов

Приветствую Вас, Rin!
m dd ?
Call GlobalAlloc, GPTR, 255
or eax,eax
jz @@NeedMoreMemory
xchg esi,eax
mov [esi], 'l'
Удачи!
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 30.10.2003, 20:46
Отправитель: Евгений Иванов


Отвечает Dark_Lord

Здравствуйте, Rin!
.data
m dd ?
.code
_start:
push 0FFh
push GMEM_FIXED
run GlobalAlloc
mov m,eax
mov [eax],1

Ответ отправлен: 31.10.2003, 17:51
Отправитель: Dark_Lord


Отвечает _vt

Доброе время суток, Rin!
.data?
m dd ?
.code
push 255
push GPTR
call GlobalAlloc
mov m, eax
mov [m], 'I'

*** E-Man - can help you***


Ответ отправлен: 31.10.2003, 02:42
Отправитель: _vt


 Вопрос № 4398

Здравствуйте уважаемые эксперты. Где можно достать справочник по всем функциям BIOS?



Вопрос отправлен: 30.10.2003, 22:54
Отправитель: Aleksey

[Следующий вопрос >>] [Список вопросов]

Отвечает ASMодей

Доброе время суток, Aleksey!
Ищи в интернете Interrupt List Ральфа Брауна.

Ответ отправлен: 31.10.2003, 07:34
Отправитель: ASMодей


Отвечает Ayl

Доброе время суток, Aleksey!

Например, вот тут:
http://sizov.boom.ru/books/brown/contents.htm

или поищи в инете по клучевой фразе "Список Ральфа Брауна".

Можешь также зайти сюда:
http://nortonguide.virtualave.net/techhelp.htm

здесь находится и Tech Help, и тот же список РБ.

Ответ отправлен: 31.10.2003, 11:12
Отправитель: Ayl


Отвечает never_again

Доброе время суток, Aleksey!
мыло дай, я тебе PDF'ку скину

Ответ отправлен: 01.11.2003, 00:23
Отправитель: never_again


 Вопрос № 4399

Привет всем. У нас в юнивере преподы по АСМу тупые - тупые (по поводу преподавания).
Как пример - на третьей лекции препод написал на доске 20 строк в hex'е и мы должны были разобраться за 2 дня, что эта прога делает. Конечно, никто ничего не понял. Следующие лекции - ещё тупее.
Так вот недавно он задал дом. работу, которую я должен обязательно сделать. Стоит ли говорить, что НИКТО из студентов не может сделать эту домашку.
Если вам не трудно, помогите написать, разумеется, если у вас будет на это время.
Заранее спасибо.
Написать подпрограмму для отображения всех способов адресации МП. При этом на экран дисплея необходимо вывести использованный сегментный регистр, смещение и физический адрес команды.
Написать ПП для отображения использования псевдокомманд управления листингом. в ПП использовать сегменты, стек, процедуры и макросы.



Вопрос отправлен: 30.10.2003, 22:53
Отправитель: Ярослав

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Доброе время суток, Ярослав!
1. Написать подпрограмму для отображения всех способов адресации МП. При этом на экран дисплея необходимо вывести использованный сегментный регистр, смещение и физический адрес команды
===========================================================
Физический адрес команды находится в регистрах CS:(E)IP. Так как вас учат, по-видимому, асму для ДОС (хотя это было бы неплохо и написать в вопросе), то режим работы - реальный, соответственно, используется регистр IP (16-разрядные смещения).

Тебе потребуется процедура, которая выводит значение регистра, например, в 16-ричной системе счисления (это самое простое).

Далее, чтобы получить адрес команды, тебе нужно выполнить что-то типа написанного в Приложении. Потому что напрямую получить значение регистра IP нельзя.

Насчет использованного сегментного регистра и смещения я подозреваю, что это должны быть простые строки, содержащие собственно команду. Хотя задание, конечно, сформулировано не очень четко.

Для вывода строки используй функцию 9 прерывания 21h.

Насчет типов адресации - их в процессоре 386+ 10 штук (в книжках можно прочитать про 11, но это просто разделение базово-индексной адресации на два режима - с указанием смещения и без такового). Описание см. в Приложении.


Приложение:

Ответ отправлен: 31.10.2003, 12:11
Отправитель: Ayl


Отвечает Евгений Иванов

Приветствую Вас, Ярослав!
Детские игры... :-)
Мне Вас жаль...
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 31.10.2003, 04:57
Отправитель: Евгений Иванов


Отвечает Gibbel

Добрый день, Ярослав!
Преподы, как правило, в совершенстве разбираются в тех предметах, которые преподают. А вот вы не можете справиться с элементарными задачами. Возможно, вам стоит хорошенько обдумать, кого стоит называть тупыми... ;-)
Вообще, здесь существует правило - не писать за студентов програмки. Если у вас что-то не получается, задавайте конкретные вопросы, и вам на них ответят. Но писать программы за вас никто не будет.

Ответ отправлен: 31.10.2003, 11:47
Отправитель: Gibbel


 Вопрос № 4400

Здравствуйте уважаемые эксперты. Я зарегистрировался экспертом под именем Frost. Мне написали, что через 9 мин. на мой адрес выхлют письмо, которое нужно подтвердить, но ни через 9 мин., ни на следующий день письмо не пришло. Что делать? Под таким именем опять пробовал регистрироваться, но мне пишут, что пользователь с таким именем уже существует. Может есть ограничение по возрасту(мне 17 лет).



Вопрос отправлен: 30.10.2003, 23:02
Отправитель: Frost

[Следующий вопрос >>] [Список вопросов]

Отвечает ASMодей

Приветствую Вас, Frost!
Скорее всего, ты неправильно указал свой e-mail. В принципе можешь несколько дней подождать. Я думаю без подтверждения регистрации твой ник будет удален из экспертов и ты сможешь попробовать снова.
P.S. Эксперты не делают здесь ничего такого, что можно было бы отнести к категории "лицам до 18 лет"

Ответ отправлен: 31.10.2003, 07:41
Отправитель: ASMодей


Отвечает Евгений Иванов

Добрый день, Frost!
Проблема с почтой...
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 31.10.2003, 04:59
Отправитель: Евгений Иванов


Отвечает never_again

Приветствую Вас, Frost!
Как заль сто не выхлали :((
а мыло ты без ошибок написал, а?

Ответ отправлен: 01.11.2003, 00:20
Отправитель: never_again



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (31)
C / C++ (25)
Perl (2)
Builder / Delphi (21)
Pascal (20)
Basic / VBA (5)
Java / JavaScript (7)
PHP (11)
Криптография (9)
WinAPI (13)
Пользователю
Windows 95/98/Me (45)
Windows NT/2000/XP (60)
"Железо" (37)
Поиск информации (28)
Администратору
Windows NT/2000/XP (36)
Linux / Unix (15)
Юристу
Гражданское право (9)
Семейное право (6)
Трудовое право (6)
КоАП (6)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.


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

В избранное