PDA

Просмотр полной версии : Ассемблер под Windows глазами Спектрумиста



Yuri80
05.04.2017, 14:27
Здравствуйте.

Выставляю демонстрационный фрагмент книжки моей мечты. Это примерно треть от задуманного. остальное пока в разработке.
Цель - создать короткие универсальные программы под Windows на ассемблере и машинных кодах в стиле старых книжек по ZX-Spectrum. Естественно, вся книга пронизана тематикой Спектрума, ну и разного рода стебом (без этого пока не получается).
Программы специально адаптированы для тех, кто хоть немного умеет программировать на Ассемблере Z80. Поэтому вникнуть в тему сможете за считанные часы. Главное запомнить, что:

JP = JMP
JP Z = JZ
JP NZ = JNZ и т д.
LD A, x = MOV EAX, xxxx
(IX+xx) (IY+xx) = [EDI+xxxx][ESI+xxxx]
RRCA, RLCA = SHR,SHL
........
Ну и может парочка еще, которые имеют аналоги.
Все остальные, как PUSH, CALL, RET и др. абсолютно идентичны

Все программы в книге простейшие, эксклюзивные и визуальные. Каждая программа, позволяет увидеть результат на экране. Все подробно разжевано и проиллюстрировано, как и в прошлых своих работах.
Только одно но: За неимением мощного компьютера, все программы тестировались под WINDOWS XP SP2! поэтому внимательно смотрите, пойдут ли они на других системах. Но вроде должны.
Остальное вы прочтете внутри.

Ссылка на книгу: Win-ZX Assembler-2017 (https://drive.google.com/file/d/0B8kD6wqTOsIMelM2eE9BZXJtUEE/view)
Ссылка на примеры: https://drive.google.com/file/d/0B8kD6wqTOsIMZTYzWnlfaUJTSUk/view
ПАРОЛЬ: Assembler2017

Внимание: ввиду специфичности программ, большинство браузеров и антивирусов считают примеры вредоносными, так как написаны они по принципу ZX-SPECTRUM с прямым доступом к исполняемому коду, в адресное пространство и модификацией заголовков. Чтобы избежать блокировок на скачивание и прочих недоразумений, пришлось ставить пароль. Все примеры копировались из созданного pdf перед публикацией и проверялись на работоспособность.
Ну и прошу прощения за орфографию и опечатки. Пишу как умею.

С уважением,
Юрий

shurik-ua
05.04.2017, 14:34
Помню когда после Z80 решил ознакомиться со старшим братом x86, то с удивлением обнаружил что у Интела нет таких команд как "CALL Z, addr", "RET Z" и подобных. Мне это показалось очень странным ))

vlad
05.04.2017, 15:00
с удивлением обнаружил что у Интела нет таких команд как "CALL Z, addr", "RET Z" и подобных. Мне это показалось очень странным ))
А зачем они в этой архитектуре, когда есть для текущего сегмента JCC/JCxZ/JECxZ и управления цикла LOOPE/LOOPX/LOOPNE/LOOPNZ как примитивная DJNZ ))

shurik-ua
05.04.2017, 16:34
- - - Добавлено - - -


А зачем они в этой архитектуре, когда есть для текущего сегмента JCC/JCxZ/JECxZ и управления цикла LOOPE/LOOPX/LOOPNE/LOOPNZ как примитивная DJNZ ))

например удобно печатать нультерминированные строки:


print_string:
ld a,(hl)
or a
ret z
call print_char
inc hl
jr print_string

Shiny
10.04.2017, 10:58
Неуместное сравнение Спектрума с виндой: события, ресурсы,окна и многое другое к Спектруму неприменимы.

Oleg N. Cher
10.04.2017, 14:08
Ещё как всё это к Спектруму применимо. События: прерывание IM 2 наступило. Ресурсы: спрайты, иконки, курсоры. Окна: где их нет? Ещё на Laser Basic их делали.

Пользуясь случаем, хочу поблагодарить топикстартера. Весьма интересно получается!

Shiny
10.04.2017, 15:55
События: прерывание IM 2 наступило
да ну? окну могут придти сообщения: юзер кликнул мышкой, окно свернуто в панель задач, сработал таймер и т.д. Если в качестве gui используются диалоговое окно, то от его форм тоже приходят сообщения.
Ресурсы могут быть и другими.



Пользуясь случаем, хочу поблагодарить топикстартера. Весьма интересно получается!

все это поверхностно. вызов функции с помощью передачи параметров на стеке используются в Borland Tasm 5.0, в Masm32 удобнее вызывать invoke.

За пример GetOpenFileName надо убивать на месте, без суда и следствия. Некоторые API-функции требуют в качестве параметра ссылку на структуры. Поэтому заполнить данные, как приведено в книге - ламерство чистейшей воды.




