Use the following codes as the beginning of your program. Write a sort program to sort these ten numbers from largest to smallest, then save them to memory. For ARMSim#, the sorted number also need to be displayed in the console and LCD screen (use the Embest Board Plug‐In). MOV r0, #0x00002000 MOV r1, #18 STR r1, [r0],#4 MOV r1, #6 STR r1, [r0],#4 MOV r1, #2 STR r1, [r0],#4 MOV r1, #8 STR r1, [r0],#4 MOV r1, #16 STR r1, [r0],#4 MOV r1, #10 STR r1, [r0],#4 MOV r1, #14 STR r1, [r0],#4 MOV r1, #4 STR r1, [r0],#4 MOV r1, #20 STR r1, [r0],#4 MOV r1, #12 STR r1, [r0],#4,不要书写未知指令
时间: 2023-07-02 07:12:47 浏览: 148
Encoder_Using_Assign_Statement.rar_Binary to Decimal_The Common
Sure! Here's a possible solution in assembly language:
```
; Initialize registers
MOV r0, #0x00002000 ; Memory address to store sorted numbers
MOV r1, #18 ; First number
MOV r2, #6 ; Second number
MOV r3, #2 ; Third number
MOV r4, #8 ; Fourth number
MOV r5, #16 ; Fifth number
MOV r6, #10 ; Sixth number
MOV r7, #14 ; Seventh number
MOV r8, #4 ; Eighth number
MOV r9, #20 ; Ninth number
MOV r10, #12 ; Tenth number
; Sort numbers from largest to smallest using bubble sort algorithm
SORT_LOOP:
MOV r11, #0 ; Flag to check if any swap was made in this iteration
MOV r12, #9 ; Index of last element to compare
CMP r12, #0 ; Check if only one element is left
BEQ SORT_EXIT ; If so, exit loop
SORT_INNER_LOOP:
LDR r13, [r0, r12, LSL #2] ; Load current element
LDR r14, [r0, r12, LSL #2] ; Load previous element
CMP r13, r14 ; Compare current and previous elements
BGE SORT_CONTINUE ; If current element is larger, continue to next pair
STR r13, [r0, r12, LSL #2] ; If previous element is larger, swap them
STR r14, [r0, r12, LSL #2]
MOV r11, #1 ; Set swap flag
SORT_CONTINUE:
SUBS r12, r12, #1 ; Move to previous pair
BGT SORT_INNER_LOOP ; Continue inner loop until all pairs are compared
CMP r11, #1 ; Check if any swap was made in this iteration
BNE SORT_EXIT ; If not, exit loop
MOV r11, #0 ; Reset swap flag
MOV r12, #9 ; Reset index of last element to compare
B SORT_LOOP ; Continue outer loop
SORT_EXIT:
; Display sorted numbers in console and LCD screen
MOV r0, #0x00002000 ; Memory address of sorted numbers
MOV r1, #10 ; Number of elements to display
MOV r2, #0 ; Initial index
DISPLAY_LOOP:
LDR r3, [r0, r2, LSL #2] ; Load current element
; Display number in console (using SWI 0x06)
MOV r0, #0x06 ; SWI number for console output
MOV r1, r3 ; Value to display
SWI 0 ; Call SWI
; Display number in LCD screen (using SWI 0x11)
MOV r0, #0x11 ; SWI number for LCD screen output
MOV r1, #0 ; X-coordinate of number
MOV r2, r2, LSL #2 ; Y-coordinate of number (multiply by 4 for 32-bit memory access)
ADD r2, r2, #0x80 ; Offset of LCD screen memory (0x08000000)
MOV r3, r3 ; Value to display
SWI 0 ; Call SWI
ADDS r2, r2, #4 ; Move to next line
ADDS r2, r2, #4
ADDS r2, r2, #4
ADDS r2, r2, #4
ADDS r2, r2, #4
ADDS r2, r2, #4
ADDS r2, r2, #4
ADDS r2, r2, #4
ADDS r2, r2, #4
SUBS r1, r1, #1 ; Decrement element count
BNE DISPLAY_LOOP ; Continue loop until all elements are displayed
```
Note that this program uses the bubble sort algorithm to sort the numbers from largest to smallest. The sorted numbers are stored in memory starting at address 0x00002000, and then displayed in both the console and LCD screen using software interrupts (SWIs). The SWI numbers for console and LCD screen output are 0x06 and 0x11, respectively. The X-coordinate for the LCD screen output is always 0, and the Y-coordinate is incremented by 4 for each line.
阅读全文