deer-develop / study

2 stars 0 forks source link

4장 개발하다보면 어셈블리어 배우게 된다는 거 괴담인 줄 알았는데... #23

Open hyewoncc opened 4 months ago

hyewoncc commented 4 months ago

4.1.2 언어

6장에서 그 이유를 살펴보겠지만, 기호 기계어는 어셈블리어(assembly language)라 부르며, 그 언어를 2진 코드로 번역하는 프로그램은 어셈블러(assembler)라 한다
p78

어셈블리어 그냥 소수의 변태들이 배우는 그것. 으로만 알고 있었는데 이런 거였구나 했어 ㅋㅋ

4.2 핵 기계어 (4.2.1 배경 - 주소 지정 )

따라서 A에 어떤 값을 설정하면 그와 동시에 매우 다른 두 가지 후속 작업을 준비하는 것과 같은 효과가 나는 셈이다. 즉, 그 후속 작업이란 선택된 데이터 메모리 레지스터를 조작하거나, 선택된 명령어로 무언가를 하는 것이다. 어떤 작업을 할지 (또는 안 하게 될지)는 다음에 이어지는 핵 명령어로 결정된다.
p 83

이 말이 처음에 전혀 이해가 안갔는데... 그림 4.3를 보고 추측만 했어. 내 이해가 맞는지 모르겠네.
메모리 접근 예제에서 A에 17이라는 값을 설정하고, D에 이 값을 넣잖아. 이게 '선택된 데이터 메모리 레지스터를 조작했다' 는 건가?
선택된 명령어로 무언가를 한다는 것은 이해 못함 ㅠ

4.2 핵 기계어의 그림 4.4

의사코드에서 if (i > R0) goto STOP 이면 시작하자마자 STOP이 될 것 같은데, 어떻게 루프를 도는 것인지...

4.3 핵 프로그래밍

또한 이 프로그램의 마지막에는 무한 루프가 있는데, 이는 핵 프로그램을 종료할 때 권장되는 방법이다. ...무한 루프를 의도적으로 넣으면 프로그램 실행이 완료된 이후에 CPU의 연산을 제어하고 억제할 수 있다.
p 97

책에서도 다음 장에서 자세히 설명한다고 말하긴 하지만, 프로그램을 종료하려면 무한 루프를 넣으라니 내 세계관에선 성립하기 어려운 개념이다... 위에 코드를 읽어도, 그럼 @END 와 JMP 사이를 무한히 돌아서 종료가 안되는 거 아닌가? 하는 생각이..

갑자기 난이도가 확 뛴 것 같아서 큰일났다 싶네요 ~~

myeongjae-kim commented 4 months ago

혜원: 자바 컴파일 코드 뜯어보는 사람이랑 어셈블리어 배우는 사람은 변태같은 느낌.. 둘 다 이상하다. 어셈블리어는 이상한 사람들이 배우는건줄 알았다. 어셈블리어가 뭔지 이제 알았다.

도저히 책이 이해가 안가서 오래 읽었다.

Figure 4.3의 코드 이해가 안 된다.

명재: A register가 M=D 코드에 메모리 주소로서 사용되는 것 같다. 어셈블리에 나타나진 않지만 A 레지스터의 역할이 숨어있음.

혜원: 루프 도는것도 모르겠다. Figure 4.4.

R0의 정체를 알고 나니까 이해했다.

혜원: 프로그램을 종료하는데 무한루프를 돌으라고?? 납득이 안되는데.

3장은 좀 어렵다 생각했는데 4장은 많이 어렵다. 내가 몇%를 이해했는지도 파악하지 못하겠다.

명재: 운영체제가 무한루프 도는 프로그램을 종료하게 하는 식으로 작동하게 될 것 같은데?

덕수: 7번정도 읽으면 이해가 될거다. 혜원: 수행이 부족했군