21,497
社区成员




;再做一次改动,将dx*2放在前面
mov al,xxx
xor ah,ah
mov bl,yyy
xor dx,dx
mov cx,8
mult1:
add dx, dx
shl bl,1
jnc next
add dx,ax
next:
loop mult1
;
exit:
mov zzz,dx
mov al,xxx ;设al的内容为16进制的23h
xor ah,ah ;ah = 0; ax = 0023h
mov bl,yyy ;设bl = 7
xor dx,dx ;dx = 0;
//mov cx,8 ;cx = 8 去掉此值,并展开循环
;mult1:
shl bl, 1 ;c = bl = 7的最高位,即0
jnc next ;
add dx,ax ;不执行
next:
add dx, dx ;dx = dx * 2 = 0
shl bl, 1 ;c = bl = 7的第6位,即0
jnc next ;
add dx,ax ;不执行
next:
add dx, dx ;dx = dx * 2 = 0
shl bl, 1 ;c = bl = 7的第5位,即0
jnc next ;
add dx,ax ;不执行
next:
add dx, dx ;dx = dx * 2 = 0
shl bl, 1 ;c = bl = 7的第4位,即0
jnc next ;
add dx,ax ;不执行
next:
add dx, dx ;dx = dx * 2 = 0
shl bl, 1 ;c = bl = 7的第3位,即0
jnc next ;
add dx,ax ;不执行
next:
add dx, dx ;dx = dx * 2 = 0
shl bl, 1 ;c = bl = 7的第2位,即1
jnc next ;
add dx,ax ;dx = dx + ax = 0023h
next:
add dx, dx ;dx = dx * 2 = 0046h
shl bl, 1 ;c = bl = 7的第1位,即1
jnc next ;
add dx,ax ;dx = dx + ax = 0069h
next:
add dx, dx ;dx = dx * 2 = 00d2h
shl bl, 1 ;c = bl = 7的第2位,即0
jnc next ;
add dx,ax ;dx = dx + ax = 00f5h
next:
add dx, dx ;最后一个循环中此指令是逻辑错误,应该去掉或进行判断
; loop mult1
;
mov zzz,dx
;所以可以将程序做如下改动
mov al,xxx
xor ah,ah
mov bl,yyy
xor dx,dx
mov cx,8
mult1:
shl bl,1
jnc next
add dx,ax
next:
cmp cx, 0 ;;;;;;;;;;;;
jz exit ;;;;;;;;;;;;
add dx, dx
loop mult1
;
exit:
mov zzz,dx
mov al,xxx
xor ah,ah
mov bl,yyy
xor dx,dx
mov cx,8
mult1:
shl bl,1
jnc next
add dx,ax
next:
add dx, dx
loop mult1
;
mov zzz,dx