921836774 发布于十一月 20, 2021 分享 发布于十一月 20, 2021 (已修改) 假设数字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中 这个指令你表里也没有,不过没有这个的话,你怎么退出指令的? 十一月 20, 2021,由921836774修改 921836774水回不料路遇小白,被乱刀砍死.-4节操 注释 Eternalcycle 40.00节操 带动讨论 链接到点评
921836774 发布于十一月 20, 2021 分享 发布于十一月 20, 2021 3 分钟前, GMRK 说道: 贴主是汇编啊,三楼python跑题了啊 话说贴主这给的指令也太少了,一堆没用的读写指令,运算就加减乘,这是让学生自己搭建数学大厦吗 另外就个人经验而言“不让用”这种都只是幌子,你真的把命令都查一遍学会了,用DIV或者IDIV做出来老师也不会说啥吧 只有加减乘,连JL都没有,真的能算出来最小因子吗…… 链接到点评
921836774 发布于十一月 20, 2021 分享 发布于十一月 20, 2021 3 小时前, 萨卡 说道: 他这只是学习用的假设指令。。寄存器只有A和B 没有任何其他质量因为指望直接用JUMPIFZERO. 而JUMPIFZERO只检查上个+-*的结果是不是0, 没有任何其他东西了. k是行数,估计把output放最后一行就到那结束 他是有MOVE指令的 没说只有AB两个寄存器吧 然后只有+-* ,能求出最小因子吗 链接到点评
921836774 发布于十一月 20, 2021 分享 发布于十一月 20, 2021 3 小时前, 萨卡 说道: 因为只有MOVEA和MOVEB是写入寄存器AB的,MOVE只是复制内存位置的值不是寄存器。 没除法所以只能通过n-i*q==0了,前面算后如果是0 JUMPIFZERO就会转跳。。基本就这样了 这样怎么判断i*q已经大于n了 链接到点评
推荐贴