汇编语言统计字符串中字符的个数

 因为作业里面有一个题,需要用汇编语言统计字符串中字符的个数,然而老师给的答案居然是错的。为什么呢,因为arm是字对齐的,答案居然每个字只比较一次就过去了,我去,每个字是有四个字节的,这能对吗,所以,我就自己做了一下,略微花了点时间,为了不忘记,所以记到博客上,以后回来看。

 用汇编语言编写程序统计任意字符串包含的字符个数。(约定:字符串以 0 为结束标志)

 对应的目标板是LPC2132;
 关键就是把每个字内的四个字节,都要检查一遍。
 1.专门用了一个寄存器r3,每次把当前字r1逻辑右移(LSR) r3*8个位,即
mov r5,r1,lsr r4;这一句。
 2. DCD只能开辟字空间,可是要开辟的是字节啊,所以是用DCB,但是字符串还是字对齐的,所以只能每个字检查4次。

  ENTRY
        
__main
	
	;add the user code here. 
start
	ldr r0, =string
	ldr r1, [r0]
	mov r2, #0				;字数
	mov r3, #0				;字节数
	mov r4, #0
lpa							;字循环
	ldr r1, [r0, r2, lsl #2]
	b   lpb
	
lpb						;字节循环
	mov r4, r3, lsl #3
	mov r5,r1,lsr r4
	and r5, r5, #0xff	;r5存储取出的字符
	cmp r5, #0			;判断是否是结束字符0
	beq end	
	add r3, #1
	cmp r3, #4			;判断当前字内的字节是否判断完毕
	bne lpb
	add r2, #1			;移动到下一个字
	mov r3, #0			;字节的下标归0
	beq lpa
	
end
	add r3, r2,lsl #2
	B	.

string   dcb "helloworld!",0
	AREA    data,CODE,READWRITE
	
	END

在一次次编码的过程中发现数组下标从0开始,会非常的方便对于边界值的判断。有兴趣可以自己实际写写这个代码,就会发现看似很简单,实际还是有点要注意的东西的,比C语言麻烦一些。

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值