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

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


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

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

Выпуск № 750
от 16.07.2004, 01:40

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


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

Tigran K. Kalaidjian
Статус: Профессиональный
Общий рейтинг: 193.08
URL: Оптимизация ПК
[Подробней >>]
flasher
Статус: Доверительный
Общий рейтинг: 105.35
[Подробней >>]
_vt
Статус: Профессиональный
Общий рейтинг: 118.21
[Подробней >>]
 
Foamplast
Статус: Профессиональный
Общий рейтинг: 139.35
URL: мой личный сайт
[Подробней >>]
Dragoon
Статус: Доверительный
Общий рейтинг: 107.42
[Подробней >>]
Горячев Игорь
Статус: Начальный
Общий рейтинг: 112.5
[Подробней >>]
 
bocha
Статус: Опытный
Общий рейтинг: 134.02
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 111.32
[Подробней >>]
Стас
Статус: Опытный
Общий рейтинг: 127.03
[Подробней >>]
 
Евгений Иванов
Статус: Профессиональный
Общий рейтинг: 133.65
URL: Super Assembler Software
Телефон: НСС +7 831 3107039
[Подробней >>]
Student
Статус: Доверительный
Общий рейтинг: 151.02
[Подробней >>]


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

Вопрос № 5578. Как узнать откуда была запущена прога?т.е. если запущена с "c:dirprog.exe" тогда путь долж... (ответов: 4)
Вопрос № 5579. Привет всем. Посоветуйте чем можно заменить winapi SetPixel?... (ответов: 3)
Вопрос № 5581. Здраствуйте,Друзья! У меня такой вопрос. Как с помощью именно команды HLT подвесить или остановить C... (ответов: 4)
Вопрос № 5582. В файле формата PE есть возможность написать Dos программу в нем самом,а как это реализовать в MASM3... (ответов: 2)
Вопрос № 5583. Здраствуйте,Друзья! Спасибо за ответы! По поводу вопроса № 5581. Написал коротенькую прогу. Ну что-т... (ответов: 6)
Вопрос № 5585. Здравствуйте,уважаемые эксперты! Вопросы: 1.Пример консольной программы из книги Пирогова.Компилируе... (ответов: 1)
Вопрос № 5586. Можно-ли как-нибудь вывести данные из регистра(ax) в строку или на экран. Чего-то stos не работает(к... (ответов: 5)

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


 Вопрос № 5578

Как узнать откуда была запущена прога?т.е. если запущена с "c:dirprog.exe" тогда путь должен быть "c:dirЭ



Вопрос отправлен: 09.07.2004, 14:19
Отправитель: sequence

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

Отвечает Tigran K. Kalaidjian

Здравствуйте, sequence!
INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
AH = 47h
DL = drive number (00h = default, 01h = A:, etc)
DS:SI -> 64-byte buffer for ASCIZ pathname
Return: CF clear if successful
AX = 0100h (undocumented)
CF set on error
AX = error code (0Fh) (see #01680 at AH=59h/BX=0000h)
Notes: the returned path does not include a drive or the initial backslash
many Microsoft products for Windows rely on AX being 0100h on success
under the FlashTek X-32 DOS extender, the buffer pointer is in DS:ESI
SeeAlso: AH=19h,AH=3Bh,AH=71h,INT 15/AX=DE25h


Приложение:

Ответ отправлен: 09.07.2004, 19:12
Отправитель: Tigran K. Kalaidjian


Отвечает flasher

Приветствую Вас, sequence!
какая прога? твоя ?
если твоя - GetModuleFileNameA

Ответ отправлен: 09.07.2004, 14:53
Отправитель: flasher


Отвечает _vt

Доброе время суток, sequence!
GetModuleFileName, например. Оттуда извлекаешь ту часть, которая является путём к файлу.
* Origin : Life begins at 1000Mhz!


Ответ отправлен: 11.07.2004, 03:26
Отправитель: _vt


Отвечает Foamplast

Приветствую Вас, sequence!
Если под Виндовс необходимо узнать путь к файлу своей программы, используйте GetModuleFileName().


Ответ отправлен: 13.07.2004, 02:37
Отправитель: Foamplast


 Вопрос № 5579

Привет всем.
Посоветуйте чем можно заменить winapi SetPixel?



Вопрос отправлен: 09.07.2004, 21:13
Отправитель: sequence

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

Отвечает Dragoon

Приветствую Вас, sequence!
Можно прыгнуть в Ring 0, узнать текущий режим у дров,
вычислить адрес нужного пиксела и записать его... всего-то делов!
А если серьезно, то намного быстрее работают команды
DirectX и OpenGl по выводу растров.

Ответ отправлен: 09.07.2004, 21:59
Отправитель: Dragoon


Отвечает Tigran K. Kalaidjian

Добрый день, sequence!
Скажете тоже =)
Заменить можно чем угодно, например, SetPixelV или самопальной процедурой, другое дело, что результат может быть несколько неожиданным... А чем Вас не устраивает SetPixel? Потерей изображения? Тогда можно рисовать сразу в битмап, а затем выдавать на экран.
Вот список функций для изучения:
BitBlt
CreateBitmap
CreateBitmapIndirect
CreateCompatibleBitmap
CreateDIBitmap
CreateDIBSection
CreateDiscardableBitmap
ExtFloodFill
FloodFill
GetBitmapBits
GetBitmapDimensionEx
GetDIBColorTable
GetDIBits
GetPixel
GetStretchBltMode
LoadBitmap
MaskBlt
PatBlt
PlgBlt
SetBitmapBits
SetBitmapDimensionEx
SetDIBColorTable
SetDIBits
SetDIBitsToDevice
SetPixel
SetPixelV
SetStretchBltMode
StretchBlt
StretchDIBits


Ответ отправлен: 10.07.2004, 08:44
Отправитель: Tigran K. Kalaidjian


Отвечает Foamplast

Здравствуйте, sequence!
BitBlt()


Ответ отправлен: 13.07.2004, 02:37
Отправитель: Foamplast


 Вопрос № 5581

Здраствуйте,Друзья! У меня такой вопрос.
Как с помощью именно команды HLT подвесить или остановить CPU.
Если можно с примером под MS Dos.



Вопрос отправлен: 10.07.2004, 17:53
Отправитель: Yury (ch_y@mail.ru)

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

Отвечает Tigran K. Kalaidjian

Доброе время суток, Yury!
Если у Вас "чистый" ДОС, то просто послав команду HLT или
...
st:
hlt
jmp st
...
...если эмуляция, то никак - пользуйтесь другими методами, например:
cli
jmp $-2
Подробнее читайте в FAQ:
http://kalaidjian.narod.ru/rusfaq.rar

Ответ отправлен: 11.07.2004, 12:08
Отправитель: Tigran K. Kalaidjian


Отвечает Горячев Игорь

Добрый день, Yury!
HLT: Действие: команда переводит процессор в состояние останова. Выполнение будет продолжено по приходу разрешенного прерывания, NIM, или аппаратного сброса.
Т.е. пишеш в своей программе что-то типа:
.....
твой код
.....
cli ; Сброс флага прерывания IF
hlt ; Стоп машина!!!
И проц в нокауте. Предварительно не забудь сохранить все важные данные из оперативки на хард :)

