Дмитрий
например вот написал мультипротокольый diseq для тарелки
Дмитрий
1.0 1.1 и 1.2
Дмитрий
на радиолоцмане есть моя статья на асме https://www.rlocman.ru/shem/schematics.html?di=207985
КТ315
под 16 пик в мплабе + нсс 9.7
Да на PIC тоже самое будет примерно. Я вот на PIC не писал, открыл список инструкций по документации, и сразу вижу инструкции для AND, OR, и для работы с памятью: Запись нового бита: movlw NEW_NOT_BIT_VALUE and 1 movwf BIT call GetSomeNotBit ; Может вернуть сразу в BIT, на если в W: andlw 1 mowf BIT Чтение: movf BIT, W Условие: btfss BIT goto bit_set 5 минут делов разобраться...
Крутой
Есть резидентная программа под DOS 6.22, которая на событие нажатия клавиши должна выделять всю доступную XMS память в системе (про расширенную память можно почитать вот здесь: https://frolov-lib.ru/books/bsp.old/v33/ch11.htm) Программа идеально отрабатывает в DOS-BOX, в виртуалке из под VirtualBox, но вот под Qemu желаемого результата не наблюдается. После запуска программы можно спокойно работать с клавиатурой, но после нажатия клавиши 'ScrollLock' происходит зависание системы и высвечивается непонятный символ в верхнем правом углу. С чем это может быть связано, помогите пожалуйста. .model tiny .code ORG 100h main: ;Переходим на метку инициализации. Нам нужно будет перехватить прерывание 09h, ;а также оставить программу резидентной в памяти jmp Init ;Ниже идет, собственно, код обработчика прерывания 09h(он будет резидентным). ;После того как программа выйдет, процедура New_09h останется в памяти New_09h proc cli push ax ;Сохранить регистры в стек push dx push ds push es mov ax,cs mov ds,ax in al,60H ;читать ключ cmp al,46h ;Если нажата клавиша 'ScrollLock' je do_pop ;да, активизировать popup pop es ;восстанавливаем регистры pop ds pop dx pop ax ;и уходим на исходный обработчик jmp dword ptr cs:[Old_09h] ;на метку do_pop программа уже не вернется ;код отработки нажатия клавиши 'ScrollLock' do_pop: ;получаем адрес управляющей функции драйвера mov ax,4310h int 2fH mov word ptr cs:[HMMEntry][0],bx mov word ptr cs:[HMMEntry][2],es ;определяем размер свободной расширенной памяти (на выходе ;DX - общий размер свободной расширенной памяти, Кбайт) mov ax,0800h call cs:[HMMEntry] ;выделяем всю доступную память (DX уже содержит ;размер требумого блока, Кб) mov ah,09h call cs:[HMMEntry] in al,61H ;взять значениe порта управления клавиатурой mov ah,al ;сохранить его or al,80h ;установить бит разрешения для клавиатуры out 61H,al ;и вывести его в управляющий порт xchg ah,al ;извлечь исходное значение порта out 61H,al ;и записать его обратно mov al,20H ;послать сигнал "конец прерывания" out 20H,al ;контроллеру прерываний 8259 pop es ;восстанавливаем регистры pop ds pop dx pop ax iret ;возврат из обработчика прерываний New_09h endp HMMEntry DD ? Old_09h dd ? ;определение ячейки памяти для хранения адреса системного обработчика ;Со следующей метки нашей программы уже не будет в памяти (это нерезидентная ;часть).Она затрется сразу после выхода (после вызова прерывания 27h) Init: ;Установим наш обработчик (New_09h) (адрес нашего обработчика) ;на прерывание 09h. Это позволяет сделать функция 25h прерывания 21h. ;Но прежде нам нужно запомнить оригинальный адрес этого прерывания. ;Для этого используется функция 35h прерывания 21h: ;ah содержит номер функции mov ah,35h mov al,09h int 21h ;Теперь в es:bx адрес (вектор) прерывания 09h (es — сегмент, bx — смещение) mov word ptr Old_09h,bx mov word ptr Old_09h+2,es ;запись стартового обработчика в вектор прерываний mov ax,2509h mov dx,offset New_09h int 21h ;выводим сообщение о загрузке резидента в память mov ah,09h mov dx,offset InitMsg int 21h ;возврат в DOS, оставшись резидентным mov dx,offset Init int 27h InitMsg DB "Resident installed in memory!",13,10,"$" end main
Крутой
­
Что забавно - эта Лена реально HR-ка с яндекса была...
URALBANG
Показалось
Крутой
­
Ещё раз?
Крутой
А, я думал у меня инет накрылся
Крутой
Всё понятно, помогать никто не хочет)
Alexey
Всё понятно, помогать никто не хочет)
Ты по-моему кидаешь в 3 раз уже 2 страничный текст, где я даже абзац поленился читать
Крутой
Ну а как описать большую проблему в 2 словах? Тогда не понятно будет ничего
Alexey
Ну а как описать большую проблему в 2 словах? Тогда не понятно будет ничего
Удали комментарии на 4 строчки , возможно, он меня так пугать не будет
Alexey
Ну а как описать большую проблему в 2 словах? Тогда не понятно будет ничего
Почему там столько комментариев, это чат гпт делал?
Крутой
Да какой ГПТ, он ничего сделать не может. Я всё писал. Объединял по примерам из Книг Калашникова, Зубкова, сайта Фролова
Yuri
Привет! Ищу человека, который играл в майнкрафт на частичную занятость Старший преподаватель Minecraft https://teletype.in/@zabudko/ap_byBjD_Na Младший преподаватель Minecraft https://teletype.in/@zabudko/vcpK6DgXnku
­
Какой умный бот.
Aiwan \ (•◡•) / _bot
ты на дому принимаешь? че по чем?
Alexey
@FAssembler помоги, библиотека под любым предлогом отказывается работать format PE DLL entry DllEntryPoint include 'win32a.inc' section '.text' code readable writeable executable proc DllEntryPoint msg, frmt push dword ptr msg push dword ptr frmt call ptr printf call ptr getch ret endp section '.idata' import readable writeable library msvcrt, 'msvcrt.dll' import msvcrt, printf, 'printf', getch, '_getch' section '.edata' export data readable export 'dlltest.dll', DllEntryPoint, 'DllEntryPoint' вот так я ее вызываю в исполняемом format PE CONSOLE entry start include 'win32a.inc' section '.text' code readable writeable executable start: push msg push frmt call [DllEntryPoint] section '.data' data readable writeable msg db 'Hello',0 frmt db '%s',0 section '.idata' import readable writeable library dll, 'dlltest.dll' import dll, DllEntryPoint, 'DllEntryPoint'
Alexey
а вот так на меня ругаются
Alexey
что делать то вообще, я уже и без С-функций писал и что только не делал все равно всегда ошибка вылезает
Alexey
я уже в отчаянии такую фигню не реализовать
Aiwan \ (•◡•) / _bot
у тя точка входа не правильная. писали же уже
Aiwan \ (•◡•) / _bot
она параметры от ОС принимает, а не от тебя, и там 3 параметра
Alexey
*d0x65viant;
@FAssembler помоги, библиотека под любым предлогом отказывается работать format PE DLL entry DllEntryPoint include 'win32a.inc' section '.text' code readable writeable executable proc DllEntryPoint msg, frmt push dword ptr msg push dword ptr frmt call ptr printf call ptr getch ret endp section '.idata' import readable writeable library msvcrt, 'msvcrt.dll' import msvcrt, printf, 'printf', getch, '_getch' section '.edata' export data readable export 'dlltest.dll', DllEntryPoint, 'DllEntryPoint' вот так я ее вызываю в исполняемом format PE CONSOLE entry start include 'win32a.inc' section '.text' code readable writeable executable start: push msg push frmt call [DllEntryPoint] section '.data' data readable writeable msg db 'Hello',0 frmt db '%s',0 section '.idata' import readable writeable library dll, 'dlltest.dll' import dll, DllEntryPoint, 'DllEntryPoint'
Я чуть-чуть подправил, и настоятельно рекомендую обзавестись отладчиком и дизассемблером вроде IDA Pro, Ghydra, x64db они помогут тебе понять что на самом деле скомпилировал Fasm, отладить код и найти ошибку, ещё будет плюсом скачать нормальный редактор для Fasm (хотя бы FasmEditor ). Документация у Fasm хорошая (как и сообщество и форум) как и примеров на Fasm, а редакторы вроде FasmEditor по умолчанию создают заготовки в зависимости от того и для чего ты хочешь написать программу, чтобы не тратить время на мелочи. format PE console DLL entry DllEntryPoint include 'win32a.inc' section '.text' code readable executable proc DllEntryPoint hinstDLL, fdwReason, lpvReserved mov eax, TRUE ret endp proc my_func msg:DWORD, frmt:DWORD invoke printf, [frmt], [msg] invoke getchar endp section '.idata' import data readable writeable library msvcrt, 'msvcrt.dll' import msvcrt, printf, 'printf', getchar, 'getchar' section '.edata' export data readable export 'test.DLL',\ my_func, 'my_func' section '.reloc' fixups data readable discardable if $=$$ dd 0,8 ; if there are no fixups, generate dummy entry end if format PE CONSOLE entry start include 'win32a.inc' section '.text' code readable writeable executable start: invoke my_func, msg, frmt section '.data' data readable writeable msg db 'Hello',0 frmt db '%s',0 section '.idata' import readable writeable library dlltest, 'test.dll' import dlltest, my_func, 'my_func'
Alexey
Я чуть-чуть подправил, и настоятельно рекомендую обзавестись отладчиком и дизассемблером вроде IDA Pro, Ghydra, x64db они помогут тебе понять что на самом деле скомпилировал Fasm, отладить код и найти ошибку, ещё будет плюсом скачать нормальный редактор для Fasm (хотя бы FasmEditor ). Документация у Fasm хорошая (как и сообщество и форум) как и примеров на Fasm, а редакторы вроде FasmEditor по умолчанию создают заготовки в зависимости от того и для чего ты хочешь написать программу, чтобы не тратить время на мелочи. format PE console DLL entry DllEntryPoint include 'win32a.inc' section '.text' code readable executable proc DllEntryPoint hinstDLL, fdwReason, lpvReserved mov eax, TRUE ret endp proc my_func msg:DWORD, frmt:DWORD invoke printf, [frmt], [msg] invoke getchar endp section '.idata' import data readable writeable library msvcrt, 'msvcrt.dll' import msvcrt, printf, 'printf', getchar, 'getchar' section '.edata' export data readable export 'test.DLL',\ my_func, 'my_func' section '.reloc' fixups data readable discardable if $=$$ dd 0,8 ; if there are no fixups, generate dummy entry end if format PE CONSOLE entry start include 'win32a.inc' section '.text' code readable writeable executable start: invoke my_func, msg, frmt section '.data' data readable writeable msg db 'Hello',0 frmt db '%s',0 section '.idata' import readable writeable library dlltest, 'test.dll' import dlltest, my_func, 'my_func'
благодарю, кроме мануала можешь посоветовать книжки?
Alexey
желательно, где больше практики
*d0x65viant;
благодарю, кроме мануала можешь посоветовать книжки?
Ну я начинал вот с этой книги: https://ir.ozone.ru/s3/multimedia-7/c1000/6400125751.jpg Если будешь практиковаться по книге, очень рекомендую взять за привычку пользоваться отладчиками и дизассемблерами, это сильно поможет и упростит обучение, сделает более глубоким понимание как вообще работает код, ещё будет полезным ознакомиться с PE форматом, если хочешь писать для Windows.
*d0x65viant;
спасибо
Да не за что.
Aiwan \ (•◡•) / _bot
спасибо
так там насм. а как же "фасм лучше всех!!!"?
Aiwan \ (•◡•) / _bot
чем лучше?
надо у него спросить. я утрировано. вроде от него часто вижу подобные слова
Alexey
чем лучше?
для меня лучше тем, что fasm легче дается
*d0x65viant;
надо у него спросить. я утрировано. вроде от него часто вижу подобные слова
Ассемблер +- везде одинаковый (если речь об одной и той же архитектуре), просто Fasm более практичный (в том числе из-за макросов) когда речь идёт о разработке кода, а книга больше рассчитана для тех кто только начинает осваивать ассемблер, и пытается понять как он работает/пишет первые программы.
Aiwan \ (•◡•) / _bot
там масм
­
Мда
­
Опять у кого-то шило в жопе чешется.
sans
кто-то так сильно не любит ассемблер?
Alexey
Аааа нас атакуют
U1TR0N
Блин - весь чат загадили
U1TR0N
Кому-то нечем заняться, когда нормально канал функционирует и пользу несёт
Aiwan \ (•◡•) / _bot
Кому-то нечем заняться, когда нормально канал функционирует и пользу несёт
а что эт за прикол, истории нет, добавляются в быстром темпе боты
sans
?
в чем прикол рейдить чат по ассемблеру
sans
мне реально стало интересно
sans
это же не политический чат
Alexey
Если бы он капчу еще мог пройти…
­
Рекомендую отключить уведомления на пару часов.
Aiwan \ (•◡•) / _bot
вход запрети до заватра
Баир
Здравствуйте. Подскажите, пожалуйста, по логике. Пользователь вводит числа, в т.ч. отрицательные. Я их сохраняю в массив. Затем мне надо посчитать их сумму. Ступор в том, что не могу понять в каком виде хранить числа. Если конвертировать из ASCII, то как потом понять, что в массиве отрицательное число? Или же хранить их коды и потом при обработке переводить из ASCII и считать?
Aiwan \ (•◡•) / _bot
изучи тему отрицательных чисел в компе/памяти, как они представляются
Баир
read_from_input: mov eax, 3 mov ebx, 0 lea ecx, [buffer] mov edx, 4 int 80h ret Потом из буфера записываю в массив. Кажется, я нашел как проверять знак числа: test eax, eax например.
Aiwan \ (•◡•) / _bot
поищи в чате хештег book
Alexey
???
Alexey
Ответ очевидный
Guldan
Я пишу, да стоит
Replicant
Всем привет, хочу начать учить асм, подскажите под какую архитектуру учить асм x86 или сразу под x64?
­
86
Replicant
почему? Я слышал, что он уже почти не используется
­
Учи тогда ARM. Или VLIW
Aiwan \ (•◡•) / _bot
почему? Я слышал, что он уже почти не используется
тебе же не использовать надо, а учить - сам сказал. а для учебы х32 норм
Replicant
тебе же не использовать надо, а учить - сам сказал. а для учебы х32 норм
Я имею ввиду учить, чтобы использовать на практике, а не просто потому что надо)