Performance 有没有办法让这个片段更有效?
我刚开始玩MASM风格的汇编,玩了足够长的时间后,我就设法做了一个循环。这只是修补,所以我想知道是否有人可以给我任何的见解和解释,如果这个代码是低效的,或者如何可以改进Performance 有没有办法让这个片段更有效?,performance,assembly,masm,Performance,Assembly,Masm,我刚开始玩MASM风格的汇编,玩了足够长的时间后,我就设法做了一个循环。这只是修补,所以我想知道是否有人可以给我任何的见解和解释,如果这个代码是低效的,或者如何可以改进 .386 .model flat, stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\masm32.inc include \masm32\include\user32.inc includelib \m
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\user32.lib
.data
MsgBxTitle db "Loop Step", NULL
.data?
Buff dd ?
MsgBxBody dd ?
.code
start:
XOR eax,eax
MOV Buff, eax
lp:
invoke dw2hex, Buff, addr MsgBxBody
invoke MessageBox, NULL, addr MsgBxBody, addr MsgBxTitle, MB_OKCANCEL
.IF eax==IDCANCEL
RET
.ENDIF
INC Buff
CMP Buff,10
JL lp
RET
end lp
invoke ExitProcess, NULL
end start
使用MessageBox显示结果时,我认为效率或性能与此无关。我对你的控制流程有疑问。“RET”打算回到哪里?什么时候调用ExitProcess(如果有的话)?我不知道“end lp”是做什么的,所以也许我错过了什么 最好的,
Frank通过这种方式,您可以从代码中删除16个字节。将寄存器归零,并将其推到零。为dword缓冲区使用寄存器。使用寄存器组装成更小的操作码,比内存(标签)更快 我个人不喜欢/使用高层次的东西
start:
xor edi, edi
xor esi, esi
mov ebx, 10
lp:
push offset MsgBxBody
push edi
call dw2hex
push MB_OKCANCEL
push offset MsgBxTitle
push offset MsgBxBody
push esi
call MessageBox
test eax, IDCANCEL
jnz Done
inc edi
dec ebx
jns lp
Done:
push esi
call ExitProcess
end start
定义效率::-)我看到的机器指令不到10条,所以没有太多需要删减的地方,是不是?我说的高效是指我应该格式化代码,还是应该使用任何更好的方法来实现相同的结果,例如,更小的代码->相同的结果