3
인텔 설명서를 읽는 것이 이해되면 "add $ 0x7f, % ebx"와 같은 명령어를 작성할 수 있어야하며 총 3 바이트로 83/0 ib로 인코딩되어야합니다. 그러나 "add", "addb"또는 "addl"을 사용하더라도이 작업을 수행하면 즉시 값을 32 비트 값으로 "승격"하고 81/0 id로 인코딩하고 6 바이트를 차지합니다. adc, sub 등과 같은 문제가 있습니다. & GNU와 T 문법을 사용하고 있습니다.x86에서 AT & T 구문을 사용하여 긴 레지스터에 즉시 바이트를 추가하는 방법은 무엇입니까?
나는 하루 동안 해결책을 찾고 있었지만 그것을 찾지 못했습니다. 아무도 조언을 해줄 수 있습니까?
매우 이상합니다. eax, ebc, ecx 및 edx에 즉치 값의 256 가지 변형을 모두 방출했으며 각 니모닉 접미어 (b, w 및 l)를 사용했으며 단일 83 인코딩을 얻지 못했습니다. 그들은 모두 81로 나옵니다. 나는 최신의 안정된 우분투를 모으고 있습니다. 앞서 언급 한 다른 지침에도 비슷한 문제가 있습니다. :/ – user1084743
음수 값에 관한 귀하의 의견을 토대로 재시험했습니다. 자신을 0-127 범위의 값으로 제한하면 예상되는 결과를 얻습니다. 고맙습니다. – user1084743
@ user1084743 : 아, 그게 문제입니다. CPU 설명서에 따르면 즉각적인 바이트는 부호로 처리되며 ALU 연산에 사용되기 전에 부호가 확장됩니다. 따라서 비록 +128 또는 +255가 1 바이트 만 필요로하는 것으로 보일지 모르지만, 이는 부호없는 바이트에만 해당됩니다. –