例1:有数组x(x1,x2,…,x10)和y(y1,y2,…,y10) 编程计算z(z1,z2,…210 z1=X1+ z2=X2 3=X3 3 z4=x4-y4逻辑尺:0011011100 5=x5-y5 1减法 z6=X6+y6 0加法 7=x7 8=X8 6789 9=x9+y z10=×10+y10
16 例1:有数组 x(x1,x2,……,x10) 和 y(y1,y2,……,y10) 编程计算 z(z1,z2,……,z10) z1 = x1 + y1 z2 = x2 + y2 z3 = x3 - y3 z4 = x4 - y4 z5 = x5 - y5 z6 = x6 + y6 z7 = x7 - y7 z8 = x8 - y8 z9 = x9 + y9 z10= x10 + y10 逻辑尺:0 0 1 1 0 1 1 1 0 0 1 减法 0 加法
xdwx1,x2,x3,×4,x5,X6,X7,X8,x9,x10 y dw y1, y2, y3, y4, y5, y6, y7, y8, y9, y10 zdWz1,z2,z3,z4,z5,z6,z7,z8,z9,z10 logic_rule dw 00dch 0000,0000,1101,1100 mov bx. 0 moV CX 10 mov dx, logic_rule next: mov ax, x [bx] shr dx 1 C subtract add ax, y[bx] jmp short result ;向前引用 subtract sub ax, y[bx] result: mov z[bx], ax add bx, 2 loop next
17 x dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 y dw y1,y2,y3,y4,y5,y6,y7,y8,y9,y10 z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10 logic_rule dw 00dch ;0000,0000,1101,1100 …… mov bx, 0 mov cx, 10 mov dx, logic_rule next: mov ax, x[bx] shr dx, 1 jc subtract add ax, y[bx] jmp short result ; 向前引用 subtract: sub ax, y[bx] result: mov z[bx], ax add bx, 2 loop next ……
例2:折半查找算法 data segment array dw12,11,22,33,44,55,66, DW77,88,99,111.222,333 number dw 55 low idx dw high_idx dw data ends
18 data segment array dw 12,11,22,33,44,55,66, DW 77,88,99,111,222,333 number dw 55 low_idx dw ? high_idx dw ? data ends 例2:折半查找算法
折半算法 0:12 low_idx high_idx 1 2:22 ax)=55 3:(33 (si)=Oah cf=0 5:55母 666① lowidx high idx 77:③ 8:88 999e(ax)=90 12 10:111 8 (ST)=10h 1:222 9 888 Cf=l 12:333
19 12 11 22 33 44 55 66 77 88 99 111 222 333 0 1 2 3 4 5 6 7 8 9 10 11 12 (ax)=55 low_idx 1 1 4 5 high_idx 12 5 5 5 (si)=0ah Cf=0 (ax)=90 low_idx 1 7 7 8 9 high_idx 12 12 8 8 8 (si)=10h Cf=1 折半算法
lea di, array mov ax, number;要查找数 cmp ax,[di+2];(ax)与第一个元素比较 ja chk_last lea si, [di+2] e exlt (ax)=第一个元素,找到退出 stc ]mp exIt (ax)<第一个元素,未找到退出 chk last mov si, [dil 元素个数 h si 1 ;计算最后一个元素 add si, di 的地址 cmp ax, [si] (ax)与最后一个元素比较 b search exit (ax)=最后一个元素,找到退出 stc ]mp exlt (ax)>最后一个元素,未找到退出
20 …… lea di, array mov ax, number ;要查找数 cmp ax, [di+2] ; (ax)与第一个元素比较 ja chk_last lea si, [di+2] je exit ; (ax)=第一个元素,找到退出 stc jmp exit ; (ax)<第一个元素,未找到退出 chk_last: mov si, [di] ;元素个数 shl si, 1 ; 计算最后一个元素 add si, di ; 的地址 cmp ax, [si] ; (ax)与最后一个元素比较 jb search je exit ; (ax)=最后一个元素,找到退出 stc jmp exit ; (ax)>最后一个元素,未找到退出