ARM汇编解决阶乘及大小写转换的问题

环境以及硬件

一、硬件仿真基于 SAMSUNG's S3C44B0X 16/32-bit RISC microprocessor 芯片,仿真器为 J-LINK

二、编写指令软件为 Integrated Development Environment ,软件仿真为 ARMulate.dll

三、需要基于ARM7硬件平台的C语言启动代码,用于分配中断向量表,初始化ISR地址,初始化堆栈空间,初始化应用程序执行环境,配置存储器系统,设定时钟周期,呼叫主应用程序。

四、这里仅有关键算法代码

ARM汇编求一个数的阶乘

题目:R1寄存器内数据的阶乘运算,结果存放在R0

mov r1,#6          ;将立即数 6 送至 R1,即为‘6'的阶乘,可以更改
 mov r0,r1          ;将 R1 的值给R0
loop              ;定义一个循环体标签
 subs r1,r1,#1      ;将 R1-R1 的给R1
 mul r0,r0,r1       ;将 R0*R1 的值给R0
 cmp r1,#1          ;将 R1 与 1 做比较
 BNE loop           ;上面的值不相等则跳转至 loop

ARM汇编大小写转换以及存入内存

题目:将内存地址0XC100000开始处的字符串"Welcome to CSUST!"中对应的小写字母转换成大写,大写变换成小写。

说明:此算法存在局限性,只能转换不包含ASSIC码值大于‘127'和在‘91~96'之间的字符串

STRING_WELCOME
	DCB "Welcome to CSUST!\n\0"   ;声明一个字符串

STRING
	LDR r0,=STRING_WELCOME        ;取得字符串的首地址
	mov r1,#0x0c100000	      ;将#0x0c100000给 R1,目的为将R1指向目标地址
STRING2
	LDRB r2,[r0]		      ;取出一个字符给 R2

	cmp r2,#97		      ;将 R2 与 97(即‘a') 作比较
	BGE BIGWORD		      ;大于或等于 97 则跳转至 BIGWORD 子程序

	cmp r2,#65		      ;将 R2 与 65(即‘A') 作比较
	BGE SMALLWORD		      ;大于或等于 65 则跳转至 SMALLWORD 子程序
	B MYLOOP		      ;跳转至MYLOOP,存字符

BIGWORD				      ;大写转小写子程序
	sub r2,r2,#32		      ;大写字母的assci码-32 即可转换为小写
	B MYLOOP		      ;跳转至 MYLOOP,存字符

SMALLWORD			      ;小写转大写子程序
	add r2,r2,#32		      ;小写字母的assci码+32 即可转换为大写

MYLOOP				      ;存字符子程序
	STRB r2,[r1]		      ;存入R1指定的内容
	add r0,r0,#1		      ;R0=R0+1
	add r1,r1,#1		      ;R1=R1+1
	CMP r2,#'\0'		      ;将R2与‘\0'作比较,目的是判断是否已经取完了字符串
	BNE STRING2		      ;上一个比较不相等则跳转至 STRING2 继续取字符

ASSIC码表

说明

1、程序均为原创,不一定为最好的解法,欢迎留言或者私信交流;

2、需要开发环境或者其他资料的也欢迎留言或者私信;

3、若有侵犯个人或团体的权益请及时联系我;

4、本文为原创,转载或引用请注明出处

