본문 바로가기

Hardware/assembly language

(5)
5장(프로시저) 6판에서는 5장 처음에 라이브러리가 나오지만 7판에서는 바로 스택이 나온다. ​ ​ ​ 스택 연산 ​ 스택은 LIFO 구조라고도 부른다. ​ 스택은 스택 포인터 레지스터라고 하는 ESP 레지스터를 사용하여 CPU가 직접 관리하는 메모리 배열이다. ​ ESP 레지스터는 스택에 있는 어떤 위치에 대한 32비트 오프셋을 저장한다. ​ ESP는 항상 스택의 맨 위에 추가된, 즉 PUSH 된 마지막 정수를 가리킨다. ​ Push 연산 32비트 Push 연산은 스택 포인터를 4씩 감소시키고 값을 스택 포인터가 가리키는 스택 위치로 복사한다. ​ 16비트면 2씩 감소하겠네 ​ POP 연산 ​ POP 연산은 스택에서 값을 제거한다. ​ 값이 스택에서 팝된 후에 스택 포인터는 스택의 그 다음 높은 주소를 가리키도록 증가..
4장(데이터 전송, 주소지정과 산술연산) 피연산자 유형 ​ 직접 오프셋 피연산자 ​ .data ​ arrayB BYTE 10h,20h,30h,40h,50h ​ .code ​ mov al, arrayB ;10h ​ mov al.[arrayB+1] ;20h ​ arrayB+1 과 같은 수식은 상수를 변수의 오프셋에 더하여 유효 주소 라고 하는 것을 계산해낸다. ​ 유효 주소를 대괄호로 둘러쌓은 것은 그 주소의 메모리 내용을 얻기 위하여 주소 수식을 역참조 함을 나타낸다. ​ MASM 에서는 대괄호가 필수 사항은 아니다. ​ mov al, arrayB+1 = mov al,[arrayB+1] ​ ​ .data ​ arrayW WORD 100h, 200h, 300h ​ .code ​ Mov ax, arrayW ;100h ​ Mov ax, [arrayW+..
3장(어셈블리 언어의 기초) 정수 상수(integer constant) ​ 정수 상수는 선택사항인 부호, 한 자리 이상의 숫자와 선택사항인 숫자의 밑을 나타내는 [진수(radix)라고 부르는] 접미 문자로 구성된다. [ { + | - } ] digits [radix] ​ 진수가 없으면 정수 상수는 10진수로 간주한다. ​ 문자로 시작되는 16진수 상수는 어셈블러가 식별자로 해석하지 않도록 맨 앞에 0을 넣어야 한다. ​ 정수 수식 ​ 정수 수식은 정수 값과 산술 연산자를 포함하는 수학식이다. ​ 책에는 우선순위 해서 나열 되어있지만 다 필요 없고 마지막에 나오는 이 말만 명심하자. ​ 연산의 순서를 명확히 하기 위해서 수식에 괄호를 사용하라. 그러면 우선순위 규칙을 기억할 필요가 없다. 실수 상수 ​ 실수 상수는 10진 실수 또는 ..
2장(x86 프로세서 구조) 기본 마이크로컴퓨터 설계 ​ CU(Control unit): 기계 명령어를 실행 하는데 수반되는 단계들의 순서를 조정한다 ​ ALU(Arithmetic logic unit):덧셈, 뺄셈 AND OR NOT 와 같은 논리 연산을 수행한다 ​ 데이터에 대한 모든 처리는 CPU 내에서 이루어지며, 메모리에 있는 프로그램은 CPU로 복사되어야 실행할 수 있다. ​ 데이터 버스: 명령어와 데이터를 전송한다. ​ 입출력 버스: 입출력 장치 간에 데이터를 전송한다. ​ 제어 버스: 시스템 버스에 부착된 모든 장치의 동작을 동기화하기 위하여 2진 신호를 사용한다. ​ 주소 버스: 현재 실행 중인 명령어가 CPU와 메모리 간에 데이터를 전송 할 때 명령어와 데이터의 주소를 가지고 있다 ​ ​ 명령어 실행 사이클 ​ 기계..
1장(기본 개념) 좋은 질문 X86 프로세서는 공통의 기계어를 이해한다. 어셈블리 언어는 기계어와 일대일 대응관계를 갖는다. 레지스터(Register): 연산의 중간 결과를 저장하는 CPU에 있는 이름이 부여된 저장 공간이다. 어셈블리 언어는 이식성이 있는가? 소스 프로그램을 컴파일하여 다양한 컴퓨터 시스템에서 실행될 수 있는 언어를 이식성이 있다고 말한다. 어셈블리 언어는 특정 프로세서 계열용으로 만들어졌기 때문에 이식성이 없다. ​ ​ 1.2 가상 기계 개념 ​ 컴퓨터는 대개 컴퓨터 고유의 기계어로 작성 된 프로그램을 실행할 수 있다. ​ 기계어의 각 명령어는 비교적 적은 수의 전자회로를 사용하여 수행할 수 있을 정도로 단순하다. 이 언어를 L0라고 부른다. ​ L0은 숫자로만 이루어져 있기 때문에 작성하는데 많은 어..