Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 汇编[ASM]:不使用算术运算符进行添加_Assembly_X86_Add - Fatal编程技术网

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位,没有人会这么说)。我有一个强烈的愿望来优化您在这里展示的代码,除非那是完全荒谬的,因为如果您真的想要优化代码,您会使用
添加