编程计算3的4次方
本帖最后由 张国祥 于 2011-6-20 14:24 编辑小甲鱼在监测点2.1留下了题目,用汇编计算3^4,要怎么计算?
有人告诉我用:
mov cx,27 '疑问:27H是十进制的:39,也就是说不能循环27次二十39次
s:add ax,3 '疑问:这句话怎么在debug上写出来?
loop s '这句话同上
另外有没有别的办法呢?,我的办法是:
mov ax,3
add ax,6
add ax,12
add ax,36
但这样就等于是自己在算……
在群里问过:他们的回答是用27个add指令累加……貌似也不靠谱……
本帖最后由 lsgo 于 2011-6-11 18:26 编辑
支持写 27 个ADD 指令
看你会打错多少个 ADD 指令
还有第一条直接 MOVAX,3 后面应该打 26 条ADD指令{:5_111:} lsgo 发表于 2011-6-11 18:07 static/image/common/back.gif
支持写 27 个ADD 指令
看你会打错多少个 ADD 指令
那……没有别的方法了吗? 张国祥 发表于 2011-6-11 18:22 static/image/common/back.gif
那……没有别的方法了吗?
没法 跟据题目的要求用学过的指令只能这样了后面到是有个循环的 等你学到了再来写这个就简单了
lsgo 发表于 2011-6-11 18:29 static/image/common/back.gif
没法 跟据题目的要求用学过的指令只能这样了后面到是有个循环的 等你学到了再来写这个就简单了
嗯,谢谢指教!{:3_52:}
张国祥 发表于 2011-6-11 18:35 static/image/common/back.gif
嗯,谢谢指教!
mov ax,3
add ax,ax
add ax,ax
mov bx,ax
add bx,bx
add bx,bx
mov ax,bx
add ax,ax
add ax,ax
不知道这样可以吗 再生缘 发表于 2011-6-11 18:41 static/image/common/back.gif
mov ax,3
add ax,ax
add ax,ax
你算过没有》? 本帖最后由 再生缘 于 2011-6-11 21:15 编辑
wshkzhh 发表于 2011-6-11 20:56 http://bbs.fishc.com/static/image/common/back.gif
你算过没有》?
恩 估计不行
mov ax,3
add ax,ax
add ax,ax
这里都是12了 我以为是9呢
看来这个还要继续研究呀
再生缘 发表于 2011-6-11 18:41 static/image/common/back.gif
mov ax,3
add ax,ax
add ax,ax
mov ax,3 ' ax= 3
add ax,ax ' ax=6
add ax,ax ' ax= 12
mov bx,ax ' ax=12 bx=12
add bx,bx ' ax=12 bx=24
add bx,bx ' ax=12 bx=48
mov ax,bx ' ax=48 bx=48
add ax,ax ' ax=96
add ax,ax ' ax=192
:lol:lol:lol看来只能add下去了:L 本帖最后由 天下孤鹰 于 2011-6-11 22:53 编辑
:lol 计算如下。。 应该是正确的吧。。
长了点。。 4条的不会写。。:lol
mov ax,3 ;ax=3
mov bx,ax ;bx=3
add ax,bx ;ax=6
add ax,bx ;ax=9
mov bx,ax ;bx=9
add ax,bx ;ax=12H
add ax,bx ;ax=1BH
mov bx,ax ;bx=1BH
add ax,bx ;ax=36H
add ax,bx ;ax=51H :D:D 每一次的ADD AX,AX都是*2 的呀 事实上这道题要用循环或者乘法指令。 :lol:lol:lol:lol哈哈还没学到呢 用ADD只能这样一遍一遍的写,loop就很简单了,不过要到第五章才有学 要么用乘法 貌似乘法的指令还没学过 小甲鱼 发表于 2011-6-12 12:21 static/image/common/back.gif
事实上这道题要用循环或者乘法指令。
小甲鱼不能坑人哦!{:3_58:},题目都说了只能用学过的指令0.0 {:2_35:} 小甲鱼 发表于 2011-6-13 20:19 static/image/common/back.gif
{:3_50:}明显感觉被坑了……
天下孤鹰 发表于 2011-6-11 22:50 static/image/common/back.gif
计算如下。。 应该是正确的吧。。
长了点。。 4条的不会写。。
{:5_106:} 恩,哥们写的非常好~ 3的4次方可以看成3*3*3*3那么3*3又可以看成3+3+3那么我们可以用loop语句来实现
assume cs:codesg
codesg segment
start: mov ax,3 ‘给AX初值3 用来存放最后的结果
mov bx,3 '给BX初值3 用BX当一个中间数
mov cx,3 '3的4次方要循环3次
s: push cx '用到两次循环,把第一个CX压入栈中,不让和第二次循环的CX弄混了
mov cx,2 ‘设置第二次循环的次数,3个3相加要循环两次,因为AX的初值为3
s0: add ax,bx’把AX和BX的值相加存入AX中
loop s0 ’检测CX的值是否为0,不为0跳到S0处,直到CX为0
mov bx,ax‘下一次循环是3个9相加,所以把AX的值传给BX
pop cx ’取出栈中CX的值,
loop s ‘判断第一层CX的值,如果不为0跳到S处执行
mov ax,4c00H
int 21H
codesg ends
end start
不知道有没有帮助
页:
[1]
2