栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

《编写汇编语言程序,从键盘上输入两个有符号数的32位数赋给内存变量a、b,按照下面格式输出。 a=✘✘✘✘ b=✘✘✘✘》

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

《编写汇编语言程序,从键盘上输入两个有符号数的32位数赋给内存变量a、b,按照下面格式输出。 a=✘✘✘✘ b=✘✘✘✘》

大家好,今天给大家上传一个,ARM汇编中的一个题,

编写汇编语言程序,从键盘上输入两个有符号数的32位数赋给内存变量a、b,

按照下面格式输出。

a=✘✘✘✘ b=✘✘✘✘

自己根据《从键盘上输入两个数,求和然后输出》这个例子改写的,代码如下

// add.s
.data
   fmt: .asciz "n sum=%dn"    //定义一个以空结尾的字符串
   fmt1: .asciz "%d %d"  //同上
   a: .word 0 //定义变量a
   b: .word 0 //定义变量b
.text
.globl main
 main: stmfd sp!,{lr}   //把返回地址推到堆栈上
    ldr r0,=fmt1  //加载指向格式化字符串的指针(取两个数到内存中)
    ldr r1,=a   //将变量a存入r1中
    ldr r2,=b   //将变量b存入r2中
    bl scanf //scanf("%d %d",&a,&b)
    ldr r1,=a//从内存中读取数据
    ldr r1,[r1] 
    ldr r2,=b
    ldr r2,[r2]
    add r1,r2 //运算然后输出
    ldr r0,=fmt
    mov r2,r1
    bl printf
    mov r0, #0    //move return code into r0
    ldmfd sp!,{lr}     //从堆栈弹出返回地址
  mov pc, lr     //return to Linux
.end             //结束汇程序

这里面数据段中改变的是.data 中fmt: .asciz "n sum=%dn"这一句话,然后就是去掉

add r1,r2(将两数相加),然后就是改变mov r2,r1,然后换要添加一句话,总之,一共修改4点。

正确的程序如下:

.data
   fmt: .asciz "n a=%d b=%dn"//输出两个数a=,b=
   fmt1: .asciz "%d %d" //键盘上输入两个数
   a: .word 0 //定义变量a
   b: .word 0 //定义变量b
.text
.globl main
 main: stmfd sp!,{lr}   //把返回地址推到堆栈上
    ldr r0,=fmt1  //加载指向格式化字符串的指针(取两个数到内存中)
    ldr r1,=a   //将变量a存入r1中
    ldr r2,=b   //将变量b存入r2中
    bl scanf //scanf("%d %d",&a,&b)
    ldr r1,=a//从内存中读取数据
    ldr r1,[r1] 
    ldr r2,=b
    ldr r2,[r2]
    ldr r0,=fmt
    mov r3,r1
    mov r3,r2
    bl printf
    mov r0, #0    //move return code into r0
    ldmfd sp!,{lr}     //从堆栈弹出返回地址
  mov pc, lr     //return to Linux
.end  

 

好了,小伙伴们自己看看,其实有时候可以模仿其它程序,我也是一个ARM汇编的初学者,拜拜,今天就到这里,这是小作者的第一次创作,感谢大家的支持,最后,有什么疑问,私信评论都可以哦,我会尽我所能为大家回答。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875916.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号