어셈블리 언어로 변환하는 컴파일러를 작성하는 중입니다. while 루프에 문제가 있습니다. 아무리 간단한 프로그램으로 만들면 언제나 세그먼트 결함이 생깁니다. 생성 된 것 어셈블리 언어 코드 여기어셈블리 언어 While 루프
start
start
int x.
x = 0.
repeat[x <= 5] //while x is less than or equal to 5 print out x
start
print x.
finish
finish
finish
것 : 여기
내가 어셈블리 언어로 컴파일하고있어 프로그램의 코드입니다 이PUSH
LOAD x
STACKW 0
LOAD 0
STACKW 0
L0:
LOAD 5
STORE V0
STACKR 0
SUB V0
BRPOS L1
STACKR 0
STORE V1
WRITE V1
BR L0
L1: NOOP
POP
STOP
V0 0
V1 0
x 0
논리가 나에게 좋아 보인다,하지만 난 이 어셈블리 언어 코드를 실행할 때 세분화 오류가 발생합니다. 아무도이 문제의 원인이 무엇인지 말해 줄 수 있습니까? 감사!
어셈블리 구문 중 일부를 설명 할 수 있습니까? BRPOS와 NOOP는 무엇입니까? – mohsaied
"BRPOS arg"1, ACC> 0이면 arg로 점프하고 "NOOP"는 조작 없음을 의미하므로 기본적으로 아무것도하지 않습니다. while 루프는 x> 5 일 때 NOOP으로 점프합니다. – Sarah
OK, 컴파일러는 소스 코드를 ** 일부 ** 어셈블리 코드로 컴파일하고 예상대로 작동합니다. 그래서, ** 당신이 사용하는 어셈블리 언어 구문은 무엇입니까? ** 당신이 타겟으로하는 CPU 아키텍처는 무엇이며, 컴파일러가 생성 한 어셈블리 코드를 어셈블하는 데 사용하는 어셈블러는 무엇입니까? ** 어셈블러와 링커가 명령 줄에서 실행되는 경우 정확한 어셈블러와 링커 명령과 매개 변수는 무엇입니까? 어셈블러 및 링커가 일부 IDE에서 실행되는 경우 어느 것입니까? –
nrz