전공 62

[시스템 프로그래밍 10강] Shift and Rotate 명령 및 활용

덧셈 나눗셈을 하려 하는데 그 전에 쉬프트 연산자를 먼저 알아보자.Shift and Rotate Instructionsx86 프로세스는 쉬프트 연산에 많은 명령어 세트를 제공한다.모두 OVERFLOW와 캐리플래그에 영향을 준다.2가지 형태의 쉬프트 연산을 제공한다.1. Logical Shifts and Arithmetic Shifts1. Logical shift우리가 익히 알고 있는 쉬프트 연산이다.8비트의 데이터가 있다고 할 때 한칸씩 우리가 원하는 방향으로 이동 시키고 새로 생성된 비트를 0으로 채우는 것이 특징이다.빠져나온 비트가 캐리 플래그로 이동한다.LSB가 빠져나왔고 MSB는 비어있어서 0으로 채워진다.예시 11001111에 대한 단일 논리적 오른쪽 이동으로 01100111이 생성된다.2. A..

9-2강 Conditional Control Flow Directives (조건부 제어 흐름 지시어)

Conditional Control Flow Directives조건부 제어 흐름 지시어(우리는 이거 쓰면 안돼요!)MASM을 만든 MS에서 조금 더 편하게 하라는 의미로 만들어 준 것이다.high level에 있는 기능을 MASM에서 제공하는 것이다.Directive는 기계어로 번역이 안됨 → 대응하는 기계어가 없어요..! 1. Creating IF Statements.IF, .ELSE, .ELSEIF, and .ENDIF directives또한 연산자도 이런식으로 사용이 가능하다어셈블링 하기 전에 MASM이 어셈블리어로 바꾼 것이다 강조 !! CPU에서 처리하는 게 아니라 번역해주는 것입니다. 기계어 아니고 어셈블리어로 번역!! 과제를 할 떄는 CONDITIONAL CONTROL FLOW Directi..

9 -1 강 Conditional Loop Instructions (LOOPZ,LOOPE) Conditional structure(조건부 구조 예시코드!)

Conditional Loop Instructions(조건부 루프 명령)오늘은 조건부 loop에 대해 다뤄보겠다.loop 복습해보면 : ecx레지스터를 카운터로 사용해서 하나씩 줄여가면서 반복을 진행했다.1. LOOPZ and LOOPE InstructionsLOOPZ : 제로플래그가 세팅 되어있을떄만 Loop 명령처럼 동작하는 명령어이다.LOOPE : LOOPZ와 완전히 동일한 옵코드를 공유한다. (JUMPZ와 JUMPE가 같은것과 같은 개념이다.)두 명령의 특징이 명령은 Loop명령 처럼 작동하지만 Zero flag를 확인해서 0일때만 레이블로 점프를 진행합니다.ECX가 0이 아니고, 제로플래그가 세팅되어있을 때 루프 실행한다.만약 제로플레그가 0이 아니거나 ECX 레지스터가 0이 아닌 경우에는 점프..

[시스템 프로그래밍 8-2]Conditional Jumps (조건부 점프 명령)

1. Conditional Structuresx86 명령어 집합에는 명시적인 상위 수준 논리 구조가 없지만 비교와 점프의 조합을 사용하여 구현할 수 있습니다두 단계1. CMP, AND 또는 SUB와 같은 연산은 CPU 상태 플래그를 수정합니다. 2. 조건부 점프 명령은 플래그를 테스트하고 새 주소로 브랜치를 생성합니다.예제 1(jz)jz (zero flag가 0인 경우에 해당 레이블로 점프)cmp eax, 0 jz L1 ; jump if ZF = 1 . . L1:예제 2 (jnz)AND 명령은 DL 레지스터에서 비트 단위 AND를 수행하여 0 플래그에 영향을 줍니다0 플래그가 비어 있으면 JNZ(0이 아닌 경우 점프) 명령이 점프합니다.and dl , 10110000b jnz L2 ; jum if ZF ..

[시스템 프로그래밍 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 예시 코드..

728x90