Assembly 汇编语言(embstide)-为什么寄存器值没有变化?
我编写了以下汇编语言代码来实现10个数据数组中的冒泡排序,每个数据长度为16位。没有编译错误,但是当我逐行执行时,寄存器值不会改变 这是我编译程序时的“构建”窗口:Assembly 汇编语言(embstide)-为什么寄存器值没有变化?,assembly,Assembly,我编写了以下汇编语言代码来实现10个数据数组中的冒泡排序,每个数据长度为16位。没有编译错误,但是当我逐行执行时,寄存器值不会改变 这是我编译程序时的“构建”窗口: .global _start 2 3 .text 4 _start: 5 0000 0910A0E3 mov r1, #9 6 0004 0920A0E3 mov r2, #9 7
.global _start
2
3 .text
4 _start:
5 0000 0910A0E3 mov r1, #9
6 0004 0920A0E3 mov r2, #9
7
8 loop:
9
10 0008 28309FE5 ldr r3,=dat1
11 000c 0120A0E1 mov r2,r1
12
13 loop2:
14
15 0010 B040D3E1 ldrh r4,[r3]
16 0014 B250D3E1 ldrh r5,[r3,#2]
17 0018 050054E1 cmp r4,r5
18 001c 005083C5 strgt r5,[r3]
19 0020 024083C5 strgt r4,[r3,#2]
20 0024 023083E2 add r3,r3,#2
21 0028 012052E2 subs r2,r2,#1
22 002c 0200001A bne loop2
23
24 0030 011051E2 subs r1,r1,#1
25 0034 0000001A bne loop
26
27 0038 00000000 .data
28 dat1:
29 0000 8597 .hword 0x9785
30 0002 29A8 .hword 0xa829
31 0004 3412 .hword 0x1234
32 0006 6382 .hword 0x8263
33 0008 34B2 .hword 0xb234
34 000a 8709 .hword 0x0987
35 000c 2314 .hword 0x1423
36 000e 1792 .hword 0x9217
37 0010 1111 .hword 0x1111
38 0012 2143 .hword 0x4321
39
40
41 .end
ARM GAS C:\EmbestIDE\Bin\proj1\order.s page 2
这与指令的存储位置有关吗/ 寄存器值必须更改,至少pc必须更改,因为它必须在跨过上一条指令后显示下一条指令。“构建窗口”如清单所示,这是检查结果机器代码在输出文件中的外观的好方法。但在执行它之后,debugger中的反汇编窗口将显示真实内存和指令,因此您应该注意这一点,以防出现意外内存覆盖或意外跳转到代码之外的某个地方。如果您有一些工作示例,请尝试在调试器中比较,加载后会有什么不同。是的,只有pc会更改。