Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro
вот возьми, надеюсь поможет, хоть и на  c++:
http://www.internals.com/utilities/WinIo.zip

Цитата:
WinIo
Version 3.0 supports 64 bit platforms and concurrent use from multiple applications. WinIo allows direct I/O port and physical memory access under Windows NT/2000/XP/2003/Vista/7 and 2008.

 
всегда можно компильнуть с опцией /Fa :)

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 23:28 12-04-2011 | Исправлено: akaGM, 23:31 12-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тогда решение в корне не верное. Если хочеш изучать ассемблер - попробуйте найти в сети учебник практикум к которому я советовал: В.И. Юров "Assembler", 2-е издание. ISBN 5-94723-581-1. Учебник достаточно адекватен, хотя и потребует сначала прочесть пару глав теории.
 
Изучать ассемблер надо во первых с теории - что такое процессор и как он работает с точки зрения машинных комманд, а во вторых на вычислительных задачах. Пытайтесь создать на ассемблере реализации криптографических алгоритмов или алгоритмов сжатия данных или кодирования/декодирования к примеру изображений. Процетирую самого себя:
Цитата:
Буду не слишком оригинален - повторю то что в учебниках по ассемблеру пишут на первых страницах (хороших учебниках): "...В Ассемблере отсутствуют собственные средства ввода-вывода данных, используя ассемблер вы должны использовать средства самой операционной системы или на прямую взаимодействовать с оборудванием..."

На ассемблере реализуються вычислительные алгоритмы. Печать и любой другой ввод-вывод завязаны на API/ABI операционной системы и практически идентично для многих языков.
Нет никакого смысла для изучения ассемблера писать программу на нём для печати, потому что на C, C++, Pascal, Basic и длинной веринице других языков и на ассемблере будет иметь не значительные отличия и опыта не принисёт.
Повторяюсь: хотите изучить - начните с теории. Хотите опыта - пишите программы на вычислительные задачи.
 

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 21:13 13-04-2011 | Исправлено: Molniev, 21:15 13-04-2011
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Molniev
Я учился на программиста, и даже диплом есть. И теорию знаю и практика небольшая есть. Нас учили писать простые программы, а работать с "железом" нас не учили. А за книгу еще раз спасибо. Я ее нашел и читаю уже.

----------
Оптимистично смотрю на мир глазами убийцы.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 21:44 13-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ха. Так бы сразу и сказали.
1. В современном миру вообще то это невостребовано. Только драйверы напрямую работаю с железом, и том 2/3 - через слои абстракции а не напрямую.
2. Ищите проекты разработки "собственных ос" - кое что есть в виде исходников на асме + есть старые книги о том как работать с оборудованием и ссылки на всякие спецификации.
3. депозит файлы.сом/files/17cqaoat0 - Старая серия книг. Где то в интернетах они есть, но найти наверное будет не просто. 1/3 - посвещена MS-DOS, 1/3 - BIOS, 1/3 - портам ввода-вывода, прерыванием, защитному режиму и прочему. Последние две трети возможно и будут вам интерестны. Но все ити вещи делать надо не из под Windows или Linux, а из MS-DOS - заведите виртуалку и эксперементируйти с 16 разрядным кодом в ней.
 
ЗЫ. Работать с железом не учили потому что из под винды или линуха такое могут делать только драйвера. Ну или как исключение - ссылка в сообщении akaGM - там драйвер вмешиваеться в работу ОС и разрешает доступ из ring3 к io ports. В итоге это не очень востребовано - вот и не учат.
 
Честно говоря не знаю зачем вам это нужно. Только если свою ОС писать.
 
http://rghost.net/5179911 - Перепостил ссылку, а то депозитовскую вруг замених форум на спам_детект

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 22:04 13-04-2011 | Исправлено: Molniev, 22:11 13-04-2011
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Molniev
Объясните, как пользоваться функициями CreateFile, WriteFile, CloseHandle? Из вашего пояснения ничего не понятно.

----------
Оптимистично смотрю на мир глазами убийцы.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 10:19 15-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro, единственно верное объяснение приведено по ссылкам. Но повторюсь:
С файлами работали? Сначала открываем файл вызовом функции CreateFile, потом пишем туда данные  
WriteFile, потом закрываем CloseHandle. Что где и какие параметры - по ссылкам.
Для работы с принтером, делаем всё то же самое, только вместо имени файла CreateFile первым параметром передаём "имя устройства" - вида "\\.\COM1" - без кавычек. Или для ltp - "\\.\LTP". При этом параметр dwCreationDisposition должен иметь значение OPEN_EXISTING, dwShareMode должен быть установлен в ноль.
 
