(1) 降序冒泡排序程序的 ARM 汇编代码如下:

AREA Sort, CODE, READONLY ENTRY LDR R0, =StartOR ; R0 存储 StartOR 的首地址 LDRB R1, [R0] ; R1 存储数据数量 ADD R0, R0, #1 ; R0 指向数据列表的第一个元素 MOV R2, #0 ; R2 存储当前比较轮次 Loop1 CMP R2, R1 ; 比较轮次是否达到数据数量 BGE EndLoop1 ; 如果达到则退出循环 MOV R4, #0 ; R4 存储是否发生交换的标志位 MOV R3, #1 ; R3 存储当前比较位置 Loop2 CMP R3, R1 ; 比较位置是否达到数据数量 BGE EndLoop2 ; 如果达到则退出循环 LDRB R5, [R0, R3] ; R5 存储当前位置的数据 LDRB R6, [R0, R3-1] ; R6 存储前一个位置的数据 CMP R5, R6 ; 比较两个位置的数据 BLE NoSwap ; 如果不需要交换则跳过 STRB R5, [R0, R3-1] ; 交换两个位置的数据 STRB R6, [R0, R3] MOV R4, #1 ; 设置发生交换的标志位 NoSwap ADD R3, R3, #1 ; 比较位置加 1 B Loop2 ; 继续下一轮比较 EndLoop2 CMP R4, #0 ; 如果没有发生交换则表示已经排好序 BEQ EndLoop1 ADD R2, R2, #1 ; 比较轮次加 1 B Loop1 ; 继续下一轮比较 EndLoop1 LDR R0, =Start ; R0 存储 Start 的首地址 ADD R5, R1, #1 ; R5 存储数据数量加 1 STRB R1, [R0] ; 第一个元素存储数据数量 ADD R0, R0, #1 ; R0 指向数据列表的第一个元素 ADD R6, R0, R1 ; R6 指向数据列表的最后一个元素 Loop3 CMP R0, R6 ; 是否已经遍历完所有数据 BGE EndLoop3 ; 如果已经遍历完则退出循环 LDRB R1, [R0] ; R1 存储当前位置的数据 STRB R1, [R6] ; 把当前位置的数据拷贝到 Start 数据列表的最后一个位置 SUB R6, R6, #1 ; 最后一个位置往前移动一位 ADD R0, R0, #1 ; 当前位置往后移动一位 B Loop3 ; 继续下一个位置 EndLoop3 END

(2) 程序流程图如下:

+---------+
|  Start  |
+---------+
     |
     v
+----------+         +----------+         +----------+
|  StartOR |         |  Sort    |         |  mydata  |
+----------+         +----------+         +----------+
     |                    |                    |
     v                    v                    v
+----------+         +----------+         +----------+
|   Data   |         |   Data   |         |   Data   |
+----------+         +----------+         +----------+

(3) StartOR 数据列表需要存放在只读 ROM 区中,因为它是程序运行前就已经确定的数据,不需要修改。而 Start 数据列表需要存放在 RAM 区中,因为它是程序运行时排序后的数据,需要在程序中进行修改和操作

用ARM汇编语言1 编写一个降序冒泡排序程序要求如下:22 分 a 定义一个存储单元首地址名为 StartOR 的数据列表在代码段只读 ROM 区该数 据列表包含若干个字节存储单元。第一个单元是列表中数据的数量后续若干连续存储单元包含若干字节数据。字节数据的数量由编程人员自己确定。 b 编程要求把 StartOR 数据列表中存放的数据按降序排序冒泡排序法。排序后的数据存放到名为 Start 的数据

原文地址: https://www.cveoy.top/t/topic/cly4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录