转跳到内容

又来问作业了(计算机相关)


TXPH

只显示该作者

只有该作者的内容显示中。 返回到主题

推荐贴

假设数字n的地址是[N]

假设MOVE RA RB的意思为将RB的值对滴RA

假设SUB/MUL/ADD RA RB的意思是计算相应的四则运算,并将结果存放在RB中

 

    1. MoveA [N] //将地址n对应的数字移动到寄存器A。 也可以用 MOVE %rdx, [N]代替

    2. MOVEB 2 //将寄存器B的值设置为2(p)。 也可以用 MOVE %rax, 2代替(这样假设了存放返回值的寄存器为%rax)

3. .ADDP //设置跳转标记,这是外层循环,累加p,之后跳转到这里(理解为循环吧)

    4. INCREAMENT %rax // ++p

    5. MOVE %rsi %rax //int i = p

    6. SUB %rdx %rsi // i -= n

    7. JUMPIFZERO .RET //如果p == n,说明n为质数

8. .SETMUL //设置内层循环,累乘

    9. MOVE %rcx 1 //将寄存器%rcx的值设为1,用于存放乘积(int mul = 1;)

    10. MOVE %rdi 0 //int sub = 0,用%rdi存放n - i * p(最后的余数)

11. .MULIP

    12. MUL %rax %rcx //mul *= p,这里假设了乘积会存放在第二个寄存器(%rcx)中

    13. MOVE %rdi %rdx // sub = n,将%rdx的值更新为n

    14. SUB %rcx %rdi // sub -= mul,这里同样假设了减法结果会存放在第二个寄存器(%rdi)中

    15. JL .ADDP //若差小于0,则++p 这里用了你没给到的指令

    16. JUMPIFZERO .RET //若差为0,则说明找到了p

17. .RET

     18. RET //返回。 p存放在%rax中 这个指令你表里也没有,不过没有这个的话,你怎么退出指令的? 

,由921836774修改

921836774水回不料路遇小白,被乱刀砍死.-4节操

注释
Eternalcycle Eternalcycle 40.00节操 带动讨论
链接到点评
3 分钟前, GMRK 说道:

贴主是汇编啊,三楼python跑题了啊:mx051:

话说贴主这给的指令也太少了,一堆没用的读写指令,运算就加减乘,这是让学生自己搭建数学大厦吗:YangTuo_u:

另外就个人经验而言“不让用”这种都只是幌子,你真的把命令都查一遍学会了,用DIV或者IDIV做出来老师也不会说啥吧:mx014:

只有加减乘,连JL都没有,真的能算出来最小因子吗……

链接到点评
3 小时前, 萨卡 说道:

他这只是学习用的假设指令。。寄存器只有A和B

没有任何其他质量因为指望直接用JUMPIFZERO. 而JUMPIFZERO只检查上个+-*的结果是不是0, 没有任何其他东西了.

k是行数,估计把output放最后一行就到那结束

他是有MOVE指令的 没说只有AB两个寄存器吧 然后只有+-* ,能求出最小因子吗

链接到点评
  • 骚男锁定了本主题
游客
此主题已关闭。
×
×
  • 新建...

重要消息

为使您更好地使用该站点,请仔细阅读以下内容: 使用条款