学习装配

问题描述 投票:0回答:1
trying以开始组装 那里有很多教程,但我更像是一个动手学习者

我有一个AMD Ryzen 5 5600h处理器。 Windows11.
问题是我无法知道在系统上应该或不应该使用什么代码,因此很难在编码错误和组装/链接之间进行故障排除。 寻找一种了解理论上应该有效的方法。 这是我尝试过的示例:


section .text global main global main2 main: mov ah, 0Ah mov al, 'A' mov bh, 1h mov cx, 1h int 10h main2: jmp main2

IDEA将打印到屏幕上,然后在末端循环。显然我不知道我在做什么,但是我很确定我能得到一些东西(任何东西),我可以从那里去。 因此,如果有人知道我在这里所做的事情有什么问题……或者我完全不在一个范围内开始的示例。任何理论上应该成功运行的程序都会有所帮助(理想情况下,将某些内容放在输出屏幕上,因此我可以在视觉上验证它的工作原理。 预先感谢

-Dave
    


您的示例是一个16位程序。您将需要一个16位的环境才能使用它。对于Windows 11,您可以免费获得Visual Studio 2022,其中包括32位和64位汇编器。通常,您将使用C库函数进行I/O.

示例32位程序:

.686p ;enable instructions .xmm ;enable instructions .model flat,c ;use C naming convention (stdcall is default) ; include C libraries includelib msvcrtd includelib oldnames includelib legacy_stdio_definitions.lib ;for scanf, printf, ... .data ;initialized data pfstr db "Hello world!",0dh,0ah,0 .data? ;uinitialized data .stack 4096 ;stack (optional, linker will default) .code ;code extrn printf:near public main main proc push offset pfstr call printf add esp,4 xor eax,eax ret main endp end
assembly x86 nasm
1个回答
0
投票
示例64位程序:

; include C libraries includelib msvcrtd includelib oldnames includelib legacy_stdio_definitions.lib ;for scanf, printf, ... .data msg db "Hello World",00dh,00ah,000h .code extern printf:near main proc sub rsp,32 ;caller allocates space for rcx,rcx,r8,r9 lea rcx,msg call printf xor eax,eax add rsp,32 ret main endp end


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.