小型汇编代码序列优化(intel x86)

时间:2012-04-06 03:30:56

标签: optimization assembly x86 intel

我正在使用汇编语言进行一些练习,我发现了一个关于优化的问题,我无法弄清楚。任何人都可以帮助我吗

所以问题是优化以下汇编代码:

----------------------------例1 ------------------ -------

mov dx, 0 ---> this one I know-> xor dx,dx

----------------------------例2 ------------------ ------

cmp ax, 0
je label

----------------------------示例3 ------------------ -------

mov ax, x
cwd
mov si, 16  
idiv si     

---->在这个例子中,我能想到的最多是由idiv 16得到最后2行,但我不确定

----------------------------范例4 ------------------ -------

mov ax, x
mov bx, 7
mul bx
mov t, ax

----------------------------例5 ------------------ ---------

mov si, offset array1
mov di, offset array2
; for i = 0; i < n; ++i
do:
   mov bx, [si]
   mov [di], bx
   add si, 2
   add di, 2
loop do
endforloop

2 个答案:

答案 0 :(得分:5)

例如,您应该查看andtest操作码。与示例1类似,它们允许您不再需要常量。

例如,4,请记住x * 7x * (8 - 1)相同,或者扩展x * 8 - x。乘以8可以使用移位指令。

例如,你认为英特尔会提供一种更简单的方式从SI转移到DI,因为这是它们存在的全部原因。也许像REPetitive MOVe String Word: - )

答案 1 :(得分:0)

例如三,除以2的幂可以实现右移。

请注意,在示例5中,当前代码无法根据需要初始化CX(在优化版本中,您肯定也希望这样做)。