ORG 지시문은 어셈블리 코드에서 무엇을합니까?
문제
참고로, 코드는 Motorola 68008입니다.
다음과 같은 코드가 있다고 가정합니다.
org 200
sequenceO: ds.b 5
sequenceN: ds.b 5
move.w #sequenceO, A0
move.w #sequenceN, A1
A0이 값 200과 A1을 값 205로 유지할 것이라고 생각하는 것이 맞습니까?
과거 논문의 시험 질문 중 하나는 "시퀀스 0과 시퀀싱의 물리적 주소는 무엇입니까?", 대답은 "200 및 205"일까요, 아니면 "200-204 및 205-209"일까요?
여러 조직 지시문이있는 몇 가지 코드를 보았습니다.
org 100
Array1 : Ds.B 4
org 300
마지막 조직 지시문이 따랐다 고 생각하는 것이 옳습니다. 예를 들어이 경우 Array1은 300을 가리 킵니다.
해결책
- 예, 제대로 들립니다. 주소
sequenceN
5 바이트 이상입니다sequence0
. - "그다지 의존한다", 나는 ... 복수의 "주소"이기 때문에, 나는 그들이 전체 범위를 원한다고 생각한다.
- 아니요, 여러 가지를 기대할 것입니다
org
s는 다음과 같은 코드에 적용하기 만하면array1
100 달러입니다. 후자 후에 코드 나 데이터 생성이 발생하지 않기 때문에org
, 그것은 기본적으로 어셈블러에 의해 무시됩니다.
다른 팁
"org"는 "Origin"을 의미한다고 가정합니다. 첫 번째 주소는 방출되는 코드 또는 데이터 세그먼트에 할당됩니다.
예, 200과 205
Sequence0은 200에서 시작하여 5 바이트에서 204로 연장됩니다.
아니요, Array1은 100에서 시작합니다. 조직 300이 300에서 시작됩니다.
당신은 사용하고 있습니다 : MOVE.W #sequenceO, A0
따라서 주소의 하부 단어 (16 비트) 만로드하고 있습니다. A0
. 그것은 매우 낮은 메모리에서만 작동합니다 ( A0
아래에 $00010000
)
일반적으로 a를 사용합니다 MOVE.W
주소 레지스터에서는 까다로워집니다.
노력하다: LEA #sequence0, A0
(32 비트 주소를로드합니다 A0
)
대부분의 어셈블러도 다음을 수행합니다.
MOVEA.L #sequence0, A0
감사합니다, Dave Small
제휴하지 않습니다 StackOverflow