미리 정의 된 .byte 값을 레지스터에 제대로로드하는 방법은 무엇입니까? 예 : 상수로 정의와 함께 :초보자 용 ARM 어셈블리 질문
constant: .byte 'a'
나는 노력하고 있어요 :
ldr r0, =constant
ldr r1, [r0]
그러나, 시뮬레이터는 둘째 줄 끝에서 중지하고 오류 "정렬되지 않은 메모리 위치에 접근, 잘못된 주소"의 나머지를 제공합니다 그렇지 않으면 코드는 두 번째 줄이 포함되지 않은 한 제대로 실행됩니다.
전체 코드 :
; r0 is a pointer to msg1
; r1 used to store the value of val
; r2 used to compare a character in msg1
; r3 counter for the number of comparisons
.text
.global _start
_start:
ldr r0, =msg
ldr r1, =val
ldr r1, [r1]
mov r3, #0
loop: ldr r2, [r0]
cmp r2, #0
beq done
cmp r0, r1
add r0, r0, #4
bne loop
add r2, r2, #1
b loop
done:
swi 0x11
.data
.align
msg: .asciz "How many 'a's are in this string?"
val: .byte 'a'
.end
"바이트 정렬 포인터"- 다른 종류가 있습니까? :) –
@Michael Burr, 나는 더 제한적인 정렬을 가진 포인터에 반대했다. –