본문 바로가기

Computer Science/컴퓨터구조

[컴퓨터 구조] 어셈블리어 예제

이 글은 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에 저장된 NBRCTR을 저장한다.

 

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() 함수)

16bit 데이터 블록의 복사

100번지에 있는 16개의 데이터를 200번지로 보내는 것이다.

데이터가 16개 있으니 Counter는  -16부터 시작한다.

 

STA PTR -> PT1100번지 저장

ISZ MVE –> HEX 100을 증가시켜 HEX 200 실행

STA PT2 -> PT2200번지 저장

 

LOP를 보면 PT1저장된 주소로 가서 PT2저장된 주소저장하라는 뜻이다.

 

 

728x90