2016-10-01 11 views
0

"MOV"또는 "LEA"피연산자를 사용하지 않고도 AX와 BX를 AX로 합치면됩니다. 여기에 조금 붙어 있습니다. 제발 도와주세요.조립품 8086 : MOV 및 LEA로만 합계하는 레지스터

; AX need to be 15, using ONLY 'mov' and 'lea'. 
; Do NOT use arithmetic instrutions (add, inc, mul, etc.) 

    mov  ax,10 
    mov  bx,4 

    lea cx,ax 
    lea cx, [cx+bx] 

내가 뭘 잘못하고 있니? 미안하다. 나는 초보자 다.

+0

은 그냥'add' 명령을 사용

lea ax, [si + bx] lea ax, [di + bx] lea ax, [si + bp] lea ax, [di + bp] 

난 당신이 이미 작업을 수행하는 방법에있어 생각이 시점에서. 그것이 바로 그 때문입니다. 그것을 사용하지 않을 이유가 없습니다. –

+0

귀하의 질문은 자기 모순입니다. mov와 lea를 사용하지 않고 mov 또는 lea만을 사용하여 추가 하시겠습니까? –

+0

질문에 항상 정확한 오류 메시지가 포함되어야합니다. 또는 오류 메시지를 검색 엔진에 넣는 것이 좋습니다. –

답변

2

오늘은 16 비트 어드레싱 모드에서 lea에 대해 그리 명백하지 않은 점은 어떤 레지스터도 src 피연산자로 사용될 수 없다는 것입니다. 올바르게 호출 한 경우 원본 또는 대상 인덱스 (si 또는 di) 레지스터에 기본 포인터 (bp) 또는 인덱스 (bx) 만 추가 할 수 있습니다. dest 피연산자는 모든 범용 레지스터가 될 수 있습니다.

다음

이 허용됩니다

mov si, ax  ; si = ax 
lea ax, [si + bx] ; ax = ax + bx 
+0

일반적으로 기본 + 인덱스로 작성하고 인덱스 +베이스로 작성하지 않을 것입니다. . 하지만 그렇습니다. 이들은 16 비트 어드레싱 모드에서 허용되는 레지스터의 유일한 4 쌍입니다. [available x86 addressing modes] (http://stackoverflow.com/a/34058400/224132)도 참고하십시오. 여기에는 16 비트 항목에 대한 자세한 정보 링크가 있지만 대부분 32 비트/64 비트 내용입니다. –