2014-06-08 3 views
0

는 86 어셈블리에 다음과 같은 잘못된 지시를 고려어떻게 서로 다른 크기의 레지스터 두 개를 추가하여 x86 어셈블리에서 유효한 주소를 구성 할 수 있습니까?

imul edx, [eax+cl], 2 

NASM가 유효 주소가 잘못되었다고 불평. 서로 다른 크기의 등록 정보를 두 개 추가 할 수 없다는 것을 알고 있습니다. 어떻게해야 제대로 할 수 있을까요? 어쩌면 오프셋을 어떻게 든 추가해야 할 것입니다. 어떻게해야 그것을 nasm에서 할 수 있습니까? 참고 : 상위 비트에는 데이터가 포함되어 있기 때문에 전체 ecx를 추가 할 수 없습니다.

+0

ecx를 다른 레지스터에 저장 한 다음 255로 '및'이를 저장하는 방법은 무엇입니까? – emil

+2

movzx ecx, cl (서명되지 않음) 또는 movsx ecx, cl (서명 됨)은 어떨까요? – rcgldr

+0

mov ebx, ecx xor ecx, ecx mov cl, bl imul edx, [eax + ecx] [링크] http://courses.engr.illinois.edu/ece390/archive/spr2002/books/labmanual/inst-ref- idiv.html –

답변

0

방법 중 하나는 그런 ECX 8 비트의 하부에 저장하는 것이다

movzx edx, cl 
imul edx, [eax+edx], 2 

다른 방법으로 'CL'를 대체 자기 수정 코드의 블록을 실행하는 것 (작동한다 추측)에 ' 즉각적인 '오프셋 필요한 경우 응용 프로그램에 의해 업데이 트되었습니다. 실행중인 코드를 수정하면 최신 CPU에 지연이 추가되므로 거의 실용적이지 않습니다.