2017-01-24 3 views
-4
나는 두 개의 레지스터 add, adc, sub, sbb, incdec없이 함께 추가 할 수있는 방법

를 사용하지 않고 추가?조립 [ASM] : 산술 연산자

+3

아키텍처에 대해 언급하는 것을 잊었습니다. x86의 경우 'LEA'를 사용할 수 있습니다. – Jester

+0

@Jester x86의 경우 –

+0

@Jester 어때?'movd mm0, eax; movd mm0, ecx; paddd mm0, mm1; movd eax, mm0'? – fuz

답변

0

솔직히, 난 그냥 this answer했다 및 조립에 번역 레지스터 cxdx 중간 결과를 얻기 위해 사용하는 동안, 합계의 숫자, axbx에, 최종 결과는 dx에 있습니다

mov ax, 12801 ;◄■■ FIRST NUMBER. 
    mov bx, 2017 ;◄■■ SECOND NUMBER. 

l1: 

    mov cx, ax 
    and cx, bx 

    mov dx, ax 
    xor dx, bx 

    mov ax, cx 
    shl ax, 1 

    mov bx, dx 

    cmp ax, 0 ;◄■■ IF AX != 0 REPEAT. 
    jne l1 

;RESULT IN DX = 14818 
+1

멋지게 복잡합니다. 어때?'mov si, ax; lea dx, [bx + si]'(아무도 말하지 않은 16 비트를 고수한다면). – Jester

+3

나는 여기에 제시된 코드를 최적화하고자하는 불타는 열망을 갖고있다. 그러나 실제로는 최적의 코드를 원한다면'add'를 사용하기 때문에 완전히 어리석은 점만 제외하면! –