data 섹션은 초기화된 데이터나 상수를 선언하는데 사용된다. 이 데이터들은 프로그램이 실행되는 동안 변경되지 않는다. data 섹션에서 상수, 파일이름, 버퍼 사이즈 등을 선언할 수 있다.data 섹션을 선언하는 구문은 다음과 같다.bss 섹션은 변수를 선언하는데 사
어셈블리 프로그램의 세 가지 섹션에 대해 배웠다. 이 섹션들은 다양한 메모리 세그먼트들을 표현한다.흥미롭게도, section 키워드를 segment로 바꾸어도 동일한 결과를 얻을 수 있다.구분된 메모리 모델은 시스템 메모리를 독립된 세그먼트의 그룹으로 나눈다. 이 독립
프로세서 동작은 대부분 데이터 처리와 관련이 있다. 이 데이터는 메모리에 저장되고 메모리에서 불러올 수 있다. 하지만, 메모리에서 데이터를 읽고 저장하는 것은 데이터 요청을 컨트롤 버스와 메모리 스토리지 유닛으로 보내고 다시 같은 채널을 통해 데이터를 받는 복잡한 처리
시스템 콜은 사용자와 커널 사이의 인터페이스를 위한 API이다. 우리는 이미 시스템 콜을 사용했다. 스크린에 출력하는 sys_write과 프로그램에서 탈출하는 sys_exit가 시스템 콜이다.macOS의 시스템 콜 번호는 리눅스에서 사용하는 시스템 콜 번호와 다르다.(
대부분의 어셈블리어 명령어는 처리할 피연산자가 필요하다. 피연산자 주소는 처리할 데이터가 저장된 위치를 제공한다. 일부 명령어는 피연산자가 필요 없지만, 다른 일부 명령어들은 한 개, 두 개, 또는 세 개의 피연산자가 필요하다.명령어가 두 개의 피연산자가 필요한 경우,
NASM은 변수 저장 공간을 할당을 위한 다양한 define directive(지시어)를 제공한다. define directive(지시어)는 저장 공간의 할당을 위해 사용된다. 하나 또는 그 이상의 바이트를 초기화하는데 사용된다.초기화 된 데이터를 저장 공간에 할당하는
NASM에서 상수를 정의하는 몇가지의 지시어가 있다. 이미 EQU 지시어를 이전 장에서 사용했다. 다음 세 가지 지시어에 대해 다루어 볼 것이다.EQU%assign%defineEQU 지시어는 상수를 정의하는데 사용된다. EQU 지시어 구문은 다음과 같다.예를 들어,어셈
INC 명령어는 피연산자를 1만큼 증가시키는데 사용한다. 레지스터나 메모리에 위치한 단일 피연산자를 처리한다.구문INC 명령어의 구문은 다음과 같다.destination 피연산자는 8비트, 16비트, 32비트가 될 수 있다.예제DEC 명령어는 피연산자를 1만큼 감소시키
프로세서 명령어 세트는 AND, OR, XOR, TEST, NOT 명령어를 제공한다. 이 명령어들은 프로그램의 필요에 따라 비트를 test, set, clear한다.명령어들은 다음과 같다.모든 경우의 첫 번째 피연산자는 레지스터나 메모리에 위치한다. 두 번째 피연산자는
어셈블리어에서 조건부 실행은 여러개의 반복문과 분기 명령으로 구현한다. 이 명령어는 프로그램의 조작 흐름을 변경할 수 있다. 조건부 실행은 두 가지의 시나리오가 있다.조건 명령어에 대해 이야기하기 전에 CMP 명령어에 대해 먼저 이야기하자.CMP 명령어는 두 개의 피연
JMP 명령어를 반복문 구현에 사용할 수 있다. 예를 들어, 다음 코드는 loop-body를 10번 실행할 수 있다.하지만, 프로세서 명령어 세트에 반복을 구현하는 loop 명령어가 포함되어 있다. 기본 loop 명령어의 구문은 다음과 같다.여기서, label은 JMP
어셈블리어 프로그램은 크기가 큰 경향이 있으므로 프로시저 또는 서브루틴은 어셈블리어에서 매우 중요하다. 프로시저는 이름으로 구분된다. 가장 먼저 프로시저 이름을 쓰고, 다음에 프로시저가 수행할 작업이 기술된 프로시저 바디를 작성한다. 마지막으로 return문으로 프로시