文章目录
-
- 用汇编语言实现 128 位数的减法。
- 已知 32 位变量 X、Y 存放在存储器的地址 0x90010、0x90014 中,要求实现 Z=X+Y,其中 Z 的值存放在 0x90018 中
- 已知 32 位有符号数 X 存放在存储器的地址 0x90010 中,要求实现:
- 已知 32 位有符号数 X 存放在存储器的地址 0x90010 中,要求实现
- 多分支 ARM 汇编的程序
- 编制程序使 S=1+2×3+3×4+4×5+……+N(N+1),直到 N 等于 10 为止。
- 用汇编语言实现 1+2+3+…+N
- 用 ARM 汇编语言编写完整的程序,实现 1+2+3+…+N
- 编写汇编程序计算 X!的值
- 编制程序,求两个数组 DATA1 和 DATA2 对应的数据之和,并把和数存入新数组 SUM 中,计算一直进行到两数之和为零时结束,并把新数组的长度存于 R0 中。
- 在以 BUF 为首地址的字存储区中存放有 10 个无符号数 0x0FF, 0x00, 0x40, 0x10, 0x90, 0x20, 0x80, 0x30, 0x50, 0x70, 请将它们按从小到大的顺序排列在 BUF 存储区中,编写程序。
- 编写一程序,查找存储器从 0x400000 开始的 100 个字中为 0 的数目,将其结果存到 0x400190 中。
- 用完整 ARM 汇编语言编写程序:使用 LDR 指令读取 0x40001000 上的数据,将数据加 3,若结果小于 100 则使用 STR 指令把结果写回原地址,若结果大于等于 100,则把 0 写回原地址。然后再次读取 0x40001000 上的数据,将数据加 1,判断结果是否小于 100 周而复始循环。
- 用 ARM 汇编语言编写完整的子程序,该程序从 0x40001000 地址处连续读取 100 个字符,并将这 100 个字符复制到目的地址标号 DIST 处。
- 存储器从 0x400000 开始的 100 个单元中存放着 ASCII 码,编写程序,将其所有的小写字母转换成大写字母,对其它的 ASCII 码不做变换。
- 编写一段 ARM 汇编程序:循环累加队列 rjarray 中的所有元素,直到碰上零值元素,结果放在 r4 中
- 用汇编语言实现以下 C 语言语句 for(i=limit;i>=1;i--) {fact=fact*i}
- 用 ARM 汇编语言编写完整的 ** 子程序 **,该程序从 NN 地址处连续读取 20 个字符,并将这 20 个字符复制到目的地址标号 MM 处
- 有 20 个有符号的字数据,依次存放在内存 BUFF 开始字单元中。试用 ARM 汇编语言编写完整的程序(包括代码段、数据段),从中找出最大值、最小值,并分别放入内存字单元 MAX、MIN 中。
- 已知 R0=a, R1=b,用汇编语言实现 if ((a!=0x10)&&(b!=0x30)) a=a+b
- 编写汇编程序计算内存 0x40003000 开始的 20 个字节单元数据之和,如果和小于 100 则将这 20 个单元复制到内存 0x40003020 开始的地址处,否则将这 20 个单元清零
- 数组 a、b 分别存放在 0x4000 与 0x5000 为起始地址的区域内,将以下 C 语言程序转为完整的汇编程序:
- 编写程序将 R1 的高 8 位数据转移到 R0 的低 8 位中,保存到地址 0x40003000 单元内
- 用汇编程序实现如下功能:将 R1 的高 16 位数据与低 16 位交换,保存到地址 0x40003000 内
- 编写子程序实现将存储器中起始地址 S1 开始的 6 个字数据移动到 S2 处(要求使用 LDM 和 STM 语句)。
- 附加说明
用汇编语言实现 128 位数的减法。
第一个 128 位数由高到低位于 R7~R4 中
第二个 128 位数由高到低位于 R11~R8 中
SUBS R0,R4,R8
SBCS R1,R5,R9
SBCS R2,R6,R10
SBC R3,R7,R11
已知 32 位变量 X、Y 存放在存储器的地址 0x90010、0x90014 中,要求实现 Z=X+Y,其中 Z 的值存放在 0x90018 中
AREA EX4_41,CODE,READONLY
ENTRY
CODE32
START LDR R0,=0x90010 ;变量 X 的地址送入 R0
LDR R1,[R0],#4 ;变量 X 的值读入 R1
LDR R2,[R0],#4 ;变量 Y 的值读入 R2
ADD R1,R1,R2 ;X+Y 结果存入 R1
STR R1,[R0] ;结果存入 z 中
B START
END
已知 32 位有符号数 X 存放在存储器的地址 0x90010 中,要求实现:
其中 Y 的值存放在 0x90010 中
AREA EX4_42,CODE,READONLY
ENTRY
CODE32
START LDR R1,=0x90010 ;加载变量 X 的地址->R1
MOV R0,#0 ;0->R0
LDR R2,[R1] ;将 X 的值加载到 R2
CMP R2,#0 ;X 与 0 比较 , 影响标志位
SUBLT R2,R0,R2 ;X<0 执行该语句 , 提到-X
STR R2,[R1] ;保存结果
B START
END
已知 32 位有符号数 X 存放在存储器的地址 0x90010 中,要求实现
其中 Y 的值存放在 0x90010 中。
AREA EX4_43,CODE,READONLY
ENTRY
CODE32
START LDR R1,=0x90010 ;加载变量 X 的地址->R1
LDR R2,[R1] ;加载 X 的值->R2
CMP R2,#0 ;与 0 比较
BEQ ZERO ;为 0 则跳转到 ZERO 处理
BGT PLUS ;大于 0 则跳转到 PLUS 处理
MOV R0,#-1 ;否则小于 0, 将 R0 设置为-1
B FINISH ;跳转到结束
PLUS MOV R0,#1 ;大于 0, 将 R0 设置为 0
B FINISH ;跳转到结束
ZERO MOV R0,#0 ;等于 0, 将 R0 设置为 0
FINISH STR R0,[R1] ;将结果 R0 保存
B START
END
多分支 ARM 汇编的程序
AREA EX4_44,CODE,READONLY
ENTRY
CODE32
START CMP R0,#8 ;与 8 比较
ADDLT PC,PC,R0,LSL#2 ;小于 8 则根据 R0 计算跳转地址 ,
;并用该地址修改 PC
B method_d ;大于 8 程序跳转到默认分支段执行
B method_0 ;分支表结构 , 其偏移量由 R0 决定
B method_1
B method_2
B method_3
B method_4
B method_5
B method_6
B method_7
method_0 ;method_0 的入口
MOV R0,#1 ;method_0 的功能
B end0
method_1
MOV R0,#2
B end0
method_2
MOV R0,#3
B end0
method_3
MOV R0,#4
B end0
method_4
MOV R0,#5
B end0
method_5
MOV R0,#6
B end0
method_6
MOV R0,#7
B end0
method_7
MOV R0,#8
B end0
method_d
MOV R0,#0
end0 B START
END
编制程序使 S=1+2×3+3×4+4×5+……+N(N+1),直到 N 等于 10 为止。
AREA EX4_45,CODE,READONLY
ENTRY
CODE32
START MOV R0,#1 ;R0 用作累加 , 置初值 1,S
MOV R1,#2 ;R1 用作第一个乘数 , 初值为 2,N
REPEAT ADD R2,R1,#1 ;R2 用作第二个乘