http://chortle.ccsu.edu/AssemblyTutorial/Chapter-14/ass14_2.html
답:
99<10> 과 99<10> 곱하라 : 9801<10>
각각의 피연산자 99를 표현하기 위해 몇개의 십진수 자리가 필요 합니까?: 2
곱셈의 결과를 표현하기 위해서는 몇개의 십진수 자리가 필요합니까?: 4
두N자리 십진수 정수의 곱을 표현하기위해는 최대 2N자리가 필요하다. 이 문장은 진수에 관계없이 참이다. 예를들면 N비트의 2진수정수의 곱을 표현하기 위해서는 최대 2N비트가 필요하다. 여기에 부호없는 두 8비트 정수의 곱을 종이와 연필을 쓰는 방법으로 표현해보았다. (물론 2진수 연산을 사용한다.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
10110111 B7 183<10>
10100010 A2 162<10>
-------- -- ---
00000000
10110111.
00000000..
00000000...
00000000....
10110111.....
00000000......
10110111.......
--------------- ---- -----
111001111001110 73CE 29646<10>}}}
두 8비트의피연산자는 15비트의결과를보여준다. 같은연산을 10진수그리고 16진수로도해보았다.
질문 :
일반적으로 32비트의일반레지스터가두개의 32비트정수를피연산자로가지는곱셈연산의결과를올바르게보관할수있겠습니까?
MIPS의곱셈유닛은각각 hi와 lo라고불리는 2개의 32비트레지스터를담고있다. 이레지스터들은범용레지스터(general-purpose register)가아니다. 2개의 32비트크기의피연산자가곱셈되어질때, hi와 lo 레지스터는 64 bits 크기의결과물을담고있다. 32번비트부터 63번비트까지는 hi 레지스터에있고 0번부터 31번까지비트는 lo 레지스터에있다.
부호구분을 하지 않는 곱셈명령과 2의 보수법으로 표현되어 부호를 구분하는 곱셈명령이 있다. 정수 곱셈(interger muliplication)에서는 트랩(trap)이 발생하지 않는다.
주목할점: add와 addu 명령의 경우 두 명령이 같은 작동(operation)을 실행 했다. 덧셈명령에서 "u"는 오버플로우시 트랩(trap)을 발생시키지 않는다는 의미였다.
mult와 multu의 경우는 각기 다른 작동(operation)을 실행한다. 두 곱셈명령다 트랩(trap)을 발생시키지는 않는다.
질문:
두개의 작은 크기의 정수를 곱셈하였습니다. 결과는 어디에 있겠습니까?
http://chortle.ccsu.edu/AssemblyTutorial/Chapter-14/ass14_4.html
답:
만약 결과가 lo에 다 들어갈 만큼 작다면, hi는 0이 됩니다..
우리가 작성할 대부분의 프로그램의 결과는 32비트를 넘지 않고, 만약 32비트를 넘지 않는 수 라면 곱셈의 결과는 lo에 저장됩니다.
양수 혹은 부호 없는 수의 유효비트는 가장 왼쪽에 있는(the most significant) 1을 포함해서 그 오른쪽에 있는 모든 비트를 의미한다. 예를 들어 다음은 23개의 유효비트를 가지고 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
0000 0000 0100 0011 0101 0110 1101 1110}}}
음수의 '''유효비트'''는가장왼쪽에있는(the most significant) 0을포함해서그오른쪽에있는모든비트이다. 예를들어다음은 23개의유효비트를가지고있다.dd
mult 명령은 피연산자가 2의 보수로 표현되었다고 가정한다. 프로그램의 카운터(PC)는 0x400000에서 초기화 되서 실행된다. F10(한 스텝 명령)을 다섯번 눌러보자. 다음은 실행한 프로그램의 마지막 결과를 보여주는 그림이다.
attachment:newMultRun.gif
다음과 같은 결과를 볼 수 있다.
5 × 12 - 74 = -14 = 0xFFFFFFF2
곱셈의 결과(product)는 5 × 12 = 60<10> = 0x3C 이고 lo 레지스터에 결과는 남아있다.
질문:
몫과 나머지를 계산하는 다음 십진수 정수 나눗셈을 해보자.
http://chortle.ccsu.edu/AssemblyTutorial/Chapter-14/ass14_9.html
답:
99 / 2 = 49 R 1
99 / 50 = 1 R 49
N자리 정수가 나눠지면 N자리 몫과 N자리 나머지, 즉 2가지 결과가 나온다. 32비트 피연산자를 나누었을때 (보통은) 두개의 32비트의 결과가 나온다. MIPS는 결과를 hi와 lo레지스터에 저장한다.
attachment:HiLoDivkor.GIF
정수나눗셈을 위한 MIPS명령이다. u는 결과와 피연산자가 부호없는 정수라는 것을 의미한다
http://chortle.ccsu.edu/AssemblyTutorial/Chapter-14/ass14_10.html
답: mflo $8
mflo 와 mfhi는 정수 나눗셈의 결과를 구하기 위해 쓰입니다.
또 다른 예제이다: (y + x)/(y - x) 를 구하고 싶다고 하자. x는 $8에 있고 y는 $9 에 있다. 몫은 $10에 그리고 나머지는 $11에 있어야 한다. 정수는 2의 보수표현식으로 표현 되었다고 가정한다.
예제프로그램이다. 안타깝게도, 빈칸을 채워 넣어야한다.
자바하는놈 공부좀 쉬엄쉬엄하니까 또 마음이 흔들립니다. 한말씀 감사. 이것참 옆에서 누가 공부하란사람덜도 없고.
자바하는넘 얼마 안남았잖어 조금만 더푸쉬해.. 공부는 해보면 집중인거 같에.. 10분을 보더라도 집중해서 할 수 있으면 좋지... 공부잘하는 사람들은 그걸 장시간 동안할 수 있는 사람들이고... 우ㅤㅉㅐㅎ든 화이팅
javaseki the monitor what i'm watching at now is ridiculous, its resolution seems like 800x600, i cant even see whole page at once.. lol
자바하는놈 형, 포트폴리오같은거 어떻게 만드는지 나와있는 페이지같은거 가지고 계세요? 구글링도 안돼고 지식즐도 모르고.. -_-
자바하는놈 그리구..그 화학 어플리케이션 아주 잘쓰고있어용.. 워드로 OLE(오래전에 들어서 용어가 맞는지.. object linking embedding..이었나.. 한국서 고등학교에서 배울땐 뭔소린지도 모르고 그랬는데..ㅎㅎ)돼고 아 아주 좋아요.. ㄳ
자바하는넘 글쎄 그게 학교에서 개발방법론 배울때 할 지 모르는데 스펙만들고 아키텍춰설명하고 그게 딱 abc식으로 정해진것 은 없어서... 오픈소스중에서 작으면서도 활발한 프로젝트보면 사이트도 잘만들어 놓았고 생각도 명확하게 제시하는데 그런거 참조해 보지... apache mina한국분이 주참여자인가보던데 그런 사이트 보면서 어떻게 자기가 생각하는 걸 정리하고 설명하고 구현했는지를 보여주면 좋은가 ^^
프로젝트가 무슨 문제를 해결해주는가? 왜 이런식으로 구현했는가? 장점과 단점? 유지보수는 어떻게 할것인가 그런생각들을 가지고 정리해서 남한테 의견 제시할 수 잇으면 좋은 포트폴리오라고 할 수 있나.. 나도 함 찾아보지. 열공.
Contents
1. 14 정수의 곱셈 나눗셈과 산술이동 명령
1.1. 2배가 되는 자릿수
1.2. 유효비트(Significant bits)
1.3. 프로그램 실행
1.4. div와 divu 명령
1.5. 예제 프로그램3
1.6. 14장 끝
1.7. 수다
1. 14 정수의 곱셈 나눗셈과 산술이동 명령
1.1. 2배가 되는 자릿수
1.2. 유효비트(Significant bits)
1.3. 프로그램 실행
1.4. div와 divu 명령
1.5. 예제 프로그램3
1.6. 14장 끝
1.7. 수다
Recent Posts
Archive Posts
Tags