새로운 기능은 C 코드에 asm을 사용하므로 내 질문이 너무 바보 인 경우 미안합니다. 문제는 코드 규칙 file.But을 기반으로 텍스트 파일을 코드하는 C에서 프로그램을 작성했습니다. asm.So에서 일부 메소드를 만들려고 시도했는데, asm 파일을 만들기 위해 컴파일러 (비주얼 컴파일러)를 만들었습니다. 것은 한 가지 방법을위한 asm 코드를 보았을 때 이와 같은 것들이있다. 그리고 내 메서드 위에 붙여 넣으려고하면 __asm {} 내부에서 동일한 asm 출력이지만 오류가 발생합니다. 어떻게이 asm 코드를 함수 안에 넣을 수 있습니까? 감사 ...변환 된 C 파일에서 C 언어로 어셈블러 사용
_movement$ = -20 ; size = 4
_leftBits$ = -16 ; size = 4
_hexa$ = -12 ; size = 4
_actualByte$ = -8 ; size = 4
_character$ = -2 ; size = 1
_temp$ = -1 ; size = 1
_data$ = 8 ; size = 4
_code$ = 12 ; size = 1
_longg$ = 16 ; size = 4
_positionBit$ = 20 ; size = 4
add PROC
push ebp
mov ebp, esp
sub esp, 20 ; 00000014H
mov eax, DWORD PTR _positionBit$[ebp]
cdq
and edx, 7
add eax, edx
sar eax, 3
mov DWORD PTR _actualByte$[ebp], eax
mov eax, DWORD PTR _positionBit$[ebp]
and eax, -2147483641 ; 80000007H
jns SHORT [email protected]
dec eax
or eax, -8 ; fffffff8H
inc eax
[email protected]:
mov DWORD PTR _leftBits$[ebp], eax
mov ecx, DWORD PTR _data$[ebp]
add ecx, DWORD PTR _actualByte$[ebp]
mov dl, BYTE PTR [ecx]
mov BYTE PTR _character$[ebp], dl
mov DWORD PTR _hexa$[ebp], 255 ; 000000ffH
mov eax, 8
sub eax, DWORD PTR _longg$[ebp]
mov DWORD PTR _movement$[ebp], eax
mov edx, DWORD PTR _hexa$[ebp]
mov ecx, DWORD PTR _movement$[ebp]
sar edx, cl
mov DWORD PTR _hexa$[ebp], edx
movzx eax, BYTE PTR _code$[ebp]
and eax, DWORD PTR _hexa$[ebp]
mov BYTE PTR _code$[ebp], al
mov cl, BYTE PTR _code$[ebp]
mov BYTE PTR _temp$[ebp], cl
mov edx, 8
sub edx, DWORD PTR _longg$[ebp]
add edx, 1
cmp DWORD PTR _leftBits$[ebp], edx
jge SHORT [email protected]
mov ecx, 8
sub ecx, DWORD PTR _leftBits$[ebp]
mov eax, 255 ; 000000ffH
shl eax, cl
mov ecx, DWORD PTR _data$[ebp]
add ecx, DWORD PTR _actualByte$[ebp]
movzx edx, BYTE PTR [ecx]
and edx, eax
mov eax, DWORD PTR _data$[ebp]
add eax, DWORD PTR _actualByte$[ebp]
mov BYTE PTR [eax], dl
movzx edx, BYTE PTR _temp$[ebp]
mov ecx, 8
sub ecx, DWORD PTR _longg$[ebp]
sub ecx, DWORD PTR _leftBits$[ebp]
shl edx, cl
mov eax, DWORD PTR _data$[ebp]
add eax, DWORD PTR _actualByte$[ebp]
movzx ecx, BYTE PTR [eax]
or ecx, edx
mov edx, DWORD PTR _data$[ebp]
add edx, DWORD PTR _actualByte$[ebp]
mov BYTE PTR [edx], cl
[email protected]:
mov esp, ebp
pop ebp
ret 0
add ENDP
컴파일 할 때 오류 로그입니다.
simple.c(185): error C2059: syntax error: '__asm'
simple.c(201): error C2059: syntax error: 'bad suffix on number'
simple.c(209): error C2059: syntax error: 'bad suffix on number'
simple.c(210): error C2018: unknown character '0x40'
simple.c(214): error C2018: unknown character '0x40'
simple.c(220): error C2059: syntax error: 'bad suffix on number'
simple.c(237): error C2018: unknown character '0x40'
simple.c(240): error C2059: syntax error: 'bad suffix on number'
simple.c(261): error C2018: unknown character '0x40'
"오류가 발생했습니다"는 오류가 무엇인지 모르기 때문에 완전히 쓸모가 없습니다. 오류 메시지가 나타나면 정확히 어떤 오류가 발생했는지 알려주고 해당 소스 코드를 표시하십시오. 그렇지 않으면, 당신을 도울 수 없습니다. – fuz
fuz가 말한 것에 덧붙여, 여기서 성취하려는 것을 묻습니다. 코드 실행 속도를 높이려면 목표가 예상보다 훨씬 어려울 수 있습니다. 현대의 C 컴파일러는 수십 년에 걸친 코드 작성을 통해 얻은 엄청난 수의 트릭과 최적화를 사용할 수 있습니다. 어셈블러 목표를 가르치는 것이 목표라면, 가장 어려운 방법을 선택했습니다. 이런 식으로 코드를 작성하는 것이 숙제 프로젝트의 일부라면 선생님은 바보입니다. –
오류를 올바르게 처리하지 못해 죄송합니다. C에 대한 숙제 proyect를 알려 주셨지만, ASM에서 일부 기능을 수행 할 때 어떤 일이 일어나는지 보려고하는 중, 소프트웨어를 더 빠르게 만드는 것은 내 목표가 아닙니다. 컴파일러는 종종이 최적화를 아주 잘 만듭니다. 컴파일 중에 컴파일러가 깨지기 때문에 C 언어의 함수 내에서 출력 asm 코드를 넣을 수 없습니다. – BREAKWAVE