1998.5.18 조경민

더하기의 어셈 소스 차이

i = i + 1
mov ax,1
add ax,1
mov 1,ax

i += 1
add i,1

i++
inc i
---------------------------------
C와 C++의 문자열 어셈 소스 차이

#include <string.h>
void main()
{
    char *st1="test";
    String st2 = "test";
}

st1.......
mov word ptr [bp-2], offset DGROUP:S@ +1

st2.......
push offset DGROUP:s@ + 6
lea  ax, word ptr [bp-8]
push ax
call near ptr @String@Sbctr$qpzxc   ; 생성 String(String *,char *);
add  sp,4                           ; 히프영역 확보 strcpy일어난다.

mov  word ptr [bp-8], offset @@String@
push word ptr [bp-4]
call near ptr @bdele$qpv            ; 삭제
pop  cx
------------------------------------
오버로드된 사용자 정의 함수의 어셈 코드

#include <iostream.h>
#include <iomanip.h>

// 오버로드
char abs(char num){ return num < 0 ? -num:num;};
int  abs(int  num){ return num < 0 ? -num:num;};
long abs(long  num){ return num < 0 ? -num:num;};
float abs(float  num){ return num < 0 ? -num:num;};
double abs(double  num){ return num < 0 ? -num:num;};

;char abs(char num)..........
@abs$qzc proc near
;int  abs(int  num)..........
@abs$qi proc near
;long abs(long  num).........
@abs$ql proc near
;float abs(float  num).......
@abs$qf proc near
;double abs(double  num).....
@abs$qd proc near

--------------------------------------

템플리트로 쓰여진 범용 함수 어셈 코드

templete <class T>
T abs(T num){return num < 0 ? -num;num;};

;자동으로 만들어진 함수들
@abs$qzc proc near
@abs$qi proc near
@abs$ql proc near
@abs$qf proc near
@abs$qd proc near
--------------------------------------
계승과 다태성에 대한 어셈 코드

class Date {
public:
    virtual void printOn(ostream& output);
};

class KoreaDate : public Date{
public:
    virtual void printOn(ostream& output);
};

ostream& operator << (ostream& output,Date& d)
{
    d.printOn(output);
    return output;
}

; ostream& operator
@$blsh$qr7ostream4Date proc near
생략
;  d.printOn(output);
push di
push si
mov  bx, word ptr [si]
call word ptr [bx]
add sp,4
생략
@$blsh$qr7osteam4Date endp
---------------------------------------------
인라인 함수 어셈 코드
inline int GetInt(int num){return num;}

void main()
{
    int a = 10;
    int b = GetInt(a);
}

............................
; int a = 10;
mov woed ptr [bp-2],10
; int b - GetInt(a);
mov ax, woed ptr [bp-2]
mov word ptr [bp-4],ax
---------------------------------------------
인라인 메소드 호출
inline unsigned Year(){return YY;};

; sprintf(temp,"%s %d %d",Months[Month()],Day(),Year());
push  word ptr [si+2]
mov   al,byte ptr [si +5]
mov   al,byte ptr [si +4]
call  near ptr _sprintf

'KB > C/C++' 카테고리의 다른 글

tc 라이브러리 만들기  (0) 2004.03.19
비트 연산  (0) 2004.03.19
복사생성자  (0) 2004.03.19
변수와 함수의 선언 범위  (0) 2004.03.19
\f 와 \r의 차이점 double과 float의 차이점  (0) 2004.03.19

+ Recent posts