Ответ отправлен: 10.07.2004, 23:09
Отправитель: Горячев Игорь


Отвечает bocha

Приветствую Вас, Yury!
cli
hlt
вроде так

Ответ отправлен: 11.07.2004, 00:50
Отправитель: bocha


Отвечает Foamplast

Здравствуйте, Yury!
cli
in al, 0x70
or al, 0x80
out 0x70, al
hlt



Ответ отправлен: 13.07.2004, 02:37
Отправитель: Foamplast


 Вопрос № 5582

В файле формата PE есть возможность написать Dos программу в нем самом,а как это реализовать в MASM32 или ЯВУ.


Приложение:


Вопрос отправлен: 11.07.2004, 00:14
Отправитель: QAndrey (semeistvo@tut.by)

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

Отвечает _vt

Добрый день, QAndrey!
Для этого нужно создать DOS-программу, слинкованную с ключом /KNOWEAS, версией линкера ML.EXE, поддерживающего создание DOS-программ (AFAIR, версии ниже 5.12). Написать эту программу можно на любом языке, имеющем компилятор от Microsoft. Потом, при сборке PE-программы, указываешь ключ /STUB:имя_твоей_dos_заглушки.exe.
* Origin : Life begins at 1000Mhz!


Ответ отправлен: 12.07.2004, 22:56
Отправитель: _vt