;у меня структура объявлена в исходнике, т.к. не было windows.inc под рукой

OPENFILENAME struct

lStructSize dd ?;size of this shit in bytes = 20*4
hwndOwner dd ?;owner of OPEN_dialog
hInstance dd ?;
lpstrFilter dd ?;"All Files",0,"*.*",0
lpstrCustomFilter dd ?;NULL
nMaxCustFilter dd ?;NULL
nFilterIndex dd ?;NULL
lpstrFile dd ?;filename buffer,must be start with 0
nMaxFile dd ?;must be at least 256 bytes long
lpstrFileTitle dd ?;NULL
nMaxFileTitle dd ?;NULL
lpstrInitialDir dd ?;NULL - current dir
lpstrTitle dd ?;Dlg_title, m.b. NULL
Flags dd ?;poka NULL
nFileOffset dw ?;NULL - shows offset of file name in path
nFileExtension dw ?;NULL - " - file ext in path
lpstrDefExt dd ?;NULL
lCustData dd ?;message for Hook Procedure
lpfnHook dd ?;NULL
lpTemplateName dd ?;NULL

OPENFILENAME ends

.data
file_open OPENFILENAME <19*4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>

.code

;где-то в процедуре программы:

mov eax,dlg_hwnd
mov dword ptr file_open.hwndOwner,eax
mov eax,hinst
mov file_open.hInstance,eax
mov file_open.lpstrFilter,offset flt_open_name
mov file_open.lpstrFile,offset tmpbuf1
mov file_open.nMaxFile,03FFh
mov file_open.lpstrDefExt,0
mov file_open.Flags,OFN_HIDEREADONLY+OFN_ALLOWMULTISEL ECT+OFN_EXPLORER
mov byte ptr tmpbuf1,0
mov file_open.lpstrCustomFilter,0
mov file_open.nMaxCustFilter,1023-12
mov file_open.lpstrDefExt,0

call GetOpenFileNameA,offset file_open
test eax,eax
je prog_end




Далее, секции программы могут быть разными:
.data? - неинициализированные данные
.data - данные, заданные заранее - сообщения и тд
.code - сам код

Все излюбленные трюки кодеров на Z80 идут лесом - нельзя записывать данные в секцию .code, и вообще много чего нельзя.


В общем, я начинал с книги Зубкова, потом, когда был доступ в интернетам, с Iczelion'a(есть переводы на русском). Да и сейчас, я знаю, что не изучил все нюансы.

И еще: Masm32 позволяет массу вкусностей: объявление локальных переменных (local/assume), и условные конструкции IF

NEO SPECTRUMAN
10.04.2017, 17:07
Все излюбленные трюки кодеров на Z80 идут лесом - нельзя записывать данные в секцию .code, и вообще много чего нельзя.
ФТопку тогда этот ПЦ!!!!!!

- - - Добавлено - - -


надо убивать на месте
может нужна тема
о *****кодинге на ПЦ под шминдофс
и как в него вступить

Spectramine
10.04.2017, 17:31
Хорошая книга, для старта - в самый раз.

Shiny
10.04.2017, 17:58
ФТопку тогда этот ПЦ!!!!!!
вот оно - z80 ГМ. Если подумать, то это как раз и неплохо.



ожет нужна тема
о *****кодинге на ПЦ под шминдофс
и как в него вступить
только не вляпайся (http://govnokod.ru/)

NEO SPECTRUMAN
10.04.2017, 21:31
только не вляпайся
нет спасибо
я и сам так умею :)

- - - Добавлено - - -


Ссылка на
По хорошему нужно приатачить используемый masm
кто гарантирует что его свежая версия будет переваривать написанные примеры?

- - - Добавлено - - -

Пример 1.asm


1.asm(19) : error A2008: syntax error : PUSH

при копипасте stdu viewer
на месте переноса строки на следующую страницу делает



PUSH 0 PUSH 100
PUSH 100
PUSH ESI
CALL MoveToEx


самое интересное когда я копипащю оно из блокнота сюда
он опять становится нормальным о_О


PUSH 0
PUSH 100
PUSH 100
PUSH ESI
CALL MoveToEx


вывод только спектрум есть ТруЪ ;)
а всякая там венда...

и зачем предлагать освободить фон итд
умя полоска поверх всех окон прекрасно рисуется...
и потом их двигаешь а она на них так и остается (мну разочарован в перерисовке окон в винде короче)

- - - Добавлено - - -

после создания 2.asm
мы переходим к созданию 4.asm )))))))


- - - Добавлено - - -

блджад как меня все же бесят цифры с 0 в начале!!!!!!!!

