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