我是靠谱客的博主 大气八宝粥,最近开发中收集的这篇文章主要介绍使用AT&T汇编格式 以循环方式计算阶乘 并打印输出到标准输出首先是将数字转化为字符串然后组合到计算阶乘上面,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先是将数字转化为字符串

思想

  • 做除法,从低位到高位,依次取出各位
  • 对每位,加上‘0’的ascii,此时其变为了字符
  • 放入一个栈中,从而反向输出从高位到低位

代码

#将数字转为字符串
.bss
.lcomm
buff ,30
# 分配一个栈
.data
temp : .string ""
# 保存最后结果
.text
.global _start
_start:
movq $1234,
%rax
# 被除数
cqto
# 符号扩展
movq $0,
%rdi
# 计数/或者称为索引
movq $0,
%rsi
# 最后输出string的索引
movq $10,
%rbx
# 除数
# 循环计算
loop:
xorq %rdx,
%rdx
# 清0,计算div所必须的操作
cmpq $0,
%rax
# 当前被除数是否为0
je loop_pop
# 计算完毕
idivq %rbx
# 真正的除法在这里
addq $48,
%rdx
# 将余数转为ASKII数
pushq %rdx
# 将结果放到栈里
incq %rdi
# 增加一次计数
jmp loop
# 继续循环计算剩余的被除数
#反向取出余数
loop_pop:
cmpq $0, %rdi
# 如果一次除法都没做或已经取出所有余数
je exit
# 直接退出
popq %rax
# 将当前余数放入rax
movq %rax, temp(,%rsi,1) # 将当前rax值放入对应位置
decq %rdi
# 减少一次索引,为0表示栈空
incq %rsi
# 索引增加一次
jmp loop_pop
exit:
movq $30,
%rdx
# 调用write系统调用
movq $temp, %rcx
movq $1,
%rbx
movq $4,
%rax
int $0x80
movq $0,
%rbx
# 调用exit(0)系统调用
movq $1,
%rax
int $0x80

然后组合到计算阶乘上面

#将数字转为字符串
.bss
.lcomm
buff,
30
# 分配一个栈
.data
temp : .string ""
# 保存最后结果
.text
.global _start
_start:
fact_do:
movq $5,
%rdi
# 计算fact(5)
movq $1,
%rax
# 最后的结果
calculate:
imulq %rdi, %rax
# 计算阶乘
subq
$1,
%rdi
cmpq
$1,
%rdi
jg
calculate
# 定义一个类似itoa的函数
print:
# movq $1234,
%rax
# 被除数
cqto
# 符号扩展
movq $0,
%rdi
# 计数/或者称为索引
movq $0,
%rsi
# 最后输出string的索引
movq $10,
%rbx
# 除数
# 循环计算
loop:
xorq %rdx,
%rdx
# 清0,计算div所必须的操作
cmpq $0,
%rax
# 当前被除数是否为0
je loop_pop
# 计算完毕
idivq %rbx
# 真正的除法在这里
addq $48,
%rdx
# 将余数转为ASKII数
pushq %rdx
# 将结果放到栈里
incq %rdi
# 增加一次计数
jmp loop
# 继续循环计算剩余的被除数
#反向取出余数
loop_pop:
cmpq $0, %rdi
# 如果一次除法都没做或已经取出所有余数
je exit
# 直接退出
popq %rax
# 将当前余数放入rax
movq %rax, temp(,%rsi,1) # 将当前rax值放入对应位置
decq %rdi
# 减少一次索引,为0表示栈空
incq %rsi
# 索引增加一次
jmp loop_pop
exit:
movq $30,
%rdx
# 调用write系统调用
movq $temp, %rcx
movq $1,
%rbx
movq $4,
%rax
int $0x80
movq $0,
%rbx
# 调用exit(0)系统调用
movq $1,
%rax
int $0x80

最后

以上就是大气八宝粥为你收集整理的使用AT&T汇编格式 以循环方式计算阶乘 并打印输出到标准输出首先是将数字转化为字符串然后组合到计算阶乘上面的全部内容,希望文章能够帮你解决使用AT&T汇编格式 以循环方式计算阶乘 并打印输出到标准输出首先是将数字转化为字符串然后组合到计算阶乘上面所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部