다음 코드에서는 두 개의 상위 바이트에 ebx의 하위 2 바이트를 "저장"한 다음 더 낮은 순서 bx를 임시 변수로 사용하여 오프셋에 액세스합니다 "풀". 마지막으로 데이터를 오른쪽으로 이동하여 원래의 값 (처음에는 하위 2 바이트 만 사용)을 복원합니다. `에 대해 R_386_16 .DATA '16 비트 레지스터를 오프셋으로 사용하여 유효 주소 계산
연결 :
는rol ebx, 16
mov bl, dl
;(other operations involving bx)
mov [pool+bx], dword esi
shr ebx, 16
이 그러나 나는
재배치 맞게 잘립니다 오류, NASM과 잘 조립. 이 오류를 우회하는 방법에 대한 조언이 있으십니까? 문자 그대로 모든 레지스터가 esp를 저장하고 세그먼트 레지스터가 사용되고 있기 때문에 단순히 다른 레지스터를 사용하는 것은 옵션이 아닙니다.
편집 : BX는 다음 테이블 MOV [수영장 + EBX, ESI에 대한 인덱스로 사용, 나는 누군가가 묻습니다 가정, 그래서 32 비트 어셈블리를
슬프게도 데이터를 ebx의 상위 2 바이트로 유지해야하므로 잘라내 기가 실제로 작동하지 않습니다. 사용하지 않는 세그먼트 레지스터에 풀로 오프셋을 오프로드 할 수 있다면 어떤 아이디어가 있습니까? – Precursor