из за этого дажо в книге очепятко.... имбицилиз... ноги бы по отрывал тому кто додумался так писать...

PUSH 0080FF0h

В данном примере в стек записывается темно красный цвет, состоящий из полного
красного (255), половинного зеленого (128) и полного отсутствия синего (0)

shurik-ua
10.04.2017, 22:00
Я так мельком пролистал - там страниц 10 про то как какие то кружочки рисовать прямо на рабочем столе да ещё на АСМе )
У меня была мысль попробовать попрограммировать ПЦ как нехилый такой микроконтроллер - скорее даже МАКРОконтроллер ) - а что, периферии немеряно, аппаратных и программных прерываний завались - вот тогда было бы что-то в стиле ZX.
А когда тебе ОСь говорит мол "Нельзя тебе в ЛПТ писать" - то это совсем не в духе Спектрума ))

NEO SPECTRUMAN
10.04.2017, 22:32
ОСь говорит мол "Нельзя тебе в ЛПТ писать"
можно забутитсо с флопика
и взять ФСЕА в свои грязные руки

- - - Добавлено - - -


Его можно легко найти в этих
ваших интернетах
то что легко можно найти для одних пользователей
не значет легко найти для других

гугла детектит пользователей по кукисам
и для каждого хомячка вполне может выдавать свой результат

умя кукисы долго не хранятся
и гугла практически ничего не находит нормально

нет кучу уже мертвых ссылок я то нашел...



поставил "Microsoft Win32 Programmers Reference.hlp" в кафычках
в рузультате найдена одна ссылка
и то
Login or Register to download

убрал .hlp
результатов больше
но
ссылки дохлые
гуглобуки
купить
и только потом то что надо (и то не сразу рассмотрел)

Shiny
11.04.2017, 05:09
поставил "Microsoft Win32 Programmers Reference.hlp" в кафычках
в рузультате найдена одна ссылк

win32.hlp

Yuri80
11.04.2017, 11:54
Спасибо за отзывы.
Всегда с уважением отношусь к любой критике, как положительной так и отрицательной. Уважаю чужое мнение, пусть даже противоположное. Самое главное, чтобы не переходили на оскорбления до подросткового уровня. С последним подходом действую без предупреждения в рамках правил форума. И без разбирательств буду жать кнопку жалоба с последующим письмом к администрации. Так что не обижайтесь.
Вижу над чем работать и исправлять. MASM и Win32.hlp положу при следующем обновлении примеров.

