다음은 어셈블리 ("속기"라고하는 것)와 기계 코드 간의 통신을 보여주는 예제입니다. 먼저, 알고리즘에 대한 어셈블리 코드가 있습니다. 일부 매개 변수는 추상화되어 있습니다.
* = 4000 ; This is the address where our program will be stored
LDX #len
loop LDA src,X
STA dest,X
DEX
BNE loop
물론 컴퓨터 코드로 변환 할 수는 없습니다. 또한 len
, src
및 dest
의 값을 입력해야합니다
src = $1234
dest = $5678
len = 10
loop
이름에 대해 이해하는 것은 것은 단지 같은 src
이 값 $1234
을 할당한다는 것입니다, loop
는 명령어의 주소를 할당됩니다 그 후에.따라서이 경우에는 LDX #len
이 2 바이트를 차지하므로 (은 $4000 + 2 = $4002
으로 설정 됨) 이것은 어셈블러에 의해 자동으로 수행되지만 물론 종이로이 모든 작업을 수행 할 수도 있습니다.
위 어셈블리 프로그램의 6502 기계 코드는 무엇입니까?
A2 0A
BD 34 12
9D 78 56
CA
D0 F7
어떻게 알 수 있습니까? 글쎄, 난 그냥 http://www.masswerk.at/6502/assembler.html에 온라인 6502 어셈블러에 위의 프로그램을 붙여 넣었습니다. LOOP
의 실제 값도 BNE LOOP
의 BNE
명령어 자체에 비해 단지 상대적 주소에 대한 기계 코드를 계산하는 데 사용되지 않습니다 방법
4000 LDX #LEN A2 0A
4002 LOOP LDA SRC,X BD 34 12
4005 STA DEST,X 9D 78 56
4008 DEX CA
4009 BNE LOOP D0 F7
400B
참고 : 그것은 심지어 당신에게 조립 및 기계 코드의 상세한지도를 보여줍니다 F7
은 -9이고, $400B
과 $4002
사이의 차이는 -9입니다.
이렇게하면 모든 것을 기계어로 변환 한 다음 점프하면 다음 명령의 시작 주소와 점프 대상 주소의 차이를 계산합니다. 역방향 점프는 음수이고 앞으로 점프는 긍정적이어야합니다.
왜 어셈블러 대신 16 진수 코드를 사용 하시겠습니까? –
@jnhyf "16 진 코드"? 어떤 IDE, 어셈블러 또는 컴파일러를 사용하고 있습니까? 이미 6502 어셈블리에 대한 경험이 있습니까? – bzlm
어셈블러를 사용하지 않고 6502 프로그램을 작성한다고 말하지 않기를 바랍니다. 개발 시스템에 무엇을 사용하고 있습니까? 사과 ][ ? 또는 무엇을? –