Отвечает Foamplast

Здравствуйте, QAndrey!
При компоновке (выполняется с помощью link.exe) укажите параметр /STUB:file.exe , где file.exe - имя DOS-программы. В FASM тот же эффект даёт указание параметра on "file.exe" в строке format PE.


Ответ отправлен: 13.07.2004, 02:37
Отправитель: Foamplast


 Вопрос № 5583

Здраствуйте,Друзья! Спасибо за ответы!
По поводу вопроса № 5581. Написал коротенькую прогу.
Ну что-то линковщик ощибки выдает.Писал под Dos в формате
com файла.Правда версия Masm под Windows Что здесь не так?


Приложение:


Вопрос отправлен: 11.07.2004, 09:14
Отправитель: Yury

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

Отвечает bocha

Добрый день, Yury!
.486 поставь после определения сегмента, а то он у тебя получается 32-разрядным

Ответ отправлен: 11.07.2004, 15:11
Отправитель: bocha


Отвечает Горячев Игорь

Добрый день, Yury!
Попробуй так:
.386
.model flat, stdcall
.code
start:
int 3h
cli
hlt
end start
У меня все отлично работало!

Ответ отправлен: 11.07.2004, 23:09
Отправитель: Горячев Игорь


Отвечает Tigran K. Kalaidjian

Добрый день, Yury!
Мой TLink ошибок не даёт. Вывод - используйте компилятор для DOS.

Ответ отправлен: 12.07.2004, 09:04
Отправитель: Tigran K. Kalaidjian


Отвечает _vt

Добрый день, Yury!
Возьми более старую версию LINK.EXE, поддерживающего ключ /AT. И кроме того, строка .486 определяет сегменты по умолчанию 32-разрядными.
* Origin : Life begins at 1000Mhz!


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


Отвечает Foamplast

Добрый день, Yury!
Я где-то слышал, что на MASM32 программы для DOS не напишешь. (Сам не пользуюсь).


Ответ отправлен: 13.07.2004, 02:37
Отправитель: Foamplast


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

Доброе время суток, Yury!
В MASM32 линковщик не подходит для DOS-программ. Посмотри что он пишет и, если увидишь что-то вроде Incremental Linker, то это линковщик для Windows. Для DOS возьми линковщик из MASM6.1x

Ответ отправлен: 13.07.2004, 05:37
Отправитель: ASMодей


 Вопрос № 5585

Здравствуйте,уважаемые эксперты!
Вопросы:
1.Пример консольной программы из книги Пирогова.Компилируется всё нормально,а вот надпись в окне не выводится,курсор на месте стоит.Исходник в приложении.
2.Порекомендуйте,пожалуйста,литературу,где бы нормально объяснялось,как работает и устроена Windows и тд.Я в архиве рассылки видел упоминание - Э.Таненбаум "Современные операционные системы".А ещё,если не ошибаюсь,упоминалась книга Олега Калашникова,но названия не написано?
Заранее спасибо за ответы!


Приложение:


Вопрос отправлен: 12.07.2004, 01:14
Отправитель: gnev_makaki (vyatich2002@mail.ru)

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

Отвечает Foamplast

