전공/시스템 프로그래밍

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

뜨거운 개발자 2023. 5. 15. 19:58

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 Directive는 사용하지 않을 것이다.!!

자동으로 push pop해주는 명령어 use명령…!(이것도 똑같은데..>) 이런것도 편의기능이니까 편의기능을 쓰는게 목적이 아니니까 ..! 어셈블리 언어를 써봅시당!

singed와 unsigend 구분법

condtional control flag

  • MASM은 프로그래머의 변수 선언을 확인해서 어떤걸 쓸지 정한다.
  • 부호 있는 정수 비교 예시

    SDWORD를 해줬으니 Signed구나!! 이런식이다.

  • 레지스터 비교 예시
    • 메모리 비교같은 경우는 그럴 수 있는데, 그럼 레지스터 피교는 어떻게 하냐라고 하면 그냥 Unsigned라고 취급한다.

다음 예시

편한 코드(우리는 어렵게 바꾼 코드를 잘 생각해봐요)

바꾼 코드

대학 등록 예시

  • 대학생이 강좌를 등록하려고 한다고 가정해 보겠습니다.
  • 다음 두 가지 기준을 사용하여 학생의 등록 가능 여부를 결정합니다.
  • 첫 번째는 0~400점 척도를 기준으로 한 개인의 성적 평균으로, 400점이 가장 높은 성적입니다.
  • 두 번째는 수강하고자 하는 학점 수입니다.
  • .IF, .ELSEIF 및 .ENDIF를 포함하는 다방향 분기 구조를 사용할 수 있습니다.

편한 코드

바꾼 코드

if 문 포함하는 while 루프에서 .REPEAT과 .WHILE문

REPEAT 및 .WHILE 지시문

  • CMP 및 조건부 점프 명령어를 사용하여 직접 루프를 작성하는 대신 다음과 같은 대안을 제공합니다.
  • .REPEAT 지시문은 .UNTIL 지시문에 이어 런타임 조건을 테스트하기 전에 루프 본문을 실행합니다.
  • .while 지시문은 루프를 실행하기 전에 조건을 테스트합니다.

high-level

.REPEAT과 .WHILE사용하는 어셈블리 코드


Uploaded by N2T

728x90