관리 메뉴

FU11M00N

[어셈블리어] 어셈블리 덧셈,뺄셈,곱셈,나눗셈 본문

Programming/Assembly

[어셈블리어] 어셈블리 덧셈,뺄셈,곱셈,나눗셈

호IT 2020. 4. 15. 15:30

- PRINT_STRING

  • SASM에서 제공하는 매크로 함수
  • 문자열 출력 함수
  • 형식] PRINT_STRING 매개변수
  • 매개변수 : 출력할 곳의 주소
  • 단, 문자열 종료는 0x00로 표시

사진 1-2

 

입력 받기 공통 매크로

- GET_DEC

  • SASM에서 제공하는 매크로 함수
  • 키보드로 10진수 입력
  • 형식] GET_DEC para1, para2
  • para1 : 입력할 바이트 수
  • para2 : 입력 받을 곳으로 레지스터 또는 메모리 주소

- GET_HEX

  • 키보드로 16진수 입력
  • 형식] GET_HEX para1, para2
  • para1 : 입력할 바이트 수
  • para2 : 입력 받을 곳으로 레지스터 또는 메모리 주소

사진 1-3

- 더하기 연산 

더하기는 모든 계산의 가장 기본적인 연산

  •  형식] add para1, para2
  • para1 : 레지스터 또는 메모리에 있는 값
  • para2 : 레지스터, 메모리, 값
  • para1, para2가 모두 메모리인 경우는 허용되지 않음 • para1 = para1 + para2

사진 1-4

- 빼기 연산

더하기 연산과 문법적 형태가 동일합니다!

  • 형식] sub para1, para2
  • para1 : 레지스터 또는 메모리에 있는 값
  • para2 : 레지스터, 메모리, 값
  • para1, para2가 모두 메모리인 경우는 허용되지 않음
  • para1 = para1 - para2

사진 1-5

- 1byte 곱하기 연산

  • 어셈블리 언어에서 곱하기 연산 규칙은 조금 복잡함
  • 형식] mul para(1byte)
  • para가 1byte 일 때 : AX = AL * para • para는 레지스터만 허용
  • 곱해지는 결과는 반드시 AL 레지스터에만 넣어야 함
  • 연산 결과는 무조건 AX 레지스터로만 리턴

사진 1-6

- 1byte 나누기 연산

나누기 연산도 곱하기 연산만큼 복잡한 구조를 가졌습니다!

  • 형식] div para(1byte)
  • para가 1byte 일 때 : AX = AL / para ; AL(몫), AH(나머지)
  • para는 레지스터만 허용
  • 나누어지는 값(피제수)은 반드시 AX 레지스터에만 넣어야 함
  • 연산 결과는 무조건 AL, AH의 레지스터로만 리턴

사진 1-7

 

그럼 배운것을 토대로 어셈코드를 하나 작성해보겠습니다!

 

사진 1-8
사진 1-9

Comments