스택의 두 값을 비교하려는 코드에서 을 붙입니다. & AT스택의 두 값을 비교합니까?
86, 구문 T
cmpl -4(%ebp), 4(%ebp)
Error: too many memory references for `cmp'
나는 승수와 EBP에 따라 두 값을 비교하는 것은 불가능하다고 생각합니다. 어떤 제안?
스택의 두 값을 비교하려는 코드에서 을 붙입니다. & AT스택의 두 값을 비교합니까?
86, 구문 T
cmpl -4(%ebp), 4(%ebp)
Error: too many memory references for `cmp'
나는 승수와 EBP에 따라 두 값을 비교하는 것은 불가능하다고 생각합니다. 어떤 제안?
CMPSD 명령어를 사용하여 메모리의 두 값을 비교할 수 있습니다.
lea -4(%ebp), %esi
lea 4(%ebp), %edi
cmpsd
: 각각 ESI에 대한 관심과 EDI의 메모리 위치의 주소를 배치 한 다음
CMPSD memory-to-memory string-compare instruction를 사용하여 그는 그렇게 할 수
cmpl -4(%ebp), 4(%ebp)
:
영업 이익에 해당 뭔가를하고 싶어
(내 비 전문가의 AT & T 구문 남용을 용서하십시오.)
실제로 다른 사람과 다를 수 있습니다. 여기에 제공된 다른 답변 (레지스터에 값로드 및 비교)이 훨씬 더 실용적입니다. 그 밖의 것이 없다면, 그 해결책은 오직 하나의 기록 장치만을 태우고,이 핵은 두 가지를 태운다.
수업 : 어셈블러에는 거의 항상 고양이를 피하는 방법이 여러 가지가 있습니다.
@PeterCordes : 편집 해 주셔서 감사합니다. –
x86에서는 'CMP'와 같은 간단한 명령어로 두 개의 메모리 피연산자를 사용할 수 없습니다. 그러므로'EAX'에 메모리 값 중 하나를 복사하고'MOV'하고 다른 하나는'EAX'와 비교하십시오. – zx485
'''에 대한 너무 많은 메모리 참조를위한 처음 몇 개의 구글 히트는 모두 답변을 가지고 있습니다. 예 : http://stackoverflow.com/questions/2531682/gas-too-many-memory-reference. 대부분은 cmp가 아닌 mov에 관한 것이지만 MOVS와 CMPS가 모두 존재합니다. Ira의 대답은 CMP가 다른 것을 추가 할 수 있기 때문에 추가하려는 것과 다른 점이라는 것을 잘 알고 있습니다. –