오늘은 어셈블리 언어로 다룬 프로그램 중, 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단계를 거쳐 진행된다고 정리할 수 있습니다.
- Interrupt가 걸리기 전의 레지스터의 값을 저장합니다.
- Input인지 Output인지를 확인합니다.
- 각 Interrupt에 대한 기능을 수행합니다.
- 다 마친 후, Interrupt가 걸리기 전의 레지스터 값들을 복구합니다.
- disable됐던 interrupt를 다시 able 시킵니다.
- Interrupt가 걸리기 이전의 실행으로 돌아갑니다.
이러한 상태로 진행됩니다. 가장 중요한 것은 5번째에 disable된 interrupt를 able 시키는 것입니다. 만약 5번이 빠져있다면, 해당 컴퓨터는 최초의 interrupt만 받고 그 후에는 받지 못하게 될 것입니다. (disable로 세팅되는 것 자체는 interrupt가 걸려 들어오는 과정에서 setting합니다.)
Interrupt에 대한 더 자세한 내용은 여기를 참고해주세요
그럼 이제, 이러한 Interrupt를 처리하기 위한 어셈블리 프로그램을 확인해봅시다.
마찬가지로, 그림에 잘 설명이 되어있으므로 자세한 설명은 생략합니다.
지금까지 어셈블리 언어로 짜여진 program에 대해서 알아봤습니다. 감사합니다.
'CS > Computer Architecture' 카테고리의 다른 글
[컴퓨터구조] 6-3. Assembly Programs -1 (0) | 2023.10.09 |
---|---|
[컴퓨터구조] 6-2. The Assembler (2) | 2023.10.08 |
[컴퓨터구조] 6-1. Assembly Language (0) | 2023.10.08 |
[컴퓨터구조] 5-6. Complete Computer Description (0) | 2023.10.02 |
[컴퓨터구조] 5-5.3. Instruction Cycle(register-reference, I/O Instruction) (0) | 2023.09.27 |