移位相加的方法实现乘法不明白啊

yunhaiC QQ654777694 2008-04-16 11:43:22
mov al,xxx
xor ah,ah
mov bl,yyy
xor dx,dx
mov cx,8
mult1:sur bl,1
jnc next
add dx,ax
next:add ax,ax
loop mult1
;
mov zzz,dx

实在不明白程序思路,也不明白具体怎么实现怎么做的
...全文
771 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jennyvenus 的回复:]
此程序写的不太对劲啊。也难怪看不懂,俺先不解释,先按自己的想法写一个。


Assembly code 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

[/Quote]

请问你这个程序什么意思?能举一个实例按照你程序的思路来分析吗?谢谢
用户 昵称 2008-04-25
  • 打赏
  • 举报
回复
;再做一次改动,将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
用户 昵称 2008-04-25
  • 打赏
  • 举报
回复
    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
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 programfanny 的回复:]
mov al,xxx ; xxx是被乘数,装入AX中,(xxx <256)
xor ah,ah
mov bl,yyy ; yyy是乘数,装入bl中,(yyy <256)
xor dx,dx ; bl是循环的计数器,DX放累加的和
mov cx,8 ; 循环bl次,每循环一次,将AX加一次到DX
mult1:sub bl,1 ; <---楼主这里指令sur bl,1疑有误,似就为sub bl,1
jnc next
add dx,ax
next:add ax,ax
loop mult1 ;
mov zzz,dx …
[/Quote]

狂晕啊,你这不等于没说到点子上吗
我就是对mult1以及后面不理解,至于sub bl,1 是shr bl,1
用户 昵称 2008-04-17
  • 打赏
  • 举报
回复
此程序写的不太对劲啊。也难怪看不懂,俺先不解释,先按自己的想法写一个。

	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
BAYNPU 2008-04-17
  • 打赏
  • 举报
回复
应该是SHL才对SHL BL,1, BL左移8位=256
而且还有条件判断,共做8次循环.
programfanny 2008-04-16
  • 打赏
  • 举报
回复
原理:左移一位相当于乘以2
例: 25 x 15 = 25*(8+4+2+1)
= 25 shl 3 + 25 shl 2 +25 shl 1 + 25
programfanny 2008-04-16
  • 打赏
  • 举报
回复
mov al,xxx ; xxx是被乘数,装入AX中,(xxx<256)
xor ah,ah
mov bl,yyy ; yyy是乘数,装入bl中,(yyy<256)
xor dx,dx ; bl是循环的计数器,DX放累加的和
mov cx,8 ; 循环bl次,每循环一次,将AX加一次到DX
mult1:sub bl,1 ; <---楼主这里指令sur bl,1疑有误,似就为sub bl,1
jnc next
add dx,ax
next:add ax,ax
loop mult1 ;
mov zzz,dx
;--------------------------------------------------------------------------
移位方式计算乘法的程序段:
mov al,xxx
xor ah,ah
mov bl,yyy
xor dx,dx
mov cx,8
mult1:shr bl,1
shl ax,1
jnc next
add dx,ax
next:add ax,ax
loop mult1 ;
mov zzz,dx

BAYNPU 2008-04-16
  • 打赏
  • 举报
回复
它判断的条件:jnc;cf不为零转移到NEXT :ADD aX,AX,否则做下一条指令,而且还设置8次循环加.

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