실습3
if( eax >0 && ebx < 10 || ecx >= 2){
 ebx =1;
} else{
 ebx = 0;
}

알고리즘
1. 비교 eax와 0 비교
: eax가 0보다 같거나작을경우 (eax <=0) ecx를 비교하러 가야함.
1-1. (eax <=0)
 ecx와 2 비교
: ecx가 2보다 같거나 크면 (ecx >=2) -> ebx = 1
아니면 ebx = 0
1-2. (eax >0)
-> ebx를 10과 비교
: ebx가 10보다 작으면 (ebx <10) -> ebx = 1
아니면 ecx 비교해야한다.
-> ecx 비교해서 2보다 크면 1
작으면 0

위의 C코드를 어셈블리 언어로 표현하면 아래와 같다.


(실습코드)



이 코드를 조금 더 간략하게 표현하자면 아래와 같이도 표현할 수 있다.



(실습 코드2)



그러면 우리가 만들었던 어셈블리 코드가 실제로 C코드를 컴파일한 코드와 비교해보자.



(C코드)



컴파일 후 어셈블리어 코드를 확인해보면



(어셈블리어 코드)



코드를 보면 우리가 만들었던 것과 조금 차이는 있지만 이 코드를 보고 우리가 어떤 식으로 동작하는지 이해할 수 있는 정도는 되었다.

이번에는 switch 문을 사용한 C코드를 컴파일한 어셈블리어를 if 코드와 비교해보겠다.



(switch문 사용)




컴파일 후 어셈블리어 코드 확인



(switch문)



코드를 보면 if문과 조금의 차이는 있지만 구조적으로 보면 jmp를 사용하기에
똑같다고 볼 수 있다.

이제 반복문을 알아보겠다.
반복문을 이용한 C코드를 컴파일해서 어떤식으로 이루어지는지 먼저 확인해보겠다.



(for문)



컴파일 후 실행해보면



(실행결과)



실행결과 우리가 생각하는 반복문 실행이 되는 것을 확인 할 수 있다.

이 코드를 어셈블리어를 확인해보면



(어셈블리어 코드)



반복문 또한 우리가 공부했던 jmp 분기문을 이용해 이루어지는 것을 볼 수 있다.

그렇다면 같은 내용을 while로 구현해보겠다.



(while 사용)




(어셈블리어코드)



어셈블리어 코드에서 보면 for문과 while 문의 차이는 없었다.
반복문은 jmp 분기문을 이용해 똑같이 만들어지는 것을 확인 할 수 있다.

그렇다면 직접 반복문을 만들어보자.!

아래와 같은 반복문을 만들것이다.
ebx = 0;
eax = 1;
while(eax <= 10){
 ebx += eax;
 eax++;
}


(실습 어셈블리어 코드)

* 비교연산자
-> 비교를 하는 연산자이다. 종류로는
==       :  같다
!=        : 같지 않다.
왼쪽이 크다는 기준으로
>        : 크다.
<        : 작다
>=      : 크거나같다.
<=      : 작거나 같다

- 문자열도 비교연산자를 쓸 수 있다.  크기 비교도 한다 
: 크기 비교할 때 의미는 크지 않는데 문자마다 숫자값을 가지고 있어서 크기비교연산이 되기는한다.
   하지만 이걸 사용해서 문자 정렬을 하기도 한다.

* 수학식에서는 =  기호가 같다라는 뜻이다.
하지만 프로그래밍 언어에서 = 기호는 assignment 의미로 사용된다.

ex)
10 == 10
결과 -> True 
여기서 True는  문자열이 아니다. , 숫자 1과 같은 의미를 가지고있다. (반대로 False는 0을 의미한다.)
문자열에서는 '', "" 로 표현된다.

* bool's 논리식
 - AND(그리고) , OR(또는), NOT(아닌)

NOT 은 피연산자 하나만 온다.  (AND, OR 는 피연산자가 두개 와야한다.)

ex)
 A가 참이고 B가 참이면 결과는 참이다.
 A and B -> True   (A,B 에 보통 비교 연산자가 온다.) 

 A가 참이거나 B가 참이면 결과도 참이다. 
A or B  -> True   (A,B 둘 중 하나만 참이여도 결과는 참이다.)
 
A는 아니다.
 -> not A 
(만약 True면)  -> False


(비교연산자, bool's 연산자 예시)



* 표준 입/출력 함수
 
 - print() -> 표준 출력장치로 내용을 출력하는 함수

 - input() -> 표준 입력장치로 내용을 입력하는 함수
  - 한줄을 입력받는다.
  - 괄호 안에 문자열을 적으면 입력받기 전에 문자열을 출력해준다.
  - input된 값은 무조건 문자열이 된다. 
     (만약 숫자로 받고싶으면  정수형, 혹은 실수형으로 형변환을 해야한다.

분기문 -> 분기점을 만들어줄 수 있는 문장. (실행 흐름 제어)

* 파이썬에서의 분기문
 if 사용법
 
 if expression :   
 
 콜론을 써줘야한다. 
 if expression :
  <if block>
  ...
  ...
 -> if block의 구분 방법 : 들여쓰기로 구분한다.

if - else 사용법
 if expression:
  <if block>
 else:
  <else block>
 -> 둘중에 하나만 실행된다. else는 if문장이 참이 아니면 else blck을 실행한다.
 
다중 if 사용법
 다중 블록
 if expression:
  <if block>
 elif expression:
  <elif block>
 else:
  <else block>

* 반복문
 
 while expression :
  <while block>
 -> 조건이 참일 때 반복된다.

* 멤버 메서드
 
 해당 객체가 제공해주는 함수.
 문자열도 하나의 객체처럼 다뤄진다.

 -> isalnum()
 -> isdigit()  : 문자열에 숫자만 있는지 확인해주는 함수.

* 반복문 혹은  if문으로 block을 묶을 때 들여쓰기 간격이 일정해야한다.

* 프로그램 이란?
 - 저장된 명령어들을 일괄적으로 실행하는 것이다.

이제 지금까지 배운 내용들로 프로그램을 작성해 볼 것이다.

만들어볼 프로그램은
온도변환 프로그램이다.

특징
- 대화식 프로그램이다. 사용자가 입력하면 그에 따라 컴퓨터는 출력한다.
- 사용자가 섭씨 온도를 입력하면 화씨 온도로 변경해서 출력해주는 프로그램
- 혹은 화씨 온도를 입력하면 섭씨 온도로 출력하는 프로그램

* 알고리즘
: 문제를 해결하는 과정으로 프로그램의 동작 과정을 먼저 생각해야한다.


(프로그램 코드)


(정상적으로 출력되는 화면)


+ Recent posts