현재 어셈블리 언어를 배우고 있으며 현재 작업중인 프로젝트에서 c 파일을 asm 파일로 변환해야합니다. 나는 C 파일에서 for 루프를 구현하려고하는데 특정 변수에 카운터 변수를 저장할 수 있는지 궁금하다. 예를 들어, 카운터가 0에서 시작하면 다음과 같이 할 수 있습니까?특정 주소를 사용하여 x86에 변수를 저장할 수 있습니까?
mov dword [ebp-0x4], 0
for_loop:
cmp dword [ebp-0x4], ecx
jge break
...
...
inc dword [ebp-0x4]
jmp for_loop
음, 그렇습니다. 변수를 메모리에 저장할 수 있습니다. 아마도 다른 용도로 사용되지 않는 주소를 사용하고 싶을 것입니다. '예약'과 '커밋'메모리 (또는 유닉스와 동등한 것)에 대한 질문도 있습니다. 하지만 여기서 중요한 질문은 레지스터를 사용하는 대신 메모리에 저장하려는 이유입니다. 보통 카운터는이 작업에 적합한 후보입니다. –
어림짐작으로, 코드를 조합하면 아이디어가 완전히 잘못되었는지 알 수 있습니다. "어셈블 테스트"가 통과하면 디버거로 코드를 단계별로 실행 (보통)하여 질문을 해결합니다. 이 특정 질문에 대해서는 두 테스트 모두 쉽게 통과합니다. 최종 답변을 얻으려면 ISA 설명서 –
을 확인하십시오. 쉽고 빠릅니다. 루프 몸체가 크거나 느리지 만 않으면 5 초의 대기 시간으로 인해 병목 현상이 발생하지 않는 한, 메모리의 루프 변수는 코드를 느리게 만듭니다. (예 : 이미 커다란/느린 루프에서 처음에는 반복 당 6 사이클보다 빠르게 실행되지 않습니다.) –