Здравствуйте, gnev_makaki!
1. Я Ваш исходник малясь переделал, и всё пашет как надо (см. приложение).
2. Э.Таненбаум "Современные операционные системы"; David A. Solomon and Mark E. Russinovich "Inside Microsoft Windows 2000"


Приложение:

Ответ отправлен: 13.07.2004, 02:38
Отправитель: Foamplast


 Вопрос № 5586

Можно-ли как-нибудь вывести данные из регистра(ax) в строку или на экран. Чего-то stos не работает(какую-то фигню выводит).
masm
model small
.data
stroka db ' ','$'
.code
assume ds:@data,es:@data
start:
mov ax,@data
mov ds,ax

mov ax,2fd5h
cld
mov cx,2
lea di,stroka
rep stos stroka
mov ah,09h
mov dx,offset stroka
int 21h

exit:
mov ah,4ch
int 21h
end start
У меня подозрение, что stroka оформлена не правильно...



Вопрос отправлен: 12.07.2004, 01:35
Отправитель: Darkness

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

Отвечает Стас

Доброе время суток, Darkness!
Это по тому что ты не понимаешь азов.
В AX у тебя ЧИСЛО. А на экран выводится ASCII последовательность. Тебе нужно сначала преобразовать число в AX в строку. Это нужно делать ручками, способов много, например: делишь ЧИСЛО на 10, к остатку от деления +30h (символ '0'), сохраняешь, и сначала пока ЧИСЛО>0.
Кроме того, под строку ты выделяешь всего 1 байт, если не считать "$". А нужно например так: stroka db 255 dup(0).
Символ "$" поставишь потом, когда будешь знать сколько цифр в ЧИСЛЕ.
Че тебе исходничек нужен?

Ответ отправлен: 12.07.2004, 22:10
Отправитель: Стас


Отвечает Tigran K. Kalaidjian

Добрый день, Darkness!
Вывести можно, но немного не так – если Вы переносите побайтно, то каждый раз к записываемому значению следует прибавлять 30h – смотрите таблицу ASCII. Думаю, что эксперты уже ответили насчёт реализации, мой вариант такой программы лежит в http://kalaidjian.narod.ru/rusfaq.rar
Плюс к этому: если Вы заполянете сначала строку, то символ ‘$’ может затереться, так что оформите её как-нибудь так:
stroka db 10 DUP (‘$’)


Ответ отправлен: 13.07.2004, 12:07
Отправитель: Tigran K. Kalaidjian


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

Добрый день, Darkness!
Читай Rusfaq от Калайджана.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 12.07.2004, 22:22
Отправитель: Евгений Иванов


Отвечает Student

Доброе время суток, Darkness!
попробуйте так (см. приложение).

Приложение:

Ответ отправлен: 13.07.2004, 20:08
Отправитель: Student


Отвечает Foamplast

Доброе время суток, Darkness!
А какая-то фигня, это случайно не две палочки (или две буквы "Н")? Если да, то всё правильно работает.
P.S. Если вы хотите вывести числовое значение регистра на экран в виде строки, то сначала преобразуйте это значение в строку. Как это сделать, неоднократно обсуждалось в рассылке. Смотрите архив.


Ответ отправлен: 13.07.2004, 02:38
Отправитель: Foamplast



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

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

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

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (23)
C / C++ (12)
Perl (4)
Builder / Delphi (13)
Pascal (21)
Basic / VBA (4)
Java / JavaScript (3)
PHP (12)
Криптография (6)
WinAPI (9)
Радиоэлектроника (7)
Пользователю
Windows 95/98/Me (37)
Windows NT/2000/XP (51)
"Железо" (33)
Поиск информации (15)
Администратору
Windows NT/2000/XP (27)
Linux / Unix (11)
Юристу
Гражданское право (9)
Семейное право (7)
Трудовое право (8)
КоАП (6)

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




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


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

http://subscribe.ru/
E-mail: ask@subscribe.ru
Адрес подписки
Отписаться

В избранное