Ну ведь все же написано: CreateFile

Цитата:
Communications Resources
 
The CreateFile function can create a handle to a communications resource, such as the serial port COM1. For communications resources, the dwCreationDisposition parameter must be OPEN_EXISTING, the dwShareMode parameter must be zero (exclusive access), and the hTemplateFile parameter must be NULL. Read, write, or read/write access can be specified, and the handle can be opened for overlapped I/O.
 
To specify a COM port number greater than 9, use the following syntax: "\\.\COM10". This syntax works for all port numbers and hardware that allows COM port numbers to be specified.
 
For more information about communications, see Communications.

И то что вы будете записывать в "файл" с таким именем будет печататься. Ну а как пользоваться CreateFile & co для работы с файлами написано у Юрова + исходников в интернетах тьма. Нужно просто поменять в любом из таких исходников путь к файлу, dwCreationDisposition с CREATE_ALWAYS или OPEN_ALWAYS или что там будет и  dwShareMode в ноль, если будет FILE_SHARE_READ или WRITE или DELETE. - три места подправить.

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 19:09 16-04-2011 | Исправлено: Molniev, 19:11 16-04-2011
blaro



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Molniev
Это понятно. Я так и сделал. Только все равно не работает. Я писал так:

Код:
 
call CreateFile(\\.\LPT1,GENERIC_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)
 

или так:

Код:
 
call CreateFile,\\.\LPT1,GENERIC_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
 

Я точно чтото не так делаю

----------
Оптимистично смотрю на мир глазами убийцы.

Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 17:18 18-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
blaro, такое знание асма ввергло меня в уныние...
Это неправильный синтаксис. Есть два варианта вызова функций:
1. Через call. В этом случае, данные помещаються в стек и отдаёться комманда call [имя функции].  
2. Через макрос invoke. Почти так как во втором вашем варианте invoke [имя функции], [параметр1], [параметр2]...  
 
Чтоб не быть голословным:

Код:
 
include \masm32\include\masm32rt.inc
.data
;ltpname db "\\.\LPT1"
ltpname db "C:\test.txt"
n dd 0
hFile dd 0
.code
start:
push 0
push 0
;push OPEN_EXISTING
push CREATE_ALWAYS
push 0
push 0
push GENERIC_WRITE
push offset ltpname
call CreateFileA
mov hFile, eax
push 0
push offset n
push 5
push offset ltpname
push eax
call WriteFile
push 0
call ExitProcess
end start
 

программа создат файл C:\test.txt и запищет в него C:\te
Если закоментированые строчки раскоментировать, а следующие за ними раскоментировать:

Код:
 
ltpname db "\\.\LPT1"
;ltpname db "C:\test.txt"
push OPEN_EXISTING
;push CREATE_ALWAYS
 

то по идее тоже самое должно быть выведено на ваш принтер.
Аналогичный код для invoke:

Код:
 
include \masm32\include\masm32rt.inc
.data
ltpname db "C:\test.txt"
n dd 0
.code
start:
invoke CreateFileA, offset ltpname, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0
invoke WriteFile, eax, offset ltpname, 5, offset n, 0
invoke ExitProcess, 0
end start
 

 
Ну и для полного сщастья, в той книге, что я советовал выше (Assembler: Практикум, В.И. Юров) - на страницах 267, 268 подробно и с коментариами расписан аналог первого варианта. Советую так же все же ознакомиться с форматом комманды call и макросом invoke. Ну и дополнить код обработкой ошибок.
 
PS. Во всех языках программирования и ассемблере в том числе, строки принято как то выделять. Обычно кавычками. В ассемблере двойными. Поэтому \\.\LPT1 - ну совсем не правильно, а вот "\\.\LPT1" - ближе к истине. И я не уверен что LPT портов, как COM в системе много. Попробуйте вариант без единицы в имени. "\\.\LPT"
 
PPS. Это действительно очень слабое знание ассемблера - лучше взяться за книги, чем за клавиатуру.

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 18:48 18-04-2011 | Исправлено: Molniev, 18:53 18-04-2011
Maxv90

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мужики,помогите пожалуйста,нужно написать программу,которая удаляет файлы любые,но в винде,причем в XP3

