我正在使用汇编语言进行一些练习,我发现了一个关于优化的问题,我无法弄清楚。任何人都可以帮助我吗
所以问题是优化以下汇编代码:
----------------------------例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
答案 0 :(得分:5)
例如,您应该查看and
或test
操作码。与示例1类似,它们允许您不再需要常量。
例如,4,请记住x * 7
与x * (8 - 1)
相同,或者扩展x * 8 - x
。乘以8可以使用移位指令。
例如,你认为英特尔会提供一种更简单的方式从SI转移到DI,因为这是它们存在的全部原因。也许像REPetitive MOVe String Word: - )
答案 1 :(得分:0)
例如三,除以2的幂可以实现右移。
请注意,在示例5中,当前代码无法根据需要初始化CX(在优化版本中,您肯定也希望这样做)。