1. 사칙연산
1). 덧셈 : ADD (al, ax, eax 레지스터를 씁니다)
덧셈 예제)
[실습] a와 b를 더해서 30을 출력하시오
mov는 메모리, 메모리가 나올 수 없기 때문에 저렇게 코드를 짰습니다.
2). 뺄셈 : SUB
3). 곱셈
- MUL(unsigned) 인자가 한개
크기가 커지면 나눠서 곱해집니다
곱셉 예제)
앞에서 앞 16비트를 뭘 썼는지 모르므로 eax를 0으로 초기화 해줘야합니다
상위 edx는 왼쪽으로 16비트 밀어줘야합니다 그리고 eax값을 더하면 곱한값을 구할 수 있습니다.
- IMUL(signed) 인자가 한개부터 세개
4). 나눗셈
- DIV(unsigned)
몫과 나머지나 나뉘어서 들어갑니다.
나눗셈 예제)
나누기 예제) 100000을 46으로 나누기
나머지가 6 몫이 21739가 잘 나옴을 알 수 있습니다.
- IDIV(signed)
[실습] 두 정수를 입력 받아서 덧셈, 뺄셈, 곱셈, 나눗셈(몫과 나머지) 출력하는 어셈블리 프로그램을 작성
! 입력값의 크기는 8비트로 제한
*간과하면 안되는것들
ax에 피제수를 넣는것!
ax dx 나눠지는것을 유의할것
!div 명령어 사용할 때
- Floating Point Error 발생
- DIV 명령어 전에 다음의 명령어 중에 하나를 사용
- CBW :Convert Byte to word (ax <-al)
- CWD :Convert word to double Word(dx:ax <- ax)
- CDQ :Convert double word to quad Word(edx:eax <-eax)
'Security > System' 카테고리의 다른 글
[SYSTEM SECURITY]7.어셈블리(비트 연산, 논리연산, 형변환) (0) | 2017.10.20 |
---|---|
[SYSTEM SECURITY]6.어셈블리 (scanf) (0) | 2017.10.19 |
[SYSTEM SECURITY]4. 어셈블리 명령어(mov , lea) (0) | 2017.10.17 |
[SYSTEM SECURITY]3. 어셈블리 코드 분석 및 레지스터 (0) | 2017.10.16 |
[SYSTEM SECURITY]2. 실행파일 구조 및 메모리 (0) | 2017.10.13 |