2017-01-24 19 views
-4
私は2個のレジスタが addadcsubsbbinc、および decせずに一緒に追加することができますどのように

を使用せずに追加しますか?組立[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'を使うだろうから、完全にばかげている点を除いて、あなたがここにあるコードを最適化するという熱望を持っています! –