到此这篇关于ARM汇编解决阶乘及大小写转换的文章就介绍到这了,更多相关ARM汇编大小写转换内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • ARM汇编逆向iOS 实战

    我们先讲一些ARM汇编的基础知识.(我们以ARMV7为例,最新iPhone5s上的64位暂不讨论) 基础知识部分: 首先你介绍一下寄存器: R0-R3:用于函数参数及返回值的传递 R4-R6, R8,R10-R11:没有特殊规定,就是普通的通用寄存器 R7:栈帧指针(Frame Pointer).指向前一个保存的栈帧(stack frame)和链接寄存器(link register, lr)在栈上的地址. R9:操作系统保留 R12:又叫IP(intra-procedure scratch),

  • ARM体系下的GCC内联汇编教程详解

    在操作系统级的编程中,有时候,C语言并不能完全的使用硬件的功能,这时候就需要嵌入一些汇编代码来实现功能. 有两种方式可以使C语言和assemly语言一起工作,一种是两种语言分开写成两个文件,链接的时候链接成一个文件;另一种就是在C语言中嵌入汇编代码.下面简单介绍一下如何在GCC中嵌入汇编代码. GCC规定了一个内联汇编的语法,不同硬件平台上的GCC内联汇编几乎都是这样的: asm( 汇编指令列表 :输出运算符列表 :输入运算符列表 :被更改的资源列表 }; 在GCC中插入汇编代码,需要以asm关

  • GNU ARM汇编语法原理及操作解析

    这篇文章主要介绍了GNU ARM汇编语法原理及操作解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 ARM汇编源程序有两种风格: ARM官方推荐的风格,所有的指令都大写.常用在windows下的IDE中. GNU风格的汇编风格,所有的指令都小写.常用在与Linux相关的工具中. 注释符号: GNU arm汇编所采用的注释符号是@符号,同样c语言中的 // 和 /* */ 两种类型的注释方法在GNU arm汇编中也被支持. 宏定义: 在GNU

  • 使用ARM汇编破解iOS程序基础知识分享

    一.Thumb指令与ARM指令 Thumb指令为16位,因此存储代码的密度高,节省存储空间.但是功能不全,它只是ARM指令(32位)集的补充,是ARM指令集下的一个子集.在初级阶段我们不需要了解这些知识,只要有个概念知道有这么个东西就可以. 二.ARM的寄存器初步了解 R0-R3: 用于函数参数及返回值的传递,超过4个参数,其它参数存在栈中,在ARM中栈是向下生长的,R0还可以作为返回值. R4-R6, R8,R10-R11: 没有特殊规定,就是普通的通用寄存器 R7: 栈帧指针,指向母函数与被

  • ARM汇编解决阶乘及大小写转换的问题

    环境以及硬件 一.硬件仿真基于 SAMSUNG's S3C44B0X 16/32-bit RISC microprocessor 芯片,仿真器为 J-LINK 二.编写指令软件为 Integrated Development Environment ,软件仿真为 ARMulate.dll 三.需要基于ARM7硬件平台的C语言启动代码,用于分配中断向量表,初始化ISR地址,初始化堆栈空间,初始化应用程序执行环境,配置存储器系统,设定时钟周期,呼叫主应用程序. 四.这里仅有关键算法代码 ARM汇编求

  • 使用汇编实现字符串的大小写转换

    使用汇编编程,可以直接访问内存中的数据,对数据进行相关操作,现在需要通过汇编指令and,or对字符串数据进行大小写转换.如下例,将BaSiC转换成大写,将iNforMaTiOn转换成小写. 例子: assume cs:codesg,ds:datasg datasg segment db 'BaSiC' db 'iNforMaTiOn' datasg ends codesg segment start: mov ax,datasg mov ds,ax mov cx,5 mov bx,0 s1: m

  • 汇编语言功能字符串大小写转换实现实例详解

    目录 问题1:将data段中的第一个字符串转换成大写,第二个字符串转换成小写 问题2:将data段中每个单词的头一个字母改成大写字母 问题3:将data段中每个单词改为大写字母 问题4:将data段中每个单词的前4个字母改为大写字母 问题5:设计一个子程序,将一个全是字母的字符串转化成大写 问题6:设计一个子程序,将一个全是字母,以0结尾的字符串,转化成大写 复杂一点的对结构化数据的版本 问题1:将data段中的第一个字符串转换成大写,第二个字符串转换成小写 分析: 如何转换成大小写 如果利用A

  • Java字母大小写转换的方法

    案例: 要求从控制台接收用户输入的一个字母,如果这个字母是小写,转换为大写:如果这个字母是大写,转换为小写:只能输入字母,如果是其他值,提示数据有误! 实现代码: import java.util.Scanner; /** * 常见字母大小写转换 * 原理: * 字符char采用的是Unicode编码的16位字符类型,其表示范围是0-65536.标准的8位ASCII字符集是Unicode * 的子集,其取值范围为0-127.大小写字母之间正好相差32 * @author Administrati

  • Oracle 大小写转换函数实例详解

    Oracle 大小写转换函数 小写转大写UPPer 大写转小写LOWER 例: select lower(ename) from emp; select upper(ename) from emp; --是否包含字母(大写和小写) select case when regexp_like('123','.([a-z]+|[A-Z])') then '包含字母' else '不包含字母' end from dual; --是否包含小写字母 select case when regexp_like(

  • javascript字母大小写转换的4个函数详解

    js中实现字母大小写转换主要用到了四个js函数: 1.toLocaleUpperCase2.toUpperCase3.toLocaleLowerCase4.toLowerCase 下面就这四个实现大小写转换的js函数逐一做简单的分析. 1.toLocaleUpperCase 将字符串中所有的字母字符都将被转换为大写的,同时适应宿主环境的当前区域设置. 2.toUpperCase 将字符串中的所有字母都被转化为大写字母. 3.toLocaleLowerCase 将字符串所有的字母字符都被转换为小写

  • Python判断字符串与大小写转换

    判断字符串 s.isalnum() #所有字符都是数字或者字母 s.isalpha() #所有字符都是字母 s.isdigit() #所有字符都是数字 s.islower() #所有字符都是小写 s.isupper() #所有字符都是大写 s.istitle() #所有单词都是首字母大写,像标题 s.isspace() #所有字符都是空白字符.\t.\n 大小写转换 s.upper() #把所有字符中的小写字母转换成大写字母 s.lower() #把所有字符中的大写字母转换成小写字母 s.cap

  • PHP将字符串首字母大小写转换的实例

    每个单词的首字母转换为大写:ucwords() <?php $foo = 'hello world!'; $foo = ucwords($foo); // Hello World! $bar = 'HELLO WORLD!'; $bar = ucwords($bar); // HELLO WORLD! $bar = ucwords(strtolower($bar)); // Hello World! ?> 第一个单词首字母变大写:ucfirst() <?php $foo = 'hello

  • Country使 MS-DOS 子系统能使用国际时间、日期、货币、大小写转换和小数分隔符

    Country 使 MS-DOS 子系统能使用国际时间.日期.货币.大小写转换和小数分隔符. 语法 country=xxx[,[yyy][,[Drive:][Path] FileName]] 参数 xxx  指定国家(地区)代码.  yyy  指定国家(地区)的代码页.  [Drive:}[Path] FileName  指定包含国家(地区)信息文件的位置和名称.  /?  在命令提示符显示帮助.  注释 country 命令配置 MS-DOS 子系统识别其中一种支持语言所使用的字符集和遵守的标

随机推荐