CS/Computer Architecture

[컴퓨터구조] 6-4. Assembly Programs - 2

F12:) 2023. 10. 9. 18:29

오늘은 어셈블리 언어로 다룬 프로그램 중, Subroutines와 I/O Programming에 대해서 살펴봅시다.

 


Subroutines

우리는 계속 반복되는 작업들을 subroutine으로 둬서, 사용하기 편하게 합니다. 아래는 left shift를 4번하는 연산 즉, AC의 값에 16을 곱하는 연산이 되겠습니다.

 

이러한 식으로 subroutines를 돌고 나올 수 있습니다. X는 16진수로 1234이기 때문에 CIL을 4번 해주면 4비트 즉, 1바이트가 옮겨지므로 2340이 되고 같은 원리로 Y도 3210이 됨을 알 수 있습니다.

 

 


 

 

I/O Programming

과거 컴퓨터는 I/O의 기능을 수행하기 위해 매번 CPU가 디바이스 장치에 대해서 확인을 하는 방식을 이용했습니다. 하지만, 이 방식은 너무 비효율적이었습니다. 따라서 이제는 Interrupt라는 signal을 이용하여 이런 번거로운 일을 줄이게 되었습니다.

 

 

Interrupt 처리 순서

Interrupt는 아래의 6단계를 거쳐 진행된다고 정리할 수 있습니다.

  1. Interrupt가 걸리기 전의 레지스터의 값을 저장합니다.
  2. Input인지 Output인지를 확인합니다.
  3. 각 Interrupt에 대한 기능을 수행합니다.
  4. 다 마친 후, Interrupt가 걸리기 전의 레지스터 값들을 복구합니다.
  5. disable됐던 interrupt를 다시 able 시킵니다.
  6. Interrupt가 걸리기 이전의 실행으로 돌아갑니다.

 

이러한 상태로 진행됩니다. 가장 중요한 것은 5번째에 disable된 interrupt를 able 시키는 것입니다. 만약 5번이 빠져있다면, 해당 컴퓨터는 최초의 interrupt만 받고 그 후에는 받지 못하게 될 것입니다. (disable로 세팅되는 것 자체는 interrupt가 걸려 들어오는 과정에서 setting합니다.)

 

Interrupt에 대한 더 자세한 내용은 여기를 참고해주세요

 

 

그럼 이제, 이러한 Interrupt를 처리하기 위한 어셈블리 프로그램을 확인해봅시다.

 

마찬가지로, 그림에 잘 설명이 되어있으므로 자세한 설명은 생략합니다.

 


지금까지 어셈블리 언어로 짜여진 program에 대해서 알아봤습니다. 감사합니다.