전체 글 223

[시스템 프로그래밍 8-1]Boolean and Comparison Instructions (어셈블리어에서 불린 연산자)

Boolean and Comparison Instructionsif와 else에 대해서 공부하기 전에 미리 boolean 연산자에 대해서 보겠다.인텔 명령어 세트에는 이미 부울 연산 명령어가 포함되어있다.이 표에서는 보이는 TEST연산은 아마 익숙치 않을텐데 간단하게 설명하면 AND와 같은 연산인데 결과를 저장하지는 않는 것이다. 뒤에서 왜 쓰는지 보겠다. The CPU Status Flags부울 명령은 Zero, Carry, Sign, Overflow, and Parity flags 에 영향을 준다.작업 결과가 0과 같으면 0 플래그가 설정됩니다.캐리 플래그는 연산이 대상 피연산자의 가장 높은 비트의 캐리를 생성할 때 설정됩니다.Sign 플래그는 대상 피연산자의 상위 비트의 복사본입니다.오버플로 플래그..

[시스템 프로그래밍 7-3] Irvine32 Library 정리

중간고사 범위 : Stack 과 프로시저까지 (슬라이드 25까지)이 글은 시험범위가 아닙니다. 개인이 만든 라이브러리에 대해서 정리한 글 입니다. 이 책의 저자가 Irvine32 Library 를 개인적으로 만들었습니다. 따라서 우리는 실습을 이 라이브러리를 이용할 것입니다. 그러나 이것을 암기하는 것은 불 필요하므로 저는 이 글을 과제를 진행할 때 지속적으로 참고할 목적으로 만들었습니다.왜 이걸 하냐면 우리가 printf를 하려면 상위 언어에서는 printf해주면 됐지만 어셈블리 언어에서는 print하나 하는데도, 메모리에 저장된 값을 해석해서 하나하나 그것에 해당하는 함수를 만들어 줘야 하기 때문에 우리는 그것정도는 미리 구현해 놓은 라이브러리를 사용한다.printf(”%d”,126); 을 예시로 보..

[시스템 프로그래밍 7-2] 프로시저(Procedures)와 USER OPERATOR

프로시저일반적으로 서브루틴이라고 하는 것을 어셈블리어에서는 프로시저라고 부른다.1. PROC Directive프로시저 끝에는 return 이 와야한다. (ret)프로시저는 PROC및 ENDP 지시어를 사용해서 선언된다.!시작 프로시저 이외에는 다른 프로시저를 생성하는 경우 ret명령으로 끝낸다. ret은 cpu가 프로시저가 호출된 위치로 돌아가도록 강제해준다.main 프로시저와 그외 프로시저 예시프로시저 내부에서 Label기본적으로 레이블은 레이블이 선언된 프로시저 내에서만 표시된다. 이 규칙은 JMP 와 loop명령에 영향을 미친다.예외사항 : 만약 전역 label을 만들고 싶다면 이름 뒤에 이중 콜론(::)으로 식별되는 전역 레이블을 선언하여 이 제한을 해결할 수 있습니다:프로그램 설계 측면에서 프로..

[시스템 프로그래밍 7강]Stack and Push Operation in a Assembly

Stack Operationsstack data structure대표적인 LIFO 구조이다.그동안 알고있던 건 어플리케이션의 스택이고 여기서 다루는 스택은 runtime 스택이다.런타임 스택CPU의 하드웨어에서 직접 지원된다.프로시저를 호출하고 프로시저를 반환하는 매커니즘에서 필수적인 부분이다.메모리의 한 블럭을 스택으로 사용메모리의 일정 부분을 스택으로 사용한다. (스택 세그먼트 있다.)즉 시스템 수준에서 작동해서 서브루틴 호출을 처리한다.프로시저란 서브루틴을 프로시저라고 부른다.서브루틴 : 명령어들이 모여있는 메모리 블록 즉 쉽게 생각하면 원시적인 수준의 함수이다.런타임 스택은 서브루틴 호출을 처리한다.1. Runtime Stack (32-Bit Mode)CPU에서 ESP(스택포인터)레지스터를 사용해..

[시스템 프로그래밍 6-3] 어셈블리어 JMP와 LOOP명령어

JMP and LOOP Instructionscpu는 명령을 순차적으로 로드하고 처리를 하지만, 그에 반해 각각의 프로그램에 들어간 명령어들은 조건부로 동작할 수 있다.CPU 상태 플래그(Status flag) 값에 따라 프로그램의 컨트롤 위치를 변경 할 수 있다.어셈블리 언어 프로그램은 조건부 명령어(conditional instructions)를 사용하여 IF 문 및 루프와 같은 high-level 상태를 구현합니다.각 conditional instruction은 컨트롤을 다른 메모리 주소로 이동(점프) 를 할 수가 있다.브랜치 또는 컨트롤 변경(transfer of control)은 명령의 실행 순서를 변경하는 방법이다.우리는 2가지 타입의 type of transfer방식을 제공한다.1. Unco..