Для тех кто не понял, в танке или у кого совсем нет чувства юмора.
Вся книга сплошная шутка и пародия на "самоучитель Iczelion'a" с доброй иронией. Там все серьезно и пафосно, а тут я специально делал РАЗДОЛБАЙСКИЕ примеры, основанные на глюках и недокументированных особенностях Windows. Я отлично понимаю как нужно использовать окна GetSaveFileName. Принципиально для примеров выбрал MASM и также умышленно стал игнорировать все его макросредства типа Invoke, локальные переменные, процедуры и прочее.
Уж если говорить о пародиях, то я не первый кто это начал, и кто считает. Советую ознакомится вот с этим (http://www.cyberforum.ru/assembler/thread751124.html)

В фрагменте книги я изложил свою точку зрения на современное замусоривание ассемблера различными макросредствами. Если кому интересно, то моя позиция такова. Я уважаю все языки программирования и у каждого есть свое предназначение. Но конструкций языков высокого уровня множество, а Ассемблеры на любом компьютере очень похожи. Как к примеру русский, белорусский, украинский и некоторые другие славянские языки. Поэтому не надо из Ассемблера лепить очередной язык высокого уровня, как это пропагандирует Iczelion и его последователи. Цель книги - показать, что и без всей этой требухи и без знания теории, можно создать программу под Windows в кустарных условиях.

Так вот этот Iczelion, которого тут упомянули, делал свой самоучитель с позиции знатока и любителя высокоуровневых сред программирования. И скажем, так черпал идеи из более ранних трудов Петзольда.
Я иду с противоположной стороны и рассматриваю программирование под Windows с позиции очень примитивного программирования и машинных кодов. И примеры свои я не передираю ни у кого, а сам придумываю с нуля и от балды, проверяя работоспособность.

Я был уверен, что тут все люди взрослые и поймут, что я хотел донести. Но как оказалось, не все.

NEO SPECTRUMAN
11.04.2017, 12:40
А какой х86 асм можЫт дать такие же возможности по генерации мегатон кода как sjasmplus с lua????

- - - Добавлено - - -


нельзя записывать данные в секцию .code, и вообще много чего нельзя.
они не попадут в кеш данных?
тоесть проц не полезет в кеш инструкций за данными?
и будет...

- - - Добавлено - - -


а тут я специально делал РАЗДОЛБАЙСКИЕ примеры
по моему в начале сильно много рисования полосочек

порисовали
пописали

а далее быстрей хочетсо

создание окон кнопок
обработку их нажатий
опрос клавиатуры
запиление масива\битмапа и выкидывание его на экран

а далее можно и своим кодом

а рисование кружочков и пакманов
можно вынести в табличку
вызовы winapi, ее параметры и картинко результат


нужна книга для человека уже умеющего кодить
а не как всегда...

Shiny
11.04.2017, 13:27
создание окон кнопок
обработку их нажатий
опрос клавиатуры
запиление масива\битмапа и выкидывание его на экран

Работа с диалогами здесь(порции *****кода на Tasm):
http://g0blinish.ucoz.ru/index/win32/0-7

по рисованию:
http://learnasm.narod.ru/
http://radiofront.narod.ru/htm/prog/htm/winda/api/paint.html
http://www.frolov-lib.ru/books/bsp/v14/ch2_3.htm

GDI в помощь.

NEO SPECTRUMAN
11.04.2017, 14:00
win32.hlp
полистал...
сколько там ненужного хлама...
не завидую я wine писателям короче...

Shiny
11.04.2017, 14:22
сколько там ненужного хлама...
Это удобный справочник для программирования.

NEO SPECTRUMAN
11.04.2017, 14:24
не в смысле
куча ненужных процедур в винде имеется

Yuri80
11.04.2017, 15:56
Вот зря не почитали самую последнюю страницу. То что я выложил, это маленькая demo-версия 0.1. Планируемая книга состоит из 11 частей. объем более 600 страниц.

в 5-й части, которую я сейчас выложил сырую как раз даны примеры вывода фактически всех объектов с нуля на рабочий стол. только она более 100 страниц.

В 6-й части разобраны окна RegisterClassEx, DialogBoxIndirectParam, CreateDialogIndirectParam и их схемы работы, согласно ollydbg
В 7-й части рассмотрено многослойное классическое программирование на подложку из окон, рассмотренных в 6-й части
В 8-й части будет рассмотрена работа в программе по прерыванию, которую вызывает Windows, особенности сообщений, раскраска элементов
В 9-й части нестандартный подход по работе с памятью, dll, запись данных
В 10-й части Демосцена из объектов Windows (сложные примеры программ).
В 11-й части ручная лепка .exe файлов, компиляция через .com, ручное создание ресурсов.

По случаю последних событий, выкладываю обновление v0.2, в которую вошла 5 глава. Она сырая, почти без комментариев, с одними примерами. В ней как раз объясняется создание всех известных объектов и это еще не дошел до обычных окон, с которых начинается знакомство. Размер новой версии увеличился более чем на 100 страниц.
Кроме того добавил обложку, исправил предисловие и поставил предупреждение о том, что мнение автора может не совпадать с мнением окружающих.

https://drive.google.com/open?id=0B8kD6wqTOsIMalNTMEpCbDg1MjQ

http://savepic.net/9234818.jpg

Учтите, это не быстрое дело. Программы фактически все готовы, но нужно тестировать, верстать и приводить в порядок. На это может уйти год.

- - - Добавлено - - -

Меню, таблицы горячих клавиш и диалоговые окна без ресурсов делаются элементарно, моим "Рабоче-крестьянским" ассемблером:

Первое окно:

; Цветное окно DialogBoxIndirectParam со значком (C) EuroYura 2017

.686p
.model flat

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib

.code
nachalo: MOV EBX, OFFSET nachalo-180h
PUSH 0
CALL GetModuleHandle
MOV ESI, EAX

; Построение массива данных в памяти с нужными значениями для создания диалогового окна

MOV DWORD PTR [EBX+20h], WS_OVERLAPPEDWINDOW
MOV DWORD PTR [EBX+24h], WS_EX_CLIENTEDGE
MOV WORD PTR [EBX+28h], 0
MOV WORD PTR [EBX+2Ah], 150
MOV WORD PTR [EBX+2Ch], 100
MOV WORD PTR [EBX+2Eh], 300
MOV WORD PTR [EBX+30h], 200
MOV WORD PTR [EBX+32h], 0
MOV WORD PTR [EBX+34h], 0

; Перенос текста заголовка в массив с переводом в UNICODE

PUSH OFFSET Zagolowok
CALL lstrlen

PUSH EAX
PUSH EBX
ADD DWORD PTR [ESP],36h
PUSH -1
PUSH OFFSET Zagolowok
PUSH MB_PRECOMPOSED
PUSH CP_ACP
CALL MultiByteToWideChar

; Создание диалогового окна

PUSH 0
PUSH OFFSET IzolProgr
PUSH 0
PUSH EBX
ADD DWORD PTR [ESP],20h
PUSH ESI
CALL DialogBoxIndirectParam

RET

; Изолированная сигналоприемная программа, в которую компьютер входит сразу после создания окна

IzolProgr: MOV EBP, ESP
CMP DWORD PTR [ESP+8], WM_INITDIALOG
JE Znachok

CMP DWORD PTR [ESP+8], WM_CTLCOLORDLG
JE CwetOkna

CMP DWORD PTR [ESP+8], WM_CLOSE
JE Wyhod

MOV EAX, 0
RET

; Установка цвета фона окна

CwetOkna: PUSH 0080FFh
CALL CreateSolidBrush
RET

; Установка значка в окно

Znachok: PUSH IDI_EXCLAMATION
PUSH 0
CALL LoadIcon

PUSH EAX
PUSH ICON_BIG
PUSH WM_SETICON
PUSH [EBP+4]
CALL SendMessage
RET

; Выход из программы изолированного цикла

Wyhod: PUSH 0
PUSH [EBP+4]
CALL EndDialog
RET

Zagolowok db "Цветное 0кно DialogBoxIndirectParam",0
end nachalo

Компиляция:

c:\masm32\bin\ml /c /Cp /Gz /coff 70.asm
c:\masm32\bin\link /SUBSYSTEM:WINDOWS /ALIGN:1024 70.obj
pause

Другой тип диалогового окна CreateDialogIndirectParam:

; Простейшее окно CreateDialogIndirectParam с классической постройкой массива (C) EuroYura 2016

.686p
.model flat

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib

.code
nachalo: MOV EBX, OFFSET nachalo-180h
PUSH 0
CALL GetModuleHandle
MOV ESI, EAX

; Построение массива данных в памяти с нужными значениями для создания диалогового окна

MOV DWORD PTR [EBX+20h], WS_VISIBLE+WS_OVERLAPPEDWINDOW
MOV DWORD PTR [EBX+24h], WS_EX_CLIENTEDGE
MOV WORD PTR [EBX+28h], 0
MOV WORD PTR [EBX+2Ah], 150
MOV WORD PTR [EBX+2Ch], 100
MOV WORD PTR [EBX+2Eh], 300
MOV WORD PTR [EBX+30h], 200
MOV WORD PTR [EBX+32h], 0
MOV WORD PTR [EBX+34h], 0

; Перенос текста заголовка в массив с переводом в UNICODE

PUSH OFFSET Zagolowok
CALL lstrlen

PUSH EAX
PUSH EBX
ADD DWORD PTR [ESP],36h
PUSH -1
PUSH OFFSET Zagolowok
PUSH MB_PRECOMPOSED
PUSH CP_ACP
CALL MultiByteToWideChar

; Создание диалогового окна

PUSH 0
PUSH OFFSET IzolProgr
PUSH 0
PUSH EBX
ADD DWORD PTR [ESP],20h
PUSH ESI
CALL CreateDialogIndirectParam
MOV EDI, EAX

; Цикл повседневной жизни старения и утилизации окна после его смерти (закрытия окна)

ViznxOkna: PUSH 0
PUSH 0
PUSH 0
PUSH EBX
CALL GetMessage

CMP EAX, 0
JE SmertxOkna

PUSH EBX
PUSH EDI
CALL IsDialogMessage

CMP EAX, 0
JNE ViznxOkna

PUSH EBX
CALL DispatchMessage
JMP ViznxOkna

SmertxOkna: RET

; Изолированная сигналоприемная программа, в которую компьютер входит после входа в подпрограмму создания окна

IzolProgr: MOV EBP, ESP
CMP DWORD PTR [ESP+8], WM_INITDIALOG
JE Znachok

CMP DWORD PTR [ESP+8], WM_CTLCOLORDLG
JE CwetOkna

CMP DWORD PTR [ESP+8], WM_CLOSE
JE Wyhod

MOV EAX, 0
RET

Znachok: PUSH IDI_QUESTION
PUSH 0
CALL LoadIcon

PUSH EAX
PUSH ICON_BIG
PUSH WM_SETICON
PUSH [EBP+4]
CALL SendMessage
RET

CwetOkna: PUSH 0FF0080h
CALL CreateSolidBrush
RET

Wyhod: PUSH 0
CALL PostQuitMessage

MOV EAX, 0
RET

Zagolowok db "Цветное окно CreateDialogIndirectParam",0
end nachalo

Компиляция:

c:\masm32\bin\ml /c /Cp /Gz /coff 72.asm
c:\masm32\bin\link /SUBSYSTEM:WINDOWS /ALIGN:1024 72.obj
pause

Shiny
11.04.2017, 16:48
; Перенос текста заголовка в массив с переводом в UNICODE

поясните, ЗАЧЕМ ЭТО?

NEO SPECTRUMAN
12.04.2017, 22:38
Картинка результат к 23.asm не та что нужно
крест в красном кружке и 2 кнопки повтор и отмена явно не PUSH MB_YESNOCANCEL+MB_ICONQUESTION

пример 24a.asm

Для разнообразия убрана кнопка «Справка» из окна.
но в 24.asm тоже не было справки...

да и в paint-e у меня нету справки...
но 24 и 24а идентичны по настройке окна

Yuri80
13.04.2017, 13:45
Спасибо за поправки! Совершенно верно! Торопился, когда верстал pdf из word и вырезал фрагменты книжки из черновика. Все исправил у себя на будущее. Картинка 46 должна быть такая:

http://savepic.net/9215241.jpg

В 24.asm к строчке MOV DWORD PTR [EBX+14h], CC_FULLOPEN+CC_RGBINIT
нужно в конец прибавить +CC_SHOWHELP и будет справка как на картинке

NEO SPECTRUMAN
13.04.2017, 18:05
31.asm не завершается корректно по нажатию на крестек
и продолжает висеть в процессах
ага так и надо ОК

да и названия меток в нем какието очепятковостранные...

NEO SPECTRUMAN
14.04.2017, 21:53
поясните, ЗАЧЕМ ЭТО?
почетал еще в некоторых местах...

и о боже они хранят строки в одном
потом их конвертят в другое
а потом их выводят....:v2_dizzy_facepalm:


а этот MарASM не умеет конвертить строки...

ПЦ такой ПЦ :v2_dizzy_facepalm:^2

Shiny
15.04.2017, 20:56
насколько мне известно, Flat Assembler поддерживает Unicode
в TASM'e я извращался похуже:


encoder_1:;"image/jpeg"
db 69h ; i
db 0
db 6Dh ; m
db 0
db 61h ; a
db 0
db 67h ; g
db 0
db 65h ; e
db 0
db 2Fh ; /
db 0
db 6Ah ; j
db 0
db 70h ; p
db 0
db 65h ; e
db 0
db 67h ; g
db 0
db 0
db 0



это для GDI+

а выше изврат вообще. Автор похоже игнорирует текстовые функции A/W

NEO SPECTRUMAN
15.04.2017, 21:44
в TASM'e я извращался похуже:
Мдя....

мне сразу приходит в голову
какая нибудь такая тулза
https://r12a.github.io/apps/conversion/
(они обычно прекрасно работают в офлайне)

и автозамена "пробелов" на запятые в блокноте...
и сбоку комментарий что написано...

- - - Добавлено - - -


а выше изврат вообще. Автор похоже игнорирует текстовые функции A/W
мне понравилось в описании что все равно венда сначала запускает конвертацию а потом уже запускает одну универсальную процедуру...

Shiny
15.04.2017, 22:03
мне понравилось в описании что все равно венда сначала запускает конвертацию а потом уже запускает одну универсальную процедуру...

профанация.

reήilenσ eht ni skrőш woи edøcinü :0.2 tëuop

вот этот уникод в ANSI пусть преобразует.

NEO SPECTRUMAN
15.04.2017, 23:56
вот этот уникод в ANSI пусть преобразует.
с точностью на оборот же
вот цитата от тудо

В Win32 есть 2 типа функции заканчивающиеся на A и на W. Всё отличие в строках, которые принимают функции. А-функции принимают ANSI строки. W-функции принимают Unicode строки. У каждой функции, которая принимает строки, есть обе версии. Обычно все пользуются ANSI версиями функций. Но в любом случае при вызове ANSI функции все строки сначала преобразуются в Unicode строки, и будет вызвана Unicode функция.
не знаю на сколько достоверно...

- - - Добавлено - - -

Не понел
а от куда такая не любовь к invoke?

оно хоть и не теплое и ламповое
но вполне понятное и полезное

мня больше бесят
REPEAT
IF
и ld a,b,f,(hl),100500,c,$70050,(bc),de в спектрумовских асмах
которые генерируют ассемблерный код...

Shiny
16.04.2017, 11:53
а от куда такая не любовь к invoke?
это неизлечимо, похоже.

Интересно, как будет работать: запихать в ресурсы строку, загрузить с префиксом W и вывести на экран?.

NEO SPECTRUMAN
16.04.2017, 22:04
.data? - неинициализированные данные
.data - данные, заданные заранее - сообщения и тд
.code - сам код

а как прямо с асма дать возможность чтения\записи\исполнения для определенной секции?

не вызывать же VirtualProtect для уже готового кода...

Shiny
17.04.2017, 08:29
в data?

NEO SPECTRUMAN
17.04.2017, 22:07
в data?
ну это выделит пустое место только после запуска приложения

MASM не дает туда ничего ложить


а мне нужно накидать туда кода и даты (прямо на этапе компиляции(всякие самомодифицируемые коды и динамические рекомпиляторы))

но при этом нужно иметь и участки кода без возможности записи в них
и секции с данными недоступными для исполнения
на случай если там что то пойдет не так

как задать размер этой data? ?

Shiny
18.04.2017, 06:39
ну это выделит пустое место только после запуска приложения

MASM не дает туда ничего ложить

Если ты установил MASM32, то найдешь папку examples, например enumwin.asm:



.data
szDisplayName db "Enumerated Window Explorer",0
szClassName db "Enumerator_Class",0

.data?
CommandLine dd ?
hWnd dd ?
hIcon dd ?
hCursor dd ?
hInstance dd ?
hList dd ?
hStat1 dd ?
hStat2 dd ?
lpfnListProc dd ?
sWid dd ?
sHgt dd ?

.code


- - - Добавлено - - -


а мне нужно накидать туда кода и даты (прямо на этапе компиляции(всякие самомодифицируемые коды и динамические рекомпиляторы))

мне думается, что проще обойтись GlobalAlloc - отвел память, поиздевался над памятью, потом освободил GlobalFree.

объявлять буфер как


buffer BYTE 512 dup(?)

немного небезопасно

4ugui
16.07.2017, 15:16
Книга хорошая, но выбор masm32 мне кажется изначально неверный. Объясню почему, судя по всему его перестали развивать, 64-битная версия идет только в составе visual studio. Лучше было бы взять fasm, http://flatassembler.net , он сейчас на коне, и книга была бы более актуальная. А так в целом любой труд достоин уважения.

OrionExt
16.07.2017, 15:30
Я вообще не понимаю вопрос выбора ассемблера. Ты хоть вариации ассемблера для I8080 (Z80) на компе для лунной базы запусти. Всякие плюшки (структуры, bin файлы для любой платформы и т.д.) вопрос утилит и скрипта для компиляции. Тут только привычка и предпочтения, и все.

- - - Добавлено - - -

Прикручиваете .data .code. Нет такого понятия в ассемблере (для Си Z80 условно - есть) для ZX.

4ugui
16.07.2017, 16:01
OrionExt,вопрос выбора крайне важен с т.з. актуальности знаний и их тенденции к устареванию. Зачем тратить время на чтение книги где инфа такая узкоспециализированная (только макс 32 битные инструкции и только винда) и эти знания уже фактически стремительно теряют свою актуальность в виду того что винда уже у всех далеко не win xp sp2, а процы снабдились доп. комплектом 64-битных регистров и инструкций к ним.
Сейчас вообще модно все кросс-компилить, не факт даже что х86-64 сможет сохранить свои лидирующие позиции в течении ближайших 10-20 лет.
Найти русскоязычную литературу которая введет в курс дела программирования на асме, на одном дыхании с примерами, чтобы это все сразу заработало вообще мало , было бы здорово если бы автор двигался в этом направлении (у автора приблизительно получился пересказ уроков iczeliona которые были на wasm.ru, только выбор стилистики синтаксиса чуть другой более хардкорный ).

OrionExt
16.07.2017, 16:21
4ugui, ой. Я забыл про первый пост. Ну х.з. Может автору темы так проще. Мне проще пользоваться управляемыми инструментами и простым пусть даже M80 (или Sjasm Z80).

И Эмулятором да хоть чайника.

Shiny
16.07.2017, 16:22
все на 64бит?

4ugui
16.07.2017, 16:33
все на 64бит?

Думаю да, давно пора использовать все возможности cpu , тем более что полноценные 64-битные инструкции это не какой то костыль в виде mmx или 3dnow.

P.S> Например ты такой сидишь и кодишь кальк для покера который считает шансы, думаешь блиин это же надо засунуть колоду 52 карты в 2 регистра, а потом вспоминаешь, епт есть же RAX и все становится на свои места.

Shiny
16.07.2017, 17:08
Думаю да, давно пора использовать все возможности cpu , тем более что полноценные 64-битные инструкции это не какой то костыль в виде mmx или 3dnow
а какие? у меня есть простой текстовый редактор, которому это не нужно.



Например ты такой сидишь и кодишь кальк для покера который считает шансы, думаешь блиин это же надо засунуть колоду 52 карты в 2 регистра, а потом вспоминаешь, епт есть же RAX и все становится на свои места.

бугогашечки. ничо не понял.

OrionExt
16.07.2017, 17:24
Чтобы сделать тортик для себя Z80 и 256-бита, я уже обмазался и вишенка сверху Z80=). Ну ладно, каждый с ума сходит по своему.

4ugui
16.07.2017, 17:35
а какие? у меня есть простой текстовый редактор, которому это не нужно.

бугогашечки. ничо не понял.

Такое ощущение что ты не понял то что я хотел донести :) При чем тут твой блокнотик вообще хз, ты можешь набирать текст в чем угодно речь же шла о компиляторе, скомпилируй например инструкцию xor rax,rax .
Про второе, представь колоду из 52 карт в виде вкл/выкл битов, сразу станет ясно. Ты же будешь писать любые алгоритмы и логику оперируя макс 32 битными регистрами, хотя твой процессор умеет гораздо больше, глупо не пользоваться всем ассортиментом доступных команд только из за выбора компилятора.

OrionExt
16.07.2017, 17:39
4ugui, этому котику скучно. Лапками царапает что найдет.

Shiny
16.07.2017, 18:23
Про второе, представь колоду из 52 карт в виде вкл/выкл битов, сразу станет ясно. Ты же будешь писать любые алгоритмы и логику оперируя макс 32 битными регистрами, хотя твой процессор умеет гораздо больше, глупо не пользоваться всем ассортиментом доступных команд только из за выбора компилятора.

Шо, одним регистром? лол.

Кстати, адепты ассемблера под вынь, пробовали так толсто на wasm.ru? я сделаю это без вас.

4ugui
16.07.2017, 19:27
Шо, одним регистром? лол.

Кстати, адепты ассемблера под вынь, пробовали так толсто на wasm.ru? я сделаю это без вас.

Уже ниче не сделаешь wasm.ru загнулся эдак несколько лет назад, но ты заходи если шо.

NEO SPECTRUMAN
16.07.2017, 22:35
4ugui, ты не понел
это тема для тех спектрумистов у которых никак не доходят руки начать осваивать кодинг под финдофс

а начать надо хоть с чего то

и наверное это чего то
первое что попалось автору
тк он и сам только начинает осваивать...

Andrew771
08.08.2017, 22:19
На днях я натолкнулся на вот эту ссылку (https://habrahabr.ru/post/101810/)
И пришла безумная идея, замутить на PC свою спектрумо-подобную ОС с нуля :)

NEO SPECTRUMAN
08.08.2017, 22:22
ЧАвО ШТОА?? о_О

Andrew771
09.08.2017, 00:05
ЧАвО ШТОА?? о_О
что в этом необычного или нереализуемого?))

- - - Добавлено - - -

В книге Yuri80 мне понравились фразы:


Работа со SPECTRUM-совместимым компьютером наложила определенный
отпечаток на восприятие окружающего мира, и я как-то незаметно стал поклонником
старой школы программирования. Со словом «компьютер» у меня ассоциируется не
«планшетник» или «Айфончик» со «Вконтактиком» и фоточками с отдыха, а пустой
монитор или телевизор с белым или черным экраном и мигающим курсором в углу.
Благодаря «Тяжелому 8-ми битному детству» термин «программирование» также рисует в
сознании картину, совершенно неведомую современным программистам на языках
высокого уровня с навороченными компиляторами. Но эпоха Спектрума, как жизнь
хулигана, была яркой, но не долгой...
Уже во 2-й половине 90-х, когда на смену Спектруму в квартиру пришел первый
IBM совместимый компьютер с Windows 95. Я попробовал ассемблер, который тогда
часто пропагандировался для работы под DOS. Но уже тогда привычка к
программированию в машинных кодах с плоской системой адресации под «голый
компьютер» взяла свое.
Прям про меня, а возможно и многих тут))

Shiny
09.08.2017, 05:38
мне некоторое творцы напоминают бородатый баян:

- поручик, Вы любите детей?
- детей, нет, но сам процесс!

andrews
09.08.2017, 11:46
Титанический труд! А взаимодействие с операционной средой, железом, другими языками программирования будет описано? Ну и про средства отладки куда ж без этого. Вот недавно с удивлением обнаружил, что годами испытанные в Win XP терминалки, некорректно работают c USB COM портами под Win 7. А значение этого труда еще и в том, что несильно-то стремятся раскрывать писишникам секреты. Опасаются сами знаете чего. Так что лучше про Linux ассемблер и хитрости описывать. И польза двойная - для многоядерных коммуникационных процов полезно "малинка и иже с ними". Там Linux везде. У меня вот nanopi под руками.

Shiny
16.08.2017, 18:57
Какие средства отладки? OllyDbg хватает.

shurik-ua
16.08.2017, 20:30
А значение этого труда еще и в том, что несильно-то стремятся раскрывать писишникам секреты. Опасаются сами знаете чего.
чего опасаются то, и кто ? ))