글쎄, 엉망진창 같아.
조립시 주요 기능이 없습니다. 실행이 시작되는 "main"이라고하는 엔트리 포인트를 호출 할 수도 있지만, 실제로 그 것입니다. 그것은 단지 기계 코드에 존재하지 않는 상상의 레이블 일뿐입니다. 함수는 call
이 될 것입니다. 왜냐하면 프로세서의 call
명령어가 jmp
일 때 몇 가지 설정을 수행하기 때문입니다.하지만 그게 전부입니다.
개인적으로, 나는 이것을 상당히 재구성 할 것입니다.
main:
xor ebx,ebx
add ebx,3 ; saves a byte
push ebx
forloop:
; I assume here you do a dec, or cmp, for the following:
je exit
; put the code for "rec" in here.
; No point wasting the bytes and time to jump.
jmp forloop
exit:
pop ebx
xor eax,eax
ret
좋아요, 그래도 여전히 엉망입니다. 그러나 당신이 달성하고자하는 것에 대해 내 지식에는 공백이 있습니다.
처음에는 je exit
이 그 전에가는 "논리"에 연결됩니다. 나는 개인적으로 이것을 해소하려고 노력할 것입니다. 즉, "논리"로 가정하면, 나는 이것을 jne forloop
으로 바꾸고 루프의 끝 부분에 놓을 것이다. 그래서 jmp를 처음부터 피할 수있다. 또한 몇 바이트를 다시 저장합니다.
xor eax,eax
은 레지스터를 0으로 설정하는 짧고 빠른 방법입니다. 실제로 에rec
이 별도의 기능을 필요로하는 경우 적어도이 블록 외부에 놓으므로 jmp for_loop
을 사용하여 건너 뛸 필요가 없습니다. ret
이후에 안전하게 넣을 수 있습니다.
'jne forloop'에'jne exit'을 편집했는데, 그렇지 않으면 작동하지 않을 것이기 때문입니다. –
'xor' +'add''가 "바이트를 저장"하는 것을 어떻게 생각합니까? 그것은 2 + 3 바이트이며, 반면에 'mov ebx, 3'은 * 역시 * 5 바이트입니다. 같은. 단일 명령을 선호하십시오. –
errr, 물론 맞습니다. 나는'xor'가 더 짧아 져서'add '가 그것을 평준화한다는 것을 무시했다. –