이 글은 www.youtube.com/watch?v=nB4q7n4cyXA&list=PLc8fQ-m7b1hD4jqccMlfQpWgDVdalXFbH&index=29 보고 공부한 글입니다.
루프를 가지는 프로그램
FORTRAN 프로그램 예
100개의 배열이 있고 각각의 배열을 더해서 SUM을 만드는 것
루프 부분은 LOP로 시작하여 LOP로 끝나는 부분이 loop이다.
카운터 부분 – NBR, CTR 루프를 돌면서 카운트를 세는 변수
데이터 Array 부분 – ORG 150부터 19~ 118까지까지 100개이다.
프로그램이 돌아가는 것
ORG 100 - 어셈블리어가 변역 돼서 기계어로 메모리에 올라갈 때
실제 시작은 2번지부터 한다.
LDA ADS –> load accumulater address를 가져온다.
ADS는 150번지이다.
STA PTR –> accumulater에 저장된 ADS를 PTR에 저장하라
PTR은 0이다.
LDA NBR –> NBR을 load 한다.
STA CTR –> accumulater에 저장된 NBR를 CTR을 저장한다.
ADD PTR 1 –> 1의 의미는 간접 주소,번지 가서 데이터를 더해라
ISZ PTR –> 포인터를 증가시켜라(151번지를 가리키게 된다.)
ISZ(increament szip if zero) CTR –> counter를 한 개 증가시킨다.
CTR 값이 0이 되면 다음 명령을 스킵한다. counter는 -100부터 -99, -98 … 0까지이다.
BUN LOP을 스킵해서 루프를 탈출한다.
STA SUM –> SUM에 지금까지 더한 accumulater에 값을 저장한다.
곱셈 프로그램
X가 0000
오른쪽으로 쉬프트 한 값이 1이면 값을 더한다.
SZE – E플립플롭이 1이면 BUN ONE으로 ONE으로 이동
0이면 BUN ZRO으로 ZRO로 이동
서브루틴 사용 예
메인 메모리의 100번부터 이 프로그램이 올라간다.
BSA SH4 –> 서브루틴 콜, SH4로, 프로그램 카운터는 102로 되어있다 그러면 102의 주소가 SH4시작 주소에 저장하게 된다.
CIL -> 4번 왼쪽으로 쉬프트
AND MSK ->MSK를 AND 한다.
BUN SH4 I -> SH4의 간접 번지로 이동
서브루틴 파라미터와 데이터 링키지 (X OR Y연산)
OR라는 서브루틴이 있다.
OR 서브루틴을 보면 LDA OR I를 또 하는데 이미 AC에는 X의 값이 있고 그걸 변수 TMP에 저장해두었다.
202 주소에주소에 있는 3AF6값을 가져와서 CMA(=not 붙이기)를 한다.
변수 TMP와 현재 AC에 있는 값을 AND 한다.
여러 개의 데이터를 복사하는 함수(memcpy() 함수)
100번지에 있는 16개의 데이터를 200번지로 보내는 것이다.
데이터가 16개 있으니 Counter는 -16부터 시작한다.
STA PTR -> PT1에 100번지 저장
ISZ MVE –> HEX 100을 증가시켜 HEX 200 실행
STA PT2 -> PT2에 200번지 저장
LOP를 보면 PT1의 저장된 주소로 가서 PT2의 저장된 주소로 저장하라는 뜻이다.
'Computer Science > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터 구조] 마이크로 프로그램 (0) | 2021.01.28 |
---|---|
[컴퓨터 구조] 입출력 프로그래밍 (0) | 2021.01.27 |
[컴퓨터 구조] 어셈블리 언어 (0) | 2021.01.25 |
[컴퓨터 구조] 기본 컴퓨터 프로그래밍 (0) | 2021.01.24 |
[컴퓨터 구조] 공통버스에 대한 제어 (0) | 2021.01.23 |