Assembly 我需要什么类型的汇编程序?

Assembly 我需要什么类型的汇编程序?,assembly,x86,windows-7,x86-64,a86,Assembly,X86,Windows 7,X86 64,A86,我正在学习汇编,我真的很喜欢裸推和弹出指令的概念。我真的很喜欢低级的东西。我一直在学习教程,以下是一些代码,您可以使用这些代码制作一个简单的.exe: MOV AH,02 ; Function to output a char MOV DL,"!" ; Character to output INT 21h ; Call the interrupt to output "!" MOV AH,04Ch ; Select exit function MOV AL,00 ; Retu

我正在学习汇编,我真的很喜欢裸推和弹出指令的概念。我真的很喜欢低级的东西。我一直在学习教程,以下是一些代码,您可以使用这些代码制作一个简单的.exe:

MOV AH,02   ; Function to output a char
MOV DL,"!"      ; Character to output
INT 21h ; Call the interrupt to output "!"
MOV AH,04Ch ; Select exit function
MOV AL,00   ; Return 0
INT 21h ; Call the interrupt to exit
那家伙说你可以用A86汇编代码,但当我访问他们的网站时,它似乎已经灭绝了,程序版本只升到了Windows XP?是否有适用于Windows 64位的A86汇编程序?什么类型的汇编程序使用这些极其简单的指令?(我真的不太喜欢MASM或FASM)

谢谢


另外,我一直在使用Olly DBG进行逆向工程程序,这就是为什么我一直在学习更多关于汇编的知识,从而学习PUSH、POP、MOV和INT。

嗯,您使用的教程是16位DOS代码,在现代操作系统上不起作用。学习32位汇编,你会过得更好

x86汇编程序

MASM - Ok, you don't like it
FASM - Now your being too picky.
NASM 
YASM
RoASM
JWasm
GoASM

还有其他一些。如果您不喜欢FASM,那么您可能也不会喜欢其他的。

一个简单的
示例。使用普通x86指令的asm
程序可能如下所示:

example PROGRAM Format=PE,Entry=WinMain:
         IMPORT MessageBoxA, Lib=user32.dll ; Declare used Windows functions.
         IMPORT ExitProcess, Lib=kernel32.dll
WinMain: PUSH 0                             ; Show MB_OK button in MessageBox.
         PUSH ="I'm the box caption."       ; Text in MessageBox title.
         PUSH ="I'm the example program!"   ; Text to show within MessageBox.
         PUSH 0                             ; MessageBox belongs to the desktop.
         CALL MessageBoxA                   ; Invoke Windows function.
         PUSH 0                             ; Errorlevel to terminate with.
         CALL ExitProcess                   ; Invoke Windows function. 
        ENDPROGRAM
可以通过使用命令将其转换为
example.exe

如果您放弃了简单的汇编编程受虐狂,并按照@Gunner的建议学习使用宏,它们将封装无聊的重复内容,并允许您专注于实际的汇编。使用宏的示例将短得多:

example PROGRAM Format=PE,Entry=WinMain:
         INCLUDE winapi.htm
WinMain: WinAPI MessageBox,Lib=user32.dll,0,="I'm the example program!",="I'm the box caption.",0
         TerminateProgram 0
        ENDPROGRAM

根据我的经验,大多数大学都使用MIPS来学习组装。有在线汇编器和模拟器,例如,我确实比其他人更喜欢FASM……但我发现FASM的代码很奇怪:。代码开始:调用MessageBox,HWND_桌面,“嗨!我是示例程序!”,调用GetCommandLine,MB_OK调用ExitProcess,0.结束-开始可能与普通推送和弹出指令大不相同。…。@43.52.4D。查看反汇编或列表文件或
invoke
宏的定义。如果有参数,你会在
invoke
中发现相当多的推送。是的,我一直在Olly Dbg中分解程序,这就是为什么我有点希望它们是一种更接近我所看到的汇编语言。我是编程受虐狂吗?也许…现在所有的资产都允许使用高级的东西。调用只是一个宏。你不必使用它。使用push/call,你可以使用直接操作码而不是mnuemonics。我写的是我在调试器中看到的,所以我不确定你在做什么。我要补充的是,现在学习16位汇编程序在很大程度上是浪费时间。出于怀旧的原因,看一眼它可能会有所启发,但学习它相当于学习希腊语。这是由于跨越三十年的巨大硬件变化。例如,16位将RAM分割成64k“页”,因为16位的可寻址性=2^16=64k。由编译器(或汇编程序员!)来处理分页!32位使用“扁平”内存模型,因为2^32=4GB。16位也不会在较新的微软操作系统上本机运行;必须在或类似的环境中运行它。