[ 사칙연산 ]
1. 덧셈: ADD
# 먼저 sum에 10을 넣고, sum의 값고 20을 더하는 모습이다.
# 레이블 a와 b에 10과 20을 넣고 둘이 더한 값을 sum에 넣는 모습이다.
2. 뺄셈: SUB
# 뺄셈은 ADD와 별 다를 것이 없다. 같은 형식으로 사용하면 된다.
3. 곱셈
- MUL ( unsigned ) - 피연산자 1개
- IMUL ( signed ) - 1개~3개
# 상위 16비트만 사용하기 때문에 초기화 과정을 거쳐주어야 한다.
# 이렇게하면 상위 16비트는 edx 하위 16비트는 eax에 저장된다. 따라서 추후에 비트연산을 통해서 확인해보면 된다.
4. 나눗셈
- DIV( unsigned )
- IDIV( signed )
[실습]
- 두 정수를 입력받아서 덧셈, 뺌셈, 곱셈, 나눗셈(몫, 나머지)의 결과를 출력하는 어셈블리 프로그램을 작성
! 입력값의 크기는 8비트로 제한
! DIV 명령어 사용 시 -Floating Point Error 발생 시 DIV 명령어 전에 다음의 명령어 중에 하나를 사용
- CBW : Convert Byte To Word
- CWD: Convert Word
위와 같이 실행 결과가 나온다. 어셈블리도 마찬가지로 문자열에 %를 문자로 쓰고싶다면 %를 한번 더 붙여야 출력이 가능하다. 메모리와 주소에 대한 이해만 있다면 scanf 와 printf를 쓰는데는 큰 어려움이 없다.
2. 비교연산
3. 논리연산 : &&, ||
- 기계어로 직접 표현되지 않는다.
- 간접적으로 표현
- if문같은 분기문을 이용할 때 확인 가능.
4. 비트연산 : &, |, ^, !
- and
- or
- xor
5. 할당 / 타입변환
movzx (작은 -> 큰 형변환)
# 곱셈이나 나눗셈은 나뉘어서 결과가 나오는 경우가 많기 떄문에 비트연산자를 통해서 쉽게 결과를 확인할 수 있다.
'System Hacking' 카테고리의 다른 글
7일차] 분기문(if, switch) (0) | 2018.05.16 |
---|---|
6일차] 비트연산자, 논리연산, 형변환 (0) | 2018.05.16 |
4일차] 명령어(mov, lea) (0) | 2018.05.14 |
3일차] 각 메모리 공간의 데이터 표현 + 레지스터 (0) | 2018.05.11 |
2일차] 어셈블리 확인하기 (0) | 2018.05.10 |