[시스템 프로그래밍 6-2] 어셈블리어 데이터 관련 연산자와 간접 주소방식

데이터와 관련된 연산자(operators)와 Directives 데이터와 관련된 연산자와 directives들은 자체적으로 기계어와 1대1로 대응되는 명령어는 아니다. - 즉 실행 가능한 명령어가 아니다. 대신 어셈블러에 의해 해석된다. 데이터의 크기에 대한 정보를 제공하거나 주소에 대한 정보를 제공한다. 이것 자체로는 기계어로는 번역이 되지는 않는다. 다른 구문들과 함께 사용이 됨으로써 기계어로 번역이 되는 것이다. 1. OFFSET Operator offset이란 해당하는 데이터가 들어있는 데이터 세그먼트의 시작 부분부터 레이블(label)까지의 거리(byte)를 나타낸다. 이 그림의 의미는 myByte는 사실 Offset에 불과하고, 우리는 offset값에 이름을 붙힌 것 뿐이다. 1-1 예시 코드..

[시스템 프로그래밍 6 -1] 어셈블리어 더하기 빼기 연산과 그에 따른 flag 세팅

더하기 빼기 (Addition and Subtraction)1. INC and DEC InstructionsINC (increment) instruction adds 1 to operandDEC (decrement) instruction subtracts 1 from operandoperand로 memory 또는 register사용 가능.data myWord WORD 1000h .code inc myWord ;myWord = 1001h (메모리 값 감소) mov bx,myWord dec bx ;BX = 1000h (bx레지스터 감소)연산을 통해서 flag가 세팅이 된다.Overflow, Zero, Sign, Auxiliary Carry, and Parity flags 들은 피연산자의 값에 따라 변화된다...

[시스템 프로그래밍 5-3] 데이터 전송지침 , 피연산자 유형(Operand Types)

데이터 Transfer Instruction (데이터 전송 지침)소개예를 들어 메모리에서 레지스터로 옮기는 예시고수준 언어에서는 컴파일러가 엄격한 데이터 타입 검사를 수행한다.변수 및 데이터 불일치와 같은 오류를 방지하는 데 도움이 된다.사실 기계 (CPU의 관점) 에서는 데이터의 타입은 의미가 없다.(다 같은 2진수이기 때문에) 따라서 CPU 관점에서는 타입은 생각하지 않고 size만이 중요하다.반면 어셈블러를 사용하면 프로세서 명령어 집합이 요청하는 작업을 수행할 수 있는 한 원하는 모든 작업을 수행 할 수 있다. ( 예 : float 형에 int 형으로 연산을 할 수도 있다. - 가능하지만 엉뚱한 결과가 발생)어셈블리 언어는 데이터 저장 및 머신별 세부 사항에 주의를 기울여야 한다.(프로그래머의 역..

[디지털 논리 4강] 논리 게이트, 트렌지스터 전압 파형 및 타이밍 다이어그램

연산자거의 모든 프로그래밍 언어(예: C/C++, Java, Python)는 비트 연산과 논리 연산을 지원합니다비트 연산자 & (비트 AND), | (비트 OR), ^ (비트 XOR), ~ (비트 NOT), ... 예: a = 5 & 7; // a = 5 논리 연산자(부울 연산자라고도 함) &&(논리 AND), ||(논리 OR), !(논리 NOT) 참고) 파이썬에서는 (논리적 NOT)이 아닌 (논리적 AND) 또는 (논리적 OR)을 사용합니다. 예: a = 5 && 7; // a = 1 예: is_valid_idx = (idx >= 0) && (idx < array_size);이상적인 로직 게이트 NOT gate, AND gate, OR gate1. NOT gate논리적 부정을 구현하는 논리적 게이트표기..

[시스템 프로그래밍 5-2] 어셈블리어 기호상수 Symbolic Constants

Symbolic Constants (기호 상수)C나 C++을 쓴 사람들은 #define PI 3.14 와 같이 해본 걸 볼 수가 있을텐데, 이것은 우리는 Symbolic Constants라고 불렀다. (전처리 과정을 거쳤다.) 즉 기호상수는 indentifier(Symbol)을 정수 표현식 또는 일부 텍스트와 연결하여 생성된다.별도의 저장공간을 예약하지 않는다.프로그램을 스캔할 때 어셈블러만 사용한다.런타임중에 변경할 수 없다.1. 동일 서명 지시문 (Equal-Sign Directive)심볼 이름이 정수 표현식에 연결된다.사용 : name = expression일반적으로 표현식은 32비트이 정수값이다.프로그램이 어셈블 될 때 전처리 단계에서 모든 이름 항복이 표현식으로 대체된다.이건 마이크로 소프트의 ..

728x90