比较字符(ARM 程序集)



我正在尝试将字符数组中的字符与汇编代码中的字符进行比较。

这是我用来启动汇编代码的 C 代码:

char a[] = "abc";
char b = 'a'; 
int size = 3;
int d = _asm_main(a);
printf("Char a: %sn",a);
printf("Erg:%dn",d);

这是汇编代码:

_asm_main:
push {r6,r7,r8,lr}
mov r8,r0
ldr r7,[r8,#2]
mov r6,r7
b compare
compare:
cmp r6,#'c'
beq true
b false
true:
mov r0,#1
b end
false:
mov r0,#2
b end
end: 
pop {r6,r7,r8,pc}
BX lr

它适用于"c",但如果我尝试使用"a"或"b",我总是会进入错误的标签。我不明白为什么它适用于三个中的一个,而不适用于其他两个。

一个使用 ldrb 处理 ASCII 字节和 gdb 调试器的粗略插图。

.data
        array:          .string "abc"
.text
        .global _start
_start:
        nop
        ldr r0,=array
        ldrb r1, [r0,#0]
        ldrb r2, [r0,#1]
        ldrb r3, [r0,#2]
...

分行:

16              ldr r0,=array
(gdb) si
17              ldrb r1, [r0,#0]
(gdb)
18              ldrb r2, [r0,#1]
(gdb)
19              ldrb r3, [r0,#2]
(gdb)
_exit () at stuff.s:25
25              mov r7, #1
(gdb) i r
r0             0x20094  131220
r1             0x61     97
r2             0x62     98
r3             0x63     99

相关内容

  • 没有找到相关文章