CMP R1, #0
; 是否是字符串结束标志
; 如果不是,指针拨向下一个字符
; 如果是,将统计的字符串个数,放入单元num
ADDNE R2, R2, #1 ; 如果不是,统计个数增加1 ADDNE R0, R0, #1 BNE CONTI LDREQ R3, =NUM STREQ R2, [R3] stop
MOV R0, #0x18 LDR SWI
AREA Data, DATA, READWRITE string DCB NUM DCB END
0
100
; 这三条指令是ADS调试环境特约
R1, =0x20026
0x123456
;程序运行结束返回编译器调试环境
; 数据段的名字Data
\
; 结束
10、 用汇编语言编写程序计算:答:
ENTRY CODE32 start LDR
R0, =sum
; R0指向存储单元sum ; R1存放累加和 ; R2初始化起始值 ; 实现R1=R1+R2*2 ; 判断R2是否等于100 ; 如果不等,R2累加1
; 如果相等,将累加和R1放入存储单元sum中
; 这三条指令是ADS调试环境特约
MOV R1, #0 MOV R2, #1 CONTI
ADD R1, R1, R2, LSL #1 CMP R2, #100 BNE CONTI stop
MOV R0, #0x18 LDR SWI
AREA Data, DATA, READWRITE sum END
DCD
0
; 结束
; 数据段的名字Data
0x123456
R1, =0x20026
;程序运行结束返回编译器调试环境
ADDNE R2, R2, #1 STREQ R1, [R0]
Sum??2?NN?1
AREA sum2n, CODE, READONLY
; 代码段名sum2n
; 程序的入口
11、 用汇编语言编写程序实现:已知BUF1中有N1个按从小到大顺序排列的互不相等的字符号数,BUF2中有N2个从小到大顺序排列的互不相等的字符号数。试编写程序将BUF1和BUF2中的数合并到BUF3中,使得BUF3中的数互不相等且按从小到大顺序排列。
答:AREA GATHER,CODE,READONLY
ENTRY CODE32 N1 EQU 5 N2 EQU 6 N3 EQU 11
START LDR R0,=BUF1;数组一的起始指针始终不动 LDR R1,=BUF2;数组二的起始指针始终不动 LDR R2,=BUF3;数组三的起始指针始终不动 MOV R3,#0;数组一,二,三的计数器 MOV R4,#0 MOV R5,#0
LOOPI ADD R6,R0,R3,LSL #2;数组一,二,三的地址指针,要移动 ADD R7,R1,R4,LSL #2 ADD R8,R2,R5,LSL #2 LDR R9,[R6] LDR R10,[R7] CMP R9,R10 BLT LOOPJ BGT LOOPK BEQ LOOP CMP R5,#N3 BEQ STOP
LOOPJ STR R9,[R8];数组一中的数小于数组二中的数,将数组一中的数放入数组三中 ADD R3,R3,#1 ADD R5,R5,#1 CMP R3,#N1 BLT LOOPI ;B LOPI
LOPI STR R10,[R8,#04]!;数组一中的数已经合并到数组三中,将数组二中剩余的数存入数组三中 ADD R4,R4,#1 ADD R5,R5,#1 ADD R7,R1,R4,LSL #2 LDR R10,[R7] CMP R4,#N2 BLT LOPI
LOOPK STR R10,[R8];数组二中的数小于数组一中的数,将数组二中的数放入数组三中 ADD R4,R4,#1 ADD R5,R5,#1 CMP R4,#N2 BLT LOOPI ;B LOPJ
LOPJ STR R9,[R8,#04]!;数组二中的数已经合并到数组三中,将数组一中剩余的数存入数组三中 ADD R3,R3,#1
ADD R5,R5,#1 ADD R6,R0,R3,LSL #2 LDR R9,[R6] CMP R3,#N1 BLT LOPJ
LOOP STR R9,[R8];数组一中的数与数组二中的数相等,将数组一中的数放入数组三,三个计数器同时加一
ADD R3,R3,#1 ADD R4,R4,#1 ADD R5,R5,#1 CMP R3,#N1 BLT LOOPI BEQ LOPI CMP R4,#N2 BLT LOOPI BEQ LOPJ STOP MOV R0,#0x18 LDR R1,=0X20026 SWI 0X123456
AREA Data,DATA,READWRITE BUF1 DCD 0X11,0X33,0X55,0X77,0X99 BUF2 DCD 0X22,0X44,0X66,0X88,0XAA,0XBB
BUF3 DCD 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00
END
12、用汇编语言编写程序实现:将字节变量BVAR中的压缩型BCD数转换为二进制数,并存入原变量中。
答:
AREA tranx, CODE, READONLY ; 代码段名tranx ENTRY CODE32 start LDR LDR
R0, =BVAR R1, [R0]
#0x0F
; 取BVAR的个位 ; 取BVAR的十位 ; R4=R3*2 ; R5=R3*8 ; R3=R4+R5=R3*10 ; R1=R3+R2
; 将BVAR的值加载到寄存器R1
; 程序的入口
MOV R2,
AND R2, R2, R1 MOV R3, #0x0F
AND R3, R3, R1, LSR #4 MOV R4, R3, LSL #1 MOV R5, R3, LSL #3 ADD R3, R4, R5 ADD R1, R3, R2 STR R1, [R0] stop
; 将转换的值存到BVAR变量中
MOV R0, #0x18 LDR SWI
0x123456
; 这三条指令是ADS调试环境特约
;程序运行结束返回编译器调试环境
R1, =0x20026
AREA Data, DATA, READWRITE BVAR DCB END
0x89
; 数据段的名字Data
; 结束
相关推荐: