这个演示是一个数组的inverse过程: 将 [ 01H,02H,03H,04H, 05H,06H,07H,08H ]这个数组翻转之后存放到另外一个数组中
算法1(尽可能少地消耗额外内存和额外的寄存器)
assume cs: invcopy
invcopy segment
dw 01H,02H,03H,04H, 05H,06H,07H,08H
dw 0H,0H,0H,0H, 0H,0H,0H,0H
; program code main body
mainproc: mov bx, 0H
mov cx,8H
loop0: mov ax, cs:[bx]
mov dx, bx
mov bx, 30H
sub bx, dx
mov cs:[bx], ax
mov bx, dx
add bx, 2H
loop loop0
mov ax, 4c00H
int 21H
invcopy ends
end mainproc
算法2(消耗相应的内存)
assume cs: invcopy
invcopy segment
dw 01H,02H,03H,04H, 05H,06H,07H,08H
dw 0H,0H,0H,0H, 0H,0H,0H,0H
; program code main body
mainproc: mov ax,cs
mov ss,ax
mov sp,60H
mov bx,0H
mov cx,8H
lp0: push cs:[bx]
add bx, 2H
loop lp0
mov bx, 10H
mov cx, 8H
lp1: pop cs:[bx]
add bx, 2H
loop lp1
mov ax, 4c00H
int 21H
invcopy ends
end mainproc
如果计算(数据)小,这些方案都不是事。如果数据量大(或者需要长时间处理以及有功耗限制等因素),这时候内存如何使用,cpu算力如何调配就需要着重考量了。
一个程序的稳定性、流畅性、兼容性、扩展性(灵活性),这几方面是需要综合考量的。
由于每一台物理机上的cpu和内存以及功耗(电量)都是有限制的,所以数据量、运算量越大越需要几种方案配合使用。这个过程可能变得相对复杂(晦涩),戏称之为: 巧妙。