나는 일부 에뮬레이터 코드를 읽고 있으며 정말 이상한 것을 반박했습니다.
switch (reg){
case 'eax':
/* and so on*/
}
이것이 어떻게 가능한지? 나는 당신이 switch
정수형 에서만 할 수 있다고 생각했습니다 . 매크로 속임수가 진행되고 있습니까?
int
되므로 합법적입니다. 그러나 다중 문자 상수의 값은 구현에 따라 정의되므로 코드가 다른 컴파일러에서 예상대로 작동하지 않을 수 있습니다. 예를 들어, eax
수도 0x65
, 0x656178
, 0x65617800
, 0x786165
, 0x6165
, 다른 또는 뭔가.
'eax' != 'ebx'
그것은 단지 하나 또는 두 개의 귀하의 예제에 실패 물론, 그래서. 실제로 가정하는 코드가 어딘가에있을 수 *(int*)("eax") == 'eax'
있으므로 대부분의 예제가 실패합니다.
'eax'
같음 'ebx'
또는 과 비교 될 수 'ax'
있으며 switch 문이 의도 한대로 작동하지 않습니다.
'eax'
상수 정수 값을 열거합니다