Assembly 如何将返回的值保存到注册表内存中
我不熟悉集会。我想生成一个循环计数器,对前10个十进制数(32位)求和。这是我想到的。代码必须在MASM编译器中运行。不应向控制台输出任何内容,而应将结果保存到注册表内存中。 有没有想过如何做到这一点? 这是我到目前为止所拥有的Assembly 如何将返回的值保存到注册表内存中,assembly,x86,masm,masm32,Assembly,X86,Masm,Masm32,我不熟悉集会。我想生成一个循环计数器,对前10个十进制数(32位)求和。这是我想到的。代码必须在MASM编译器中运行。不应向控制台输出任何内容,而应将结果保存到注册表内存中。 有没有想过如何做到这一点? 这是我到目前为止所拥有的 .386 .model flat .code main proc mov eax, 0 ; initialize the counter FLP: mov ebx,
.386
.model flat
.code
main proc
mov eax, 0 ; initialize the counter
FLP:
mov ebx, ecx
add ebx, eax
sub ebx, edx
mov ecx, ebx
inc eax
cmp eax, 10
jle FLP
main endp
end main
解决方案
.model flat
;.data
.code
main PROC
xor ecx, ecx
xor eax, eax
loop10:
add eax, ecx
inc ecx
cmp ecx, 10
jbe loop10
main ENDP
END main
“注册表内存”是什么意思?您是否在谈论CPU的通用寄存器,如
eax
、ebx
等?如果是这样,那么您已经在使用这些寄存器了,因此不清楚问题出在哪里。没有理由在32位代码中乱用16位寄存器来完成此任务<代码>添加esi,bx甚至不会进行汇编,因为操作数大小不同。无论如何,根据标准调用约定,您可能希望将返回值保留在EAX中。mov ax,ax
?真的吗<代码>添加esi、bx?认真地我很好奇,你是怎么想到的?@MikeNakis,我做了一些改变。好了,彼得·科尔德斯,你说得对。请参阅更新的代码作为旁注,通常最好使用xor
将寄存器归零,而不是mov
。看见