본문 바로가기

Archived(CSE Programming)/기타

MIPS assembly PR_ 문자열로 숫자 입력받아 처리하기


문제.





해결


https://github.com/YoonShinWoong/MIPS_Assembly_Programming


해결 알고리즘은 위의 구현순서 5단계에 맞춰 처리한다.


1. 문자열을 입력 받아서 while문을 통해 '.' 을 포함하고 있는지 아닌지를 판단한다.

2. '.' 을 포함하고 있다면 실수 처리, 그렇지 않다면 정수 처리


------------------------------------------------------------------------------------------------------------------------------------

실수처리

3. '.'이 포함된 위치를 레지스터에 저장해두고, '.' 전 까지 정수값을 *10 하면서 가져와 더해둔다(실수의 정수부).

단, -는 -1을 계속 곱해준 다음 값을 더해줘야한다.


4. '.'이 포함된 다음위치부터 끝까지 실수값을 *0.1해서 가져와 더한다음 0.1은 0.01, 0.001, .. 순으로 나아간다(실수의 실수부).

단 -는 -1을 계속 곱해준 다음 값을 더해줘야한다.(문자열 하나를 읽어와서 정수->실수 변환 후 0.1 곱해서 더하기)


5. div.s 를 통해 값을 나눠주고 출력 후 binary 표현으로 이동

------------------------------------------------------------------------------------------------------------------------------------

정수처리

3. 맨 끝 주소값을 레지스터에 저장해두고 정수값을 *10 하면서 가져와 더하기.

단, -는 -1을 계속 곱해준 다음 값을 더해줘야한다.


4. div를 통해 값을 나눠준 후 출력.

단 -는 -1을 계속 곱해준 다음 값을 더해줘야한다.(문자열 하나를 읽어와서 정수->실수 변환 후 0.1 곱해서 더하기)

 

5. binary 표현 이동

------------------------------------------------------------------------------------------------------------------------------------


6. binary는 +, -를 구분후 sing bit를 출력후 while 문을 돌리는데 2^31을(sll로 만들기) 가져와서 & 연산 후 나온 mask 값을

/mask 해서 출력해준 다음 mask bit를 srl 1bit 처리 해준다.


7. hex는 rol로 8n bit씩 옮겨서 4bit 씩 출력해야하므로 lb, sb로 처리해주는데 단 첫 4글자와 뒷 4글자로 나뉘어 처리한다.

7-1. rol 8n bit 이동 후 rol로 28 bit 이동시켜서 lb, sb 해주면 첫 4글자를 얻어올 수 있고 이를 출력처리.(10 미만 / 10 이상 ABCDEF)

7-2. sll 현재 28 bit 이동 후 rol로 4bit 이동한 뒤 lb, sb 해주면 뒷 4글자를 얻어올 수 있고 이를 마찬가지로 출력처리. (10 미만 / 10 이상 ABCDEF)

7-3. 이렇게 8n bit씩 옮기는 것을 32까지 처리 후 40이 될때 종료 


'Archived(CSE Programming) > 기타' 카테고리의 다른 글

R에 대한 소개 및 기본 문법  (0) 2020.02.20