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
더하기의 어셈 소스 차이
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 |