태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

티스토리 툴바



2009/05/11 18:29

어셈블리어

/************* main.c *******************************/

char           c = 0xff;

short          s = 0xffff;

int              i = 0xffffffff;

 

extern        void inc_size(), dec_size();

 

main() {

                  /* type casting: increment size */

                  c = 10;

                  inc_size();

                  printf("c = %d\ts = %d\ti = %d\n", c, s, i);

 

                  c = -10;

                  inc_size();

                  printf("c = %d\ts = %d\ti = %d\n", c, s, i);

 

                  /* type casting: decrement size */

                  i = 100;

                  dec_size();

                  printf("c = %d\ts = %d\ti = %d\n", c, s, i);

 

                  i = -100;

                  dec_size();

                  printf("c = %d\ts = %d\ti = %d\n", c, s, i);

}

/******************************************************/

 

위 프로그램에서 사용되는 inc_size(), dec_size() 를 어셈블리

프로그램으로 작성하라.

 

inc_size() 함수는 8비트 전역변수인 c 16비트로 확장하여

전역변수 s 에 넣고, 또한 32비트로 확장하여 전역변수 i 에 넣는다.

 

dec_size() 함수는 32비트 전역변수인 i 16비트로 줄여서

전역변수 s 에 넣고, 또한 8비트로 줄여서 전역변수 c 에 넣는다.

 

위 프로그램이 정상적으로 실행될 경우 화면에 다음과 같은 내용이 출력된다.

$ main

c = 10  s = 10  i = 10

c = -10 s = -10 i = -10

c = 100 s = 100 i = 100

c = -100        s = -100        i = -100

 

<size.asm>

 

%include "asm_io.inc"

 

segment .data

                  extern _c

                  extern _s

                  extern _i

segment .bss

 

segment .text

                  global _inc_size

                  global _dec_size

_inc_size:

                  mov eax, 0

                  mov al, [_c]               

                  cbw                            ;byte(8bit) -> word(16bit)

                  mov [_s], ax

 

                  mov ax, [_s]

                  cwde                          ;word(16bit) -> double word(32bit)

                  mov [_i], eax

 

                  ret

 

_dec_size:

                  mov eax, 0

                  mov eax, [_i]

                  mov [_s], ax

                  mov [_c], al

                  ret

'NASM' 카테고리의 다른 글

어셈블리어 메모리공간에 저장되는 과정  (0) 2009/05/14
Bit Operations  (0) 2009/05/12
push,pop  (0) 2009/05/12
어셈블리어  (0) 2009/05/11
Trackback 0 Comment 0