성엽이
KKIMSSI
성엽이
전체 방문자
오늘
어제
  • 분류 전체보기 (454)
    • :) (2)
    • C프로그래밍이론 (9)
    • C++프로그래밍 (64)
      • STL (1)
    • C# (2)
    • Visual studio 10.0 (9)
    • AT91SAM7S256 (21)
    • 논리회로 (14)
    • AVR2560 (11)
    • TCPIP (16)
    • NetWork (4)
      • Ubuntu Linux (2)
    • Assembly (21)
    • UNIX 프로그래밍 (6)
    • RFID 분석 (1)
    • Win32 API (7)
    • Cortex-M3 (4)
    • Unity (91)
    • Flutter (9)
    • OwnProject (11)
      • It's mine (5)
      • 마인드스톰 실습 (1)
      • 보고서 자료 (2)
      • RPi B+ (2)
    • ETC (25)
      • 상식 (3)
    • MFC (40)
    • PostgeSQL (18)
    • 영상제어 (6)
      • VFW_영상처리 (1)
    • Python (0)
    • Java (30)
      • SpringBoot (2)
      • Javascript (1)
      • JSP (13)
      • Spring (8)
    • Oracle (4)
      • SQL (3)
    • HTML (6)
      • Thymeleaf (1)
      • CSS (1)
      • Bootstrap (3)
    • IDE (1)
      • VS Code (1)
    • Android (2)
    • Privacy Policy (0)
    • MYSQL (2)
      • MariaDB (2)
    • AWS (5)
    • 개인공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 관리자
  • 글쓰기

공지사항

인기 글

태그

  • MFC
  • 문자열 나누기
  • WINAPI
  • ARM Reverse Engineering
  • Boot Code 분석

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
성엽이

KKIMSSI

2013.08.28_ASM_Basic Instruction
Assembly

2013.08.28_ASM_Basic Instruction

2013. 8. 28. 11:30

------------------------ 4장 Basic Instruction -------------------------


inc and dec instructions

 

     - inc 와 dec 명령어

 


   => C 언어에서 ++ or -- 와 동일, 7F FF FF FF 가 양수의 가장 큰 수 이므로, 여기서 ++ 을 하면 Overflow 되면서 음수가 되기 때문에 EFLAGS의 SF , OF 가 1이 됨



      - neg Instruction



 => 2의 보수를 취한 것과 같음.




 연산 해보기 예제 소스 

 .386

.MODEL FLAT

ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD

include io.h

cr  equ  0dh
Lf  equ  0ah

.STACK  4096

.DATA
Prompt1  BYTE  "This program will evaluate the expression", cr,Lf,Lf
  BYTE  "    - (x + y - 2z + 1)", cr,Lf,Lf
  BYTE  "for your choice of integer values.", cr,Lf,Lf
  BYTE  "Enter value for x:  ", 0
Prompt2  BYTE  "Enter value for y:  ", 0
Prompt3  BYTE  "Enter value for z:  ", 0
Value  BYTE  16  DUP  (?)
Answer  BYTE  cr,Lf,"The result is "
Result  BYTE  6  DUP  (?)
  BYTE  cr,Lf, 0

.CODE
_start:
  output  Prompt1
  input  Value, 16
  atoi  Value
  mov  dx,ax
  
  output  Prompt2
  input  Value, 16
  atoi  Value
  add  dx,ax

  output  Prompt3
  input  Value, 16
  atoi  Value
  add  ax,ax
  sub  dx,ax

  itoa  Result,dx
  
  output  Answer

  INVOKE  ExitProcess, 0

PUBLIC  _start



Macros in IO.H

 

 => atod 는 아스키를 숫자로 바꿔주는 매크로이며, 바꾼 숫자는 자동으로 EAX 레지스터에 저장이 된다.

 => atoi 도 마찬가지로 아스키를 숫자로 바꿔주는 매크로이고, atod 와는 크기의 차이가 있다. atod 와 마찬가지로 이 값은 자동으로 AX 레지스터에 저장이 된다.

 => output 은 Null 을 만나면 종료됨.




 Multiplication Instructions

 

 mul and imul Instructions

 

 

 

 



 설명

 => mul 은 양수 곱셈을 뜻함. imul 은 정수 곱셈을 뜻함

     정수 곱셈에는 Operand(s)의 갯수가 3가지 경우가 있다. 예제를 통해 확인 할 수 있다.

     

                             

 mul           source


 imul          source

 imul          register,   source

 imul          register,   source,   immediate


 => 중요한 점은 곱셈을 했을 때, 결과값이 확장이 되는 경우가 있으므로 CPU에서 자료값의 크기를 정해둔다. 예를들어


 mul          al     => al(1byte) * bl(1byte) = ax (2byte) 

 mul          ax    => ax(2byte) * bx(2byte) = ax(2byte) , dx(2byte)

 mul          eax  => eax(4byte) * ebx(4byte) = eax(2byte), edx(2byte)

 => al 을 곱셈연산을 하면 최대 2byte 가 나오므로 ax 에 저장해야하며, 

     ax 는 ax 에 다 저장하지 못한 값을 dx 에 따로 저장해 둔다.

     eax 도 마찬가지로 저장하지 못한 값을 edx 에 저장해둔다.

     이때, dx 나 edx 에 의해서 EFLAGS 의 값이 변하는데, dx 나 edx 가 0이 되면 OF 의 값이 0 이고 0 이 아닌 값이 오면 1 이 된다. 




                                                     => DX 가 변화가 없이 0 이므로 CF, OF 가 0 이다.                                                     



                                                     => 별 특이한 점 없음.



                                                     => Operand(s) 를 3개 썼을 때, Carry 값은 무시하고 정해준 값의 자리수 만큼만 나온다.

                                                     실제로 08F2 * 1000 을 하면 22 F1 50 이 나오는데 22 는 버림

 


저작자표시 (새창열림)

'Assembly' 카테고리의 다른 글

2013.09.02_ASM_Convering Instruction  (0) 2013.09.02
2013.08.29_Division Instructions  (0) 2013.08.29
2013.08.27_EFLAGS레지스터의구조  (0) 2013.08.27
2013.08.27_ASM_APPENDIX 활용하기 and 4장 Basic Instruction  (0) 2013.08.27
2013.08.26_ASM_Constant, Instruction Operand(s) 해석  (0) 2013.08.27
    'Assembly' 카테고리의 다른 글
    • 2013.09.02_ASM_Convering Instruction
    • 2013.08.29_Division Instructions
    • 2013.08.27_EFLAGS레지스터의구조
    • 2013.08.27_ASM_APPENDIX 활용하기 and 4장 Basic Instruction
    성엽이
    성엽이

    티스토리툴바