Assembly 汇编[ASM]:不使用算术运算符进行添加
如果没有Assembly 汇编[ASM]:不使用算术运算符进行添加,assembly,x86,add,Assembly,X86,Add,如果没有add,adc,sub,sbb,inc,和dec,我怎么能把两个寄存器加在一起呢?老实说,我刚刚把它翻译成汇编,求和的数字在ax和bx,虽然寄存器cx和dx用于获得中间结果,但最终结果在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
add
,adc
,sub
,sbb
,inc
,和dec
,我怎么能把两个寄存器加在一起呢?老实说,我刚刚把它翻译成汇编,求和的数字在ax
和bx
,虽然寄存器cx
和dx
用于获得中间结果,但最终结果在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
你忘了提到什么建筑。对于x86,您可以使用
LEA
@Jesterx86@Jester怎么样movdmm0,eax;movdmm0,ecx;填充mm0,mm1;movd eax,mm0
?x86仅使用MOV指令(某种程度上)图灵完成,使用内存寻址模式进行数学运算:。(当然,LEA可以使用地址模式语法和机器编码直接进行加法,但不能进行减法。虽然您没有提到neg
,但是neg
+LEA
可以进行减法。)非常复杂。怎么样movsi,ax;lea dx,[bx+si]
(如果我们坚持16位,没有人会这么说)。我有一个强烈的愿望来优化您在这里展示的代码,除非那是完全荒谬的,因为如果您真的想要优化代码,您会使用添加
!