Всего записей: 3 | Зарегистр. 18-04-2011 | Отправлено: 19:33 18-04-2011
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Любые в винде - невозможно.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 22:55 18-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qraizer
Смотрим сообщение выше вашего о call & invoke и юзаем функцию DeleteFile. А в идеале открываем на странице где то 250
Цитата:
(Assembler: Практикум, В.И. Юров)
Там расписано.
 
Это по поводу удаления файла. Раскрывая предыдущий коментарий: по поводу удаления любого файла - если прав доступа к файлу нет, то невозможно. Если открыт монопольно другим приложением - можно, но сложно - вашего уровня знаний, судя по вопросу на это не хватит. Если файл на CD-ROM - ну не выйдет удалить - только чтение же. Поэтому любой нельзя. Можно удалить только то что система разрешит.

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 23:16 18-04-2011
Maxv90

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Немного не так выразился.Нужно стереть файл так чтобы безвозвратно.Пусть это будет документ или картинка.

Всего записей: 3 | Зарегистр. 18-04-2011 | Отправлено: 23:30 18-04-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maxv90
может тебе тулзов достаточно? коих -- тьма...

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 00:05 19-04-2011
Maxv90

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет,мне нужен чистый код на ассемблере.Я написал прогу,которая просто уничтожает данные,но их можно вернуть,а это не вариант.Выручайте,если сможете..

Всего записей: 3 | Зарегистр. 18-04-2011 | Отправлено: 01:52 19-04-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maxv90
перезаписывай файл случайными данными несколько раз...

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 01:55 19-04-2011
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Если открыт монопольно другим приложением - можно, но сложно - вашего уровня знаний, судя по вопросу на это не хватит.
Хватит. Даже чтобы удалить pagefile.sys. Только это будет последнее, что увидит винда в своей жизни. Это явно не та степень погружения в глубины системы, которая нужна Maxv90. Да и Ассемблер тут не причём.
Maxv90, вот так бы сразу. Зачем задавать не тот вопрос, на который хочешь получить ответ?
Вообще, перетирая данные файла, ты безвозратно трёшь их только в текущей версии. Если запущена Служба теневого копирования тома, то это тоже может не помочь, всегда можно восстановить предыдущие версии.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 04:27 19-04-2011 | Исправлено: Qraizer, 04:39 19-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qraizer,
Цитата:
Хватит. Даже чтобы удалить pagefile.sys.

Каким образом? Разве что отложено, но не системные.
Это во времена Win98 всю папку Windows можно было отправить к корзину. А нынче винда стала умней - и доступ вроде режет?

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 21:27 19-04-2011 | Исправлено: Molniev, 21:27 19-04-2011
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ну, раз интересно... непосредственно в MFT. Винда будет жить, пока записи о файле подкачки не будут выброшены из дискового кеша, а менеджер ВП не будет реинициализирован, например, хибернетом и выходом из него. Спасти сможет может быть установка новых параметров подкачки пользователем, но не пробовал, потому не уверен.
Molniev, мой ответ Maxv90-у был скорее демонстрирующим абсурдность такой формулировки вопроса. Обычно, если не ответить "математически точно и бесполезно" (© Холмз из анекдота), начинается флейм из кучи вариантов ответа, потому что никто не понял, что же собственно спрашивалось, а вопрошающий тихо уходит в панику, т.к. не может в этих ответах разобраться. Впрочем, тут рассказано гораздо лучше. Тут вон тоже вопрос другим оказался.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 03:00 20-04-2011
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
для таких случаев я и пихнул в шапку руководство для "вопросозадавателей",
только кто ж его эРТэФеМит...

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 03:22 20-04-2011
Molniev

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qraizer, не-а, винда доступ режет - с висты на системных томах такие фокусы не проходят (доступа туды нет). Варианты через IOCTRL'ы, scsi комманды, минипорт, api для дефрагментации и прочая муть тоже не катит. Собственно недавно близкая тема на работе поднималась (только не про удалении, а доступ вообще) - и обшим консилиумом пришли к выводу что нельзя на системных томах, выше хрюшки. Поэтому меня так и зацепил положительный ответ )))

Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 16:29 20-04-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru