Введение в язык ассемблера

Я относительно новичок в языке ассемблера. Я нашел очень много руководств, в которых объясняется, как создать приложение HelloWorld с использованием ML64 и MASM32, но ни в одном из них программа не описана подробно. Например, взгляните на приведенный ниже пример, который я нашел в Интернете и скомпилировал (64 бит):

main proc
sub rsp, 68h      ; space for 4 arguments + 16byte aligned stack
xor r9d, r9d        ; 4. argument: r9d = uType = 0
lea r8, [caption]   ; 3. argument: r8  = caption
lea rdx, [text]     ; 2. argument: edx = window text
xor rcx, rcx        ; 1. argument: rcx = hWnd = NULL
call MessageBoxA
xor ecx, ecx        ; ecx = exit code
call ExitProcess
main endp

end

Я могу проследить это до конца. Я понимаю, что есть регистры общего назначения и сегментные регистры, но как решить, какой из них использовать. Например, почему «r8» содержит заголовок вместо r9? Есть ли ссылка на сборку для WinAPI? Я понимаю, что это основной вопрос. Я выбрал тег MASM32, так как это общий вопрос с 64-битным примером.


person w0051977    schedule 20.03.2012    source источник


Ответы (2)


соглашение о вызовах Windows x64 описано, например, здесь.

Чтобы узнать порядок аргументов, ищите, например. MessageBoxA здесь.

person jofel    schedule 20.03.2012
comment
благодаря. Ваша вторая ссылка - это то, что я искал. Можете ли вы объяснить, что делает следующая строка? xor ecx, ecx - person w0051977; 20.03.2012
comment
xor ecx,ecx очищает (= обнуляет) регистр ecx. См. stackoverflow.com/questions/4749585/understanding-xor. - person jofel; 20.03.2012
comment
благодаря. Есть ли учебник, который объясняет, как выполнять простые операции, например. сложение, вычитание и т. д. без вызова Windows API? Кажется, я не могу найти. - person w0051977; 20.03.2012
comment
@ w0051977 Сначала прочитайте stackoverflow.com /questions/82432/ и если вы действительно хотите изучить ассемблер, то stackoverflow.com/questions/1575948/ Теорию и некоторые примеры x86-32 см. напр. г. maven.smith.edu/~thiebaut/ArtOfAssembly/artofasm.html - person jofel; 20.03.2012
comment
спасибо за ссылки, особенно за эту: artofasm.html. Я разработчик высокого уровня, изучаю язык ассемблера в свободное время. Есть ли документация для ML64 и DOS; примерно так: msdn.microsoft.com/ en-us/library/zthk2dkh%28v=vs.80%29.aspx (для Windows API). - person w0051977; 21.03.2012

Я предлагаю несколько вещей, во-первых, отдельное изучение языка ассемблера и изучение вызовов операционной системы. Во-вторых, не начинайте с x86 в качестве первого языка ассемблера. Сделайте его третьим, четвертым или последним, который вы изучаете. Если вы чувствуете, что должны, я рекомендую начать с 8088/8086 и получить основу для x86, прежде чем углубляться в то, чем он стал.

arm/thumb/msp430/mico8/avr — все это хорошие первые, вторые, третьи и т. д. наборы инструкций, вторым или третьим (другое семейство), если не первым, у вас будет хорошая основа для работы компьютеров. pcemu не принадлежит мне. Я разветвил версию и удалил операционную систему, чтобы ее можно было использовать для изучения языка ассемблера. За несколько долларов вы можете получить подержанные копии руководства по 8088/8086 от Intel.

https://rads.stackoverflow.com/amzn/click/com/1555120814

Опять же, хорошая основа для того, что сегодня стало x86.

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

person old_timer    schedule 20.03.2012