는 인라인 어셈블리
#include <stdio.h>
__declspec(naked) int main(void) {
static const char *fmt = "%d";
__asm {
xor edx, edx
mov ecx, 30
loop_start:
add edx, ecx
loopz loop_start
push edx
push fmt
call printf
add esp, 8
xor eax, eax
ret
}
}
는 인라인 어셈블리
#include <stdio.h>
__declspec(naked) int main(void) {
static const char *fmt = "%d";
__asm {
xor edx, edx
mov ecx, 30
loop_start:
add edx, ecx
loopz loop_start
push edx
push fmt
call printf
add esp, 8
xor eax, eax
ret
}
}
루프 명령어 오타났네. loopz -> loop로 수정. 돌려보진 않아서 동작 여부는 보장 못함
loop가 돌아가는조건이 뭐에여?
밑에 LOOP 명령어는 카운터 레지스터(ECX)를 1 감소시키고 0이 안되면 다시 지정된 레이블로 점프. 0이 되면 패스시키는 구문임.
이거근데 printf밑에 add esp,8에서 오류나여
call printf 라인에서 문제가 생긴 거 같은데 그냥 던져야 겠네요. 컴 키고 VC++ 키기 귀찮
dword ptr[printf]로 바꿔야할듯?
음 그렇다면 call printf 대신에 call [printf]로 바꿔보세요. 그러면 아마 될 듯.
어셈블리 존나 어려워보인다
또 과제충인줄