🙇‍♀️사칙연산

GET_DEC 1, al
GET_DEC 1, num

PRINT_DEC 1, al
NEWLINE
PRINT_DEC 1, num

🪐사칙연산

GET_DEC : input창에 입력을 받고 싶을 때 사용

  • 더하기 연산
    • add a, b (a = a + b)
    • a는 레지스터 or 메모리
    • b는 레지스터 or 메모리 or 상수
    • 단 a, b 모두 메모리는 x
add al, 1 ; 레지스터 + 상수
PRINT_DEC 1, al ; 1+1=2
NEWLINE
add al, num ; 에러발생
PRINT_DEC 1, al
NEWLINE

레지스터에서 변수들은 값이 아니랑 주소값을 들고 있으므로 오버플로우가 발생하여 에러가 난다 add al, [num] - 레지스터 + 메모리

mov bl, 3 ; 레지스터 + 메모리
add al, bl
PRINT_DEC 1, al
NEWLINE
add [num], byte 1 ; 메모리 + 상수
PIRNT_DEC 1, [num]
NEWLINE

변수에 상수를 더할 때는 상수의 크기까지 적어줘야 됨 변수는 그냥 주소값만 들고 있기 때문

add [num], al ; 메모리 + 레지스터
PIRNT_DEC 1, [num]
NEWLINE

빼기는 더하기와 동일하고 기호는 sub

  • 곱하기 연산
    • mul reg
    • mul bl => al * bl
    • 연산 결과를 ax에 저장
    • mul bx => ax * bx
    • 연산 결과는 dx(상위 16비트) ax(하위16비트)에 저장
    • mul ebx => eax * ebx

ex) 5 * 8 은?

mov ax, 0
mov al, 5
mov bl, 8
mul bl
PRINT_DEC 2, ax
NEWLINE
  • 나누기 연산
    • div reg
    • div bl => ax / bl
    • 연산 결과는 al(몫) ah(나머지)

ex) 100 / 3은?

mov ax, 100
mov bl, 2
div bl
PRINT_DEC 1, al
NEWLINE
mov al, ah
PRINT_DEC 1, al

🪐쉬프트 연산과 논리 연산

  • 쉬프트(shift) 연산, 논리(logical) 연산
    • 산술쉬프트에서 최상이 비트는 유지된다
mov eax, 0x12345678
PRINT_HEX 4, eax
NEWLINE
shl eax, 8
PRINT_HEX 4, eax
NEWLINE
shr eax, 8
PRINT_HEX 4, eax
NEWLINE

총 연산결과

12345678

34567800

345678

  • 쉬프트 연산의 장점
    • 곱셉/나눗셈
    • 게임서버에서 objectID를 만들어 줄 때
  • 논리연산
    • not and or xor
  • 결혼업체 예시
    • 조건 A : 잘생겼다
    • 조건 B : 키가 크다
  • not A : 잘생겼다의 반대 -> (0이면 1, 1이면 0)
  • A and B : 잘생겼고 and 키도 키고 -> 둘 다 1이면 1, 아니면 0
  • A or B : 잘생겼거나 or 키가 크거나 -> 둘 중 하나라도 1이면 1, 아니면 0
  • A xor B : 잘생기고 작거나 or 못생기고 크거나 -> 둘 다 1이거나 둘 다 0이면 0, 아니면 1
  • 비트 논리 연산자!

mov al, 0b10010101 mov bl, 0b01111100

and al, bl ; al = al and bl
PRINT_HEX 1, al
NEWLINE

결과 : 14

not  al
PRINT_HEX 1, al
NEWLINE

결과 : eb

응용 사례 : bitflag

PRINT_HEX 1, al
NEWLINE
xor al, bl
PRINT_HEX 1, al
NEWLINE
xor al, bl
PRINT_HEX 1, al
NEWLINE

결과 : 95, e9, 95

  • 동일한 값으로 xor 두번하면 자기 자신으로 되돌아오는 특성
  • 암호학에서 유용하다! (value xor key)
xor al, al
PRINT_HEX 1, al

결과 : 0

  • xor로 같은 값을하면 그 수는 0이 된다

태그:

카테고리:

업데이트: