作者charleshu (Analog Engineer)
看板Programming
标题Re: [讨论] 组合语言loop回圈指令的疑问
时间Sun Mar 28 21:52:56 2010
※ 引述《LPH66 ((short)(-15074))》之铭言:
: ※ 引述《jimmy5566 (56好棒)》之铭言:
: : .code
: : main PROC
: : mov ax,0
: : mov ecx,5
: : L1:add ax,cx
: : loop L1
: : 执行结果为 5+4+3+2+1=15
: : 现在如果希望执行出来的结果为
: : (5+4+3+2+1)+(5+4+3+2+1)+(5+4+3+2+1)+(5+4+3+2+1)+(5+4+3+2+1)=75
: : 这样原来的程式要加入什麽指令才能达成?
: 我是喜欢用把 ecx 推进 stack 的小技巧:
: 多层也可以类推 就多推几个就是了 XD
在意执行速度的话,可以在外层使用其他暂存器, 如 BX
MOV AX,0
MOV EBX,5
P2: MOV ECX,5
P1: ADD AX,CX
LOOP P1
DEC EBX
JNZ P2
因为原程式PUSH/POP完马上要用到那个暂存器,乱序执行功能派不上场,速度会
被拖慢,这样改会快一点. 你可以试试看.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.67.195.213
1F:推 jimmy5566:JNZ是什麽指令? 122.122.129.10 03/29 19:37
2F:→ charleshu:jump when not Z, 查一下x86指令集就知 203.67.195.213 03/30 16:11
3F:→ wowtiger:LOOP 很慢 decjnz>testjz>cmpjne>loop 115.43.38.106 04/01 01:16