2016-12-02 6 views
0

나는 8 비트 숫자를 얻고 7segment에서 보여줄 ATmega32 용 프로그램을 작성하지만 Proteus에서 시뮬레이션 할 때 프로그램 메모리가 부족하다는 것을 보여줍니다. 정확히 무엇을해야합니까?어셈블리의 프로그램 메모리 밖으로

.INCLUDE "M32DEF.INC" 
.ORG $00 
//data to save in program memory 
.DB $FC,$30,$6E,$7A,$B2,$DA,$DE,$70,$FE,$FA 
.ORG $08 
LDI R16,$01 
//Statements 
+0

나는이 질문 – zx485

+1

이 질문을 http://arduino.stackexchange.com/에 속하기 때문에 오프 주제로이 질문을 닫으 투표 해요는 아두 이노과는 아무 상관이 없습니다. 태그가 말하는 것처럼 AVR의 어셈블리입니다. – UncleO

답변

2

.ORG 지시어가 올바르게 표시되지 않습니다. 프로세서는 주소 0에서 명령 실행을 시작하지만 데이터를 거기에 배치했습니다. 또한 10 바이트의 데이터가 있지만 8 바이트 만 데이터를 넣을 수 있습니다. 데이터가 무엇인지 확실하지 않습니다. 레이블을 지정하지 않았기 때문입니다. 지시가 있어야하나요? LCD 디스플레이의 숫자는 무엇입니까?

프로그램에 수행하려고하는 내용을 설명하기 위해 코드에 몇 가지 설명을 추가하면 도움이됩니다. 스택 포인터를 설정하고 포트 방향을 설정하는 부분을 볼 수 있지만 루프를 분석하려고하지는 않습니다. 무슨 뜻인지 말해주세요.

처음에는 .ORG 위치를 변경하려고 시도 할 수 있습니다. 종종 프로그램에는 "main :"이라는 부분이 있으며, 첫 번째 명령은 .ORG $0에 있으며 점프로 사용됩니다. 이렇게하면 프로그램 상단에 데이터를 배치 할 수 있습니다 (예 : .ORG $08). 코드에서 쉽게 찾을 수 있지만 실수로 실행되지는 않습니다.

.INCLUDE "M32DEF.INC" 
.ORG $00 
jmp main 

.ORG $08 
digits: .DB $FC,$30,$6E,$7A,$B2,$DA,$DE,$70,$FE,$FA 

main: 
LDI R16,$01 ; set stack pointer 
OUT SPH,R16 
LDI R16,$00 
OUT SPL,R16 

and so on 
+0

고마워요. 이 데이터는 LCD에 숫자를 표시하기위한 것입니다. 프로그램 메모리에 0에서 10까지 저장하여 프로그램에 액세스하려고합니다. –