[inline Assembly VC ++ 6.0 ]관련된 간단한 질문입니다.
글쓴이: gyxor / 작성시간: 수, 2003/07/30 - 2:57오후
#include <iostream> using namespace std; int int1; int int2; int sum; void main ( void ) { cout << "Enter two integers"; cin >> int1 >> int2; __asm { mov eax, int1 add eax, int2 mov sum, eax // sum = int1 + int2; } cout << "Sum is " << sum << endl; }
위와 같은 소스는 정상적으로 컴파일 됩니다. 매우 간단한 인라인 어셈블리어 인데요..
문법을 약간 수정해서 문자열에대하여
#include <iostream> using namespace std; char *CH="abc$ "; void main ( void ) { __asm { mov dx, CH mov ah, 9 int 21h // sum = int1 + int2; } }
이렇게 문자열 출력을 해주는 문법을 사용하면 에러가 나는군요..
int 21h을 인라인 어셈블리어에서 사용하지 못하기 때문인가요?
비쥬얼 스튜디오에서 다른 기본옵션으로 컴파일했습니다.
위에 수정한 구문은 분명히 책에 있는 소스입니다.
C:\Temp_data\cpp\Cpp1.cpp(25) : error C2415: improper operand type Error executing cl.exe. Cpp1.exe - 1 error(s), 0 warning(s)
===> mov ah, 9
이줄에서 에러가 나는데요..
설명부탁드립니다.
Forums:
CH는 CX 레지스터의 상위 8비트 부분인데 변수명으로 써도 될지 모르겠
CH는 CX 레지스터의 상위 8비트 부분인데 변수명으로 써도 될지 모르겠군요.
윈도우에서는 int21h 지원 안합니다.
도스 실행파일일때만 쓸 수 있습니다.
데브피아 쪽에 올리면 더 확실한 답이 나올듯
Written By the Black Knight of Destruction
[quote="방준영"]CH는 CX 레지스터의 상위 8비트 부분인데 변수
준영님 의견에 저도 동감합니다.
CH말고 다른 변수명을 사용하심이....
음..
C:\Djgpp\Study\Cpp1.cpp(11) : error C2443: operand size conflict
Error executing cl.exe.
Cpp1.exe - 1 error(s), 0 warning(s)
바뀌도 에러가 나지만 같은줄에서..에러내용은 바뀝니다.
아무래도 제 생각에는 int 21h에 서 문제가 나는거 같은데요..
그리고 www.devpia.com 에도 올려봤는데요..
"c++ 이라도 잘하자"라는 클럽에 올렸습니다. 그런데.. 답변이 잘 안올라와요..
답변도 클럽장만 거의 전담합니다.
혹시 데브피아에 올려보라고 하신것이 다른곳을 말씀하신건가요?
클럽말고 프로그램..관련 통합 질문란 같은걸 못찾아서요..[/code]
그런데, 비주얼 C++이라면 32비트 환경 아닌가요? 32비트 환경에서
그런데, 비주얼 C++이라면 32비트 환경 아닌가요? 32비트 환경에서 sizeof(포인터)=4입니다. 4바이트 크기 변수를 2바이트 크기 레지스터에 넣는 건 불가능하지요. 그리고 32비트 환경에서 인터럽트 21h를 지원하지도 않을 텐데요.
..
가르쳐주신대로 사이즈부분이 안맞아서 에러인거 같아서..
바꿔서 해봤는데요..
다행이 컴파일 에러는 안나지만..
실행이 안됩니다...
답변부탁드립니다.
그리고 혹시 a86 어셈블리어 갖고 계신분 알려주시면 감사하겠습니다.
[/code]
댓글 달기