7월, 2022의 게시물 표시

Z-80으로 간단한 컴퓨터 만들기 7

 5.4. 메모리 쓰기 시험 프로그램 수행시 메모리에 데이터가 잘 써지는지 확인하기 위한 시험을 수행하고, 그 결과를 확인한다. 프로그램은 앞에 작성한 것에서 레지스터 A에 있는 데이터를 메모리의 임의의 어드레스에 쓰도록 다음 한 출을 추가하여 작성한다.  LOOP      IN A, (0)           : 0번 입력장치에서 데이터를 가져와 reg A에 넣는다.       OUT (0), A : reg A의 데이터를 0번 출력장치로 출력한다.      LD (0010), A : reg A의 데이터를 메모리 어드레스 0010에 써 넣는다.      JP LOOP           : LOOP 로 Jump. 무한 루프 수행 위의 프로그램을 Machine Language로 변환하면 다음과 같다. LOOP      IN A, (0)           0000      DB 00      OUT (0), A 0002      D3 00      LD (0010), A 0004      32 10 00      JP LOOP           0007      C3 00 00           000A 위의 프로그램을 5.3 절에 나타낸 절차에 따라 메모리에 입력...

Z-80으로 간단한 컴퓨터 만들기 6

이미지
 5.2. Assembly 언어 이제 프로그램을 작성하여 프로그램을 메모리에 써넣고, 시험을 수행하여야 한다. 프로그램을 작성하기 위해 먼저 Z80내부 레지스터들과 Assembly 언어에 대해 간략히 살펴본다. Z80 내부 레지스터는 그림 18에 나타내었다.  그림 18  Z80 내부 레지스터 내부 레지스터 중에 A는 Accumulator로 사용되는 레지스터로 CPU가 연산을 수행 했을 때 주로 그 결과는 A에 저장되게 되고, F는 Flag 레지스터로 연산의 결과에 대한 상태를 나타낸다, 여기서 상태라는 것은 연산 결과가 0인지를 나타내는 Zero Flag, 결과가 +인지 –인지를 나타내는 Sign Flag등이 있어서 연산의 결과에 따라 프로그램을 수행할 때 확인할 수 있는 레지스터이다. B, C, D, E, H, L 레지스터는 일반적으로 임시로 데이터를 저장하기 위해 쓰이는 레지스터이다. 그리고 16비트로 구성된 레지스터가 4개 있는데 그중에 IX, IY는 주소를 참조할 때 주로 쓰이는 레지스터이고, SP는 Stack을 지정할 때 쓰는 레지스터, PC는 현재 프로그램이 수행되고 있는 현재의 어드레스를 저장하고 있는 레지스터이다. 여기서 Stack은 프로그램 수행시 sub routine을 호출할 때 현재의 PC와 주요 레지스터들을 저장하고 다시 원래의 프로그램으로 돌아갈 때 원래의 레지스터 값을 복원하기 위해 사용되는 레지스터로 sub routine이 호출되면 PC는 자동으로 Stack에 저장되고, 이 외 사용자가 저장을 한 레지스터를 Stack에 저장한다. 그리고 Sub routine이 모두 수행되고 나면 사용자는 Stack에 저장된 레지스터를 복원하고, 원래의 프로그램으로 복귀하여야 한다. 원래의 프로그램으로 복귀할 때 CPU는 Stack에 저장된 PC가 지정하는 주소로 돌아간다. Assembly 언어는 이 레지스터들과 메모리를 관리하면서 프로그램의 구성하여야 한다. Assembly 언어는 OP Code와 Operand로 구성된다...