Assembly 程序集:输出变量,操作系统相关?,执行
在我们在课堂上讨论了一点组装之后,我正在努力学习一些组装。我正在尝试将一个基本java程序转换为汇编语言,以查找斐波那契数,我认为我的逻辑正确,但我的朋友告诉我,它可能无法在我的Windows 7 64位计算机上运行,因为ASM根据您的操作系统而不同(:O他是认真的吗?) 这是我的密码:Assembly 程序集:输出变量,操作系统相关?,执行,assembly,x86-64,windows-7-x64,Assembly,X86 64,Windows 7 X64,在我们在课堂上讨论了一点组装之后,我正在努力学习一些组装。我正在尝试将一个基本java程序转换为汇编语言,以查找斐波那契数,我认为我的逻辑正确,但我的朋友告诉我,它可能无法在我的Windows 7 64位计算机上运行,因为ASM根据您的操作系统而不同(:O他是认真的吗?) 这是我的密码: SECTION .data Var2: resd 3 Var5: resd 4 Var1: db 10 Var3: db 1 Var4: db 1 SECTION .text global ma
SECTION .data
Var2: resd 3
Var5: resd 4
Var1: db 10
Var3: db 1
Var4: db 1
SECTION .text
global main
main:
MOV Var2,0
Loop1:
ADD Var2,1
MOV Var5,Var3
ADD Var3,Var4
MOV Var4,Var5
CMP Var2,Var1
JE Fin
JP Loop1
Fin:
Put printing in here.
2/ASM中是否有类似System.out.print的功能
3/一旦我弄明白了,我该如何执行它?我有雷达,但我似乎无法通过它运行我的代码。完成后如何执行ASM程序
多谢各位
movsb
、movsw
、movsd
和movsq
,但是要开始使用,以后更容易学习它们
不清楚您希望变量的大小是什么,因为您对某些变量使用db
,而对其他变量使用resd
。如果您希望所有Var1
,Var2
,Var3
,Var4
,Var5
都是字节,那么它应该是例如:
Var2: db 3
Var5: db 4
Var1: db 10
Var3: db 1
Var4: db 1
如果希望它们是DWORD(dd
,每个32位):
循环1:
添加[Var2],dword 1
MOV-eax,[Var3]
MOV[Var5],eax
mov-eax,Var4
添加Var3,eax
mov-eax,[Var5]
MOV Var4,eax
mov-eax,[Var1]
CMP-Var2,eax
杰芬
太平绅士1
我将一些保留为resd,因为我没有按原样设置它们的值。我将包括您在第一篇文章中给出的答案,并对其进行相应的编辑。一旦程序结束,如何打印Var5的内容?像让它显示输出吗?@Niehm我回滚了您的编辑,因为将答案复制到问题会导致答案对将来试图解决同类问题的人失去意义。对于字节,通常使用
resb
(resd
用于DWORD)。无论如何,使用add Var2,1
(如果Var2
未定义)向未定义的值添加一些值通常是没有意义的。我没有Windows,但请参阅Windows x86-64程序集Hello world,以查看打印和退出代码。
Loop1:
ADD [Var2],byte 1
MOV al,[Var3]
MOV [Var5],al
mov al,Var4
ADD Var3,al
mov al,[Var5]
MOV Var4,al
mov al,[Var1]
CMP Var2,al
JE Fin
JP Loop1
Loop1:
ADD [Var2],dword 1
MOV eax,[Var3]
MOV [Var5],eax
mov eax,Var4
ADD Var3,eax
mov eax,[Var5]
MOV Var4,eax
mov eax,[Var1]
CMP Var2,eax
JE Fin
JP Loop1