Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
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.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту 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.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Адрес подписки |
Отписаться |
В избранное | ||