初学汇编,另附汇编写1~100求和

以下内容可直接复制到keil5 内,适合初学者食用。


					@是单行注释符号
					@.text  .global  .end _start: _stop:  
	.text 			@伪操作不占用任何的代码段空间
	.global _start  @只是告诉编译器代码是如何编译的
_start:  @代码起始段
	
	@ mov r0, #0xFF -----> 编译器将指令编译成机器码,放在代码段空间。
	@<opcode>{cond}{S} Rd, Rn, oprand2 指令基本语法格式
	@<opcode> :指令码,指令的名字
	@{cond} :条件码 实现指令有条件的执行
	@{S}  :状态标志位,加S影响Cpsr的NZCV位,不加不影响
	@Rd, :目标寄存器,只能是一个寄存器。
	@Rn, :第一个操作寄存器,只能是一个寄存器。
	@oprand2 :第二个操作数,可以是一个寄存器/立即数/经过移位操作的寄存器
	
	@ mov r0, #0x12  把r0 赋值为0x12    r0=0x12
	@ mvn r2, r1     把r1取反后给r2赋值 r2=~(r1)
	@ add r4, r3, r2  	 r4=r3+r2 结果不影响CPSR的NZCV位
	@ adds r4, r3, r2    r4=r3+r2 带S结果影响CPSR的NZCV位(32位以上的运算使用)
	@ adc r4, r3, r2	 r4=r3+r2+C  带有符号位的加法运算
	@	C是CPSR的C位 因为大于32位运算进位了所以要加C
	@ sub r4, r3, r2     r4=r3-r2 结果不影响CPSR的NZCV位
	@ subs	r4, r3, r2	 r4=r3-r2 带S结果影响CPSR的NZCV位(32位以上的运算使用)
	@ sbc  r5, r1, r2     r5=r1-r2-!c 带有符号位的减法运算
	@	C是CPSR的C位 因为大于32位运算借位了所以要减去c取反
	@ lsl r1, r0, #4 r1=r0<<4  高位移出 低位补0    (无符号左移)
	@ lsr r1, r0, #4 r1=r0>>4  低位移出 高位补0   (无符号右移)
	@ asr R1, r0, #4 r1=r0>>4	低位移出 高位补符号位  (有符号的右移)
	@ ror r1, r0, #4  r1=r0>>4   低位移出 补到符号位  (循环右移)
	@ 如果目标寄存器和第一个操作寄存器相同可以就写一个
	@ and 按位相与 与0清0 与1不变
	@ orr 按位相或 或1置1 或0不变
	@ eor 异或1取反 异或0不变
	@ bic 按位清除
	@ cmp r0, #100 比较r0和100的大小一般和助记符一起使用 
	@ cmn r1, r2 比较r1 和~r2的大小 搭配助记符使用
	@比如:
	@	cmp r0, #100    
	@ 	addhi	r0,	r0, r1  如果r0<r1 就做加法运算 r0=r0+r1
	@ b 跳转指令 不保存下一条指令的地址到LR寄存器 比如	b stop 不需要返回的跳转
	@ bl 需要返回的跳转指令 保存下一条指令的地址到LR寄存器 需要返回时候用BL 比如函数调用
	@ msr 特殊寄存器CPSR的写指令  msr cpsr, r0  把r0的值写到cpsr中
	@ mrs 特殊寄存器CPSR的读指令  mrs r0, cpsr  把cpsr的值读取到r0中
	
stop:  @代码结束段
	b stop  
.end

      还有一道初学汇编常做的题,就是求1~100之内所有数字的和

 以下是代码详解:

    

.text
.globl _start

_start:  

mov r0, #0
    mov r1, #1    
loop:
    cmp r1, #100
    bhi stop
    add r0,r1
    add r1, #1
    b loop
stop: 
    b stop
.end

希望大家喜欢谢谢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值