SPARC Assembly HW#2 Use Stack Memory

이 글은 예전에 썼던 Assembly Language 과제의 연속입니다.
중간고사를 꽤 잘보고 나서 숙제 마감일을 살피니.. 얼마 안남았군요 orz
얼른 숙제를 하겠다고 10월 28일 토요일날 전자회로 수업을 마치고 나서 도서관으로 직행했습니다.

예상치도 못한 과제들의 홍수들 ㅠ_ㅠ 중간고사 끝나니까 홍수처럼 쏟아지더군요

자 우선 순위 큐를 따져 보니...... SPARC Machine에서 쓰는 Assembly 밤에 하게 되었습니다.

밤 11시 경 손을 대기 시작하였습니다. 예전에 쓴 소스코드를 가지고 그대로 접근하면 되기 때문에 어려움 없이 갈려고 했습니다.

손으로 코딩을 하고 나서 컴퓨터로 옮기는데 생각보다 시간이 많이 걸렸네요. m4 processor로 macro 치환을 하고 나서 코딩까진 괜찮았습니다.
코딩을 하니까 주석을 안달아서 자꾸 헷갈리덥니다. 역시 주석(Comment)은 만인의 행복을 위한 것이였습니다.
코딩을 다 하고 나서 주석 달려니 어마어마한 양에 하기가 싫어지더군요.
그래도 했습니다. 주석을 다 달고 나니 뿌듯했습니다.

그러나


제가 짠 Assembly Code가 최적화가 되어있지 않기때문에 최적화를 시켜줘야 하는 것이였습니다.
숙제를 내고 바로 잘려던 저에게 큰 타격을 주었습니다 ㅠ_ㅠ
nop을 없애고자 많은 노력을 기울였지만.. nop 명령어 지우는 것이 만만치 않더군요.
어떤 것은 annulled branch를 써서 아님 단순히 nop연산 전 명령어를 치환하여 없애거나 등등
그래도 끝까지 nop으로 남는 것은 딱 한개 -_-;;

nop을 완전히 없애면 점수 100점 받는것인디 (그래도 1개만 남겨도 100점 맞을듯)
주석도 만땅으로 채우고 했으니 과제를 냈습니다. 아 다행이군요.
숙제를 안봤다면 주말동안 놀다가 평일에 숙제 하다가 GG치는 사태는 막았군요 :D

어셈블리 언어는 재미있다만은, 하룻만에 숙제가 되지가 않군요.(1학년때에는 C언어 숙제를 마감 3시간 전에 시작하여 제출 1시간 전에 제출한 사례가 엄청 많았는데 -_-;;)

아래 있는 글을은 최적화 사례입니다. (숙제 한 것에서 빼왔습니다 - 어셈블리 숙제 베낄라 걱정되군요)
Anulled Branch 사용의 예
프로그램 최적화전
! loop lable (i < 10)까지 loop를 돌림
loop:
sll %i_r, 2, %l1 ! %i_r(%l0) * 4 = %l1 4의 배수로 i변수 곱해줌, Array 연산용
! Call scanf function, Array에 숫자 입력
set input, %o0
call scanf
sub %fp, %l1, %o1
! control-d누르면 scanf function의 return값이 -1이 됨
! return value가 -1이면 loop lable을 빠져 나가 cal lable로 빠져나가 연산을 하게 함
cmp %o0, -1
be cal
nop
add %i_r, 1, %i_r ! i++
! Compare %input_num & 10, 만약 10보다 작으면 loop문을 돌게 함
cmp %i_r, 10
bl loop
nop

Anulled Branch사용으로 프로그램 최적화
! loop lable (i < 10)까지 loop를 돌림
loop:
! Call scanf function, Array에 숫자 입력
set input, %o0
call scanf
sub %fp, %l1, %o1
! control-d누르면 scanf function의 return값이 -1이 됨
! return value가 -1이면 loop lable을 빠져 나가 cal lable로 빠져나가 연산을 하게 함
cmp %o0, -1
be cal
nop
add %i_r, 1, %i_r ! i++
! Compare %input_num & 10, 만약 10보다 작으면 loop문을 돌게 함
cmp %i_r, 10
bl,a loop ! annulled branch
sll %i_r, 2, %l1 ! %i_r(%l0) * 4 = %l1 4의 배수로 i변수 곱해줌, Array 연산용

단순히 nop을 제거하여 최적화
단순히 nop제거 전
! Sum Calculate lable (합계를 계산)
cal:
mov %j_r, %o0
mov 4, %o1
call .mul ! %l2 * 4 = %l1 4의 배수로 j변수 곱해줌, Array 연산용
nop
sub %fp, %o0, %l3 ! Array위치 계산후
ld [%l3], %var_r ! load Array [%fp + %l2*4], %var_r(%i0), temp변수
add %sum_r, %var_r, %sum_r ! %sum_r = %sum_r + temp
add %j_r, 1, %j_r ! j++
!compare %i_r & %j_r (%l0 vs %l2), 만약 %j_r이 %i_r보다 작으면 cal loop문을 돌게 함
cmp %j_r, %i_r
bl cal
nop

nop제거 후
! Sum Calculate lable (합계를 계산)
cal:
mov %j_r, %o0
call .mul ! %l2 * 4 = %l1 4의 배수로 j변수 곱해줌, Array 연산용
mov 4, %o1
sub %fp, %o0, %l3 ! Array위치 계산후
ld [%l3], %var_r ! load Array [%fp + %l2*4], %var_num(%i0), temp변수
add %j_r, 1, %j_r ! j++
!compare %i_r & %j_r (%l0 vs %l2), 만약 %j_r이 %i_r보다 작으면 cal loop문을 돌게 함
cmp %j_r, %i_r
bl cal
add %sum_r, %var_r, %sum_r ! %i1 = %i1 + temp


숙제를 베끼는 것을 방지 하기 위해 m4 processor로 돌리기 전 코드를 올렸습니다. 개념적으로 SPARC Assembly가 어떻게 돌아가는지 쓴 것입니다 :D

간단한 과제하는데 몇시간이나 걸린건가?-_-;;
Buy me a coffeeBuy me a coffee
제가 대학교 1학년때 경제성공학이라는 책을 공부한 적이 있습니다. 이 책은 산업시스템개론에서 배우는 교재 이름입니다.

여러분들은 경제성공학을 어떻게 발음합니까?

경제 성공학?, 경제성 공학?

문과 분들께서는 경제 성공학으로 발음 하실 것이고 경제에서 성공을 하기 위한 학문으로 볼수 있습니다.
이과 분들께서는 경제성 공학으로 발음하실 것입니다. 공돌이들에게는 공학을-_-;; 중시하기 때문에 공학으로 발음할수도 있습니다.


자 경제성공학을 어떻게 읽는지 답을 알아 볼까요???
이글루스 가든 - 무적의 공대생이 되자!

'끄적거림' 카테고리의 다른 글

전자회로의 굴욕  (4) 2006.10.31
카논 4화 감상  (4) 2006.10.30
Ego君의 전생운  (6) 2006.10.17
딴나라당의 만행?  (3) 2006.10.15
빈칸채우기 문답  (4) 2006.10.14
Buy me a coffeeBuy me a coffee

이글루스 블로그에서 유행하는 전생운을 재미로 쳐봤습니다.

※ Ego君(성XX)님의 전생운 입니다.
원숭이가 변하여 붉은 비둘기가 된 것이니 용모가 특이하고 남들보다 빼어나서 눈에 잘 띄지만 잔머리도 잘 굴리니 약삭빠르다고 할 수 있습니다. 비록 어려운 일에 처할지라도 임기응변에 능하니 쉽게 일을 처리할 수 있으며 하나를 가지고 둘을 만들어내는 재주를 지녔으니 가진 게 없더라도 풍족하게 살수 있는 사람입니다. 어렵고 힘들게 돈을 벌어서 여러 사람을 돕는 면이 있으니 사람마다 좋아하는 것이며, 간혹 재주가 교묘하여 그 재주를 시기하는 사람도 나타날 수 있습니다.

어려서부터 독립정신이 강하니 이것은 13~4세에 부모상을 당하는 슬픔을 맛보기 때문입니다. 15~6세에 귀인을 많이 사귀어서 좋은 일이 많이 생기며, 19세에는 이미 자기 할 일을 찾는 사람이라 하겠으니 하는 일마다 순조롭다 할 수 있으며 37~8세에는 운수가 대통하니 뜻한 바가 성취되어 43~4세에 많은 을 벌게 될 것이니 말년에 복이 있어 호강하게 되는 것입니다.

생각이 빠르고 깊으니 일에 빈틈이 없고, 한번 시작하는 일은 결과를 얻어내는 성품이니 어떤 일을 하더라도 끝마무리를 잘 할 것이고, 일찍 부모를 잃었으니 자립정신이 내부에 정립되어 말없이 성공을 도모하는 사람입니다. 인생이 한평생 순탄할 수 만은 없는 것이니 눈을 감고 있어도 복이 들어오는 것이 아님을 알아야 할 것입니다.


이런이런 클랴님과 똑같습니다 -_-;;
13~4세에 부모상은 당하지 않았지만... 줄초상을 맛보았습니다. 외할아버지, 외숙모, 이모부, 외할머니 등등등. 사인(死因)은 여러가지입니다 =_=;; 안좋은 일들을 많이 당했지요. 그리고 아부지의 교육열때문에 서울에 올라와서 엄청난 시련들을 겪게 되죠.

17세 때인 고등학교 입학해서야 좀 친한 친구들을 사귈수 있으며.. 중학교땐 기억을 잊고 싶지만 고등학교때에는 귀인과 같은 친구, 선생님들을 만나서 좋은 일이 많이 생겼죠.
(수업은 안듣고 고등학교 학생부 교무실에서 컴퓨터 고치거나 컴퓨터실에서 컴퓨터 고치거나 아님 컴퓨터 관련 상은 다 휩쓸거나 등등..지각해도 대학가는 지름길 방망이 매질은 피했습니다 =_=;;)

19세때 담임의 강권으로 수시 1학기 원서를 억지로 써서 =_=;;(아직도 꿈에 고3교무실에서 고3 담임이신 이모 교사가 매들고 겁주는 장면을 꾸고 있음 ㅠ_ㅠ) 대학교를 갔다만.. 주위 사람들은 수능공부할때 놀았습니다 -_-;;

하는 일마다 순조롭다 할 수 있으며 37~8세에는 운수가 대통하니 뜻한 바가 성취되어 43~4세에 많은 을 벌게 될 것이니 말년에 복이 있어 호강하게 되는 것입니다.

이 글을 읽고 나서의 소감은




43~4세에 돈!
자본주의 사회에선 돈이 최곱니더. -_-;;

그렇다면 강남의 억대 아파트 사고 상상만 하면 좋군요^^

근데 군대는 어떻게 하나요? ㅠ_ㅠ


지금 군대 문제가 심각합니다 -_-;;

'끄적거림' 카테고리의 다른 글

카논 4화 감상  (4) 2006.10.30
경제성공학  (7) 2006.10.28
딴나라당의 만행?  (3) 2006.10.15
빈칸채우기 문답  (4) 2006.10.14
O-Game 도중  (8) 2006.10.13
Buy me a coffeeBuy me a coffee

10월 16일 오후 7시12분 다운
그동안 책에 있는 예제 따라 해보질 못했음, 아주 답답했음

10월 17일 오전 11시 17분 BOOT
이게 무슨 조화냠? =_=;;


학과 Solaris Server가 1대 밖에 없으니 숙제 마감날짜때 금방 Down 될까봐 걱정됩니다.
제 친구들 숙제 제출날에 숙제 못냈다고 함.(불쌍하다.)


서버관리자님 11시에 출근하셨나?ㅠ_ㅠ

오늘의 교훈
숙제는 그날 나온면 바로 하자!

'컴퓨터' 카테고리의 다른 글

집에 있는 컴퓨터는 3대  (3) 2006.10.30
Assembly 과제 완료  (2) 2006.10.29
SPARC Assembly HW#2 Use Stack Memory  (5) 2006.10.16
친구의 숙제 도와주다가  (7) 2006.10.11
어머, 배터리 리콜대상이군요.  (6) 2006.10.08
Buy me a coffeeBuy me a coffee
이번에 어셈블리 언어시간에서 배우는 SPARC Assembly Language 과제가 나왔습니다 OTL

학과장님께서 숙제를 내주시면서 쉽긴 해도 하는데에 너무나 짜증이 날 것이라고 합니다. -_-;;
시험기간중에 숙제를 내주는 학과장님의 극강의 센스(그래보았자 변모 교수님보다 심하진 않습니다 캬캬캬 - 나 완전 돌았군-_-;;)

과제는 이것입니다.
과제2 : 스택 메모리 사용 hw2.pdf

입력
  • 최대 10개까지만 입력된다고 가정한다. 11번째 데이터가 입력되면 무시하고 앞의 10개의 데이터를 사용하여 계산에 들어간다.
  • 한 줄에 숫자 하나씩 입력한다.
  • 10개가 입력되기 전에 입력과정을 마치려면, control-d를 누른다.

출력
  • 입력된 수가 없으면, 전부 0을 출력하면 된다.
  • 다음은 입력을 3, 1, 5, -1 순서로 받았을 때 출력이다. "%"는 시스템의 프롬프트이다.

% 3
% 1
% 5
% -1
% ^d
N = 4
sum = 8
mean = 2
레지스터 매핑
  • Number of inputs : %l0
  • Sum : %i0
  • mean : %o3

과제는 보듯이 C언어로 짜라면 아주 쉽습니다. 다만 Contril-D처리가 좀 그렇지만 -_-;;

C언어로 짜라면 대충 이렇게 짭니다.
#include <stdio.h>
main()
{
int stack[10];
int i = 0, sum = 0, mean = 0, var = 0;
while(i < 10)
{
i++;
scanf("%d", &stack[i]);
var = stack[i];
sum = sum + var;
mean = sum / i;
}
printf("N = %d \nsum = %d \nmean = %d\n", i, sum, mean);
}


그리고나서 꼼수를 쓸려고 했습니다. 앞의 포스팅이 있던 것 처럼 역어셈블 과정을 거쳐서 프로그램 소스를 약간 고칠려고 했습니다.
C언어 코드를 SPARC Assembly Language 로 역 어셈블
gcc -S stack.c

그리고 나서 ls 명령어로 stack.s 이 있는지 확인해 봅니다. :D
확인이 되면 stack.s파일을 확인해 봅시다~~~

OTL



'컴퓨터' 카테고리의 다른 글

Assembly 과제 완료  (2) 2006.10.29
학과 솔라리스 서버의 반란?  (5) 2006.10.17
친구의 숙제 도와주다가  (7) 2006.10.11
어머, 배터리 리콜대상이군요.  (6) 2006.10.08
후지쯔, 소니 배터리 28만7천개 리콜?  (3) 2006.10.08
Buy me a coffeeBuy me a coffee
YTN돌발영상입니다.

열린우리당도 별수 없다만.. 이 동영상을 보면 딴나라당 의원들은 원숭이들로 보입니다 =_=;;

(세상이 무슨 딴나라당세상인지 원)

'끄적거림' 카테고리의 다른 글

경제성공학  (7) 2006.10.28
Ego君의 전생운  (6) 2006.10.17
빈칸채우기 문답  (4) 2006.10.14
O-Game 도중  (8) 2006.10.13
루리카님이 주신 영어문답  (2) 2006.10.11
Buy me a coffeeBuy me a coffee


클랴님과 PerhapsSPY님의 블로그에서 트랙백 =_=;;
나의 이름은「Ego君」입니다.
사는곳은「서울특별시 강동구 어느 하루히의 결계가 쳐진 동네」이며,
키는「'빛이 진공에서 29억 979만 2,458분의 170초 동안 진행한 거리」에다,
몸무게는「아주 적절하게 중력이 끌어당기는 중력무게」이고요
생일은「12월 10일 이므로 선물 바라는 중」입니다
혈액형은「다들 이상하다는 AB형」이고요
취미는「프로이트 놀이와 자아 찾는다고 EgoGram에고그램 테스트를 하기」요
특기는「미소녀 게임하기와 Linux 서버 돌리기」고요
좋아하는 것은「혼자 앞에서 컴퓨터로 웹질이나 게임질하기(혼자놀이=_=)」입니다
싫어하는 것은「하는 일마다 꼬치꼬치 뭐라고 난리치는 사람들」이고요
성격은「자신도 자기가 무슨 생각하는지 모르는 성격」같아요
첫사랑은「Ego란 말을 쓴 프로이트에게 물어보시고요」고요
지금 쓰고있는 샴푸는「화장실에 돌아다니는게」있고요
스킨 로션은「베이비로션을」쓰고 있어요
쓰는 향수는「전혀」고요
핸드폰은「샘슝 애니콜」이예요
좋아하는 이성스타일은「귀엽고 이슬을 잘 먹는」고요
싫어하는 이성스타일은「도저히 사람인지 의심가는 성격과 외모의 소유자」입니다
제 친구들은「싸이코들」이랍니다
할일 없을 때는「컴퓨터 앞에 앉아 웹질 하거나 삽질하거나 애니를 보거나, 미소녀게임을」하고요
친한 친구들은「명일동에 다」있어요
인사할 때는「누구나에 따라 인삿말이 달라지고」요
밥먹기 전「맛있는 메뉴인지 학교 홈피에서 확인하고」요
소풍을 갈 때는「제가 좋아하는 사람들을 모이게 하고」요
애교를 떨 때는「정말 좋아하는 사람 앞에서 기분좋을때」해요
눈물이 나면「골방에서만 울고」요
친구가 화나면「프로이트가 말한 친구의 Ego를 알아 맞추려고 노력하고」요
친구와 싸우면「다음날 아무일 없었다는듯이 지내」요
못볼 것을 보면「못 봤다고 딱 잡아떼고」요
웃긴 것을 보면「공유정신을 발휘해」요
사랑하는 사람이 바람피면「내가 못해준건 없는지 뭘 잘못했는지 생각해보고 관계를 바로 끊고요」요
아프면「방콕에 뒹굴고」요
이별을 맞이할 때는「담담하게 맞이한뒤 최대한 빨리 털어내려」요
사랑하는 사람에게 미안하면「더 잘해주려고 노력하고」요
난처한 일이 생기면「프로이트 할배의 이름을 걸고 하고」요
슬플 때는「애니를 보고」요
길가다가 돈을 보면「일단 줍고」요
친구에게 심한 장난을 치고는「도망가」요.
사랑하는 사람과 있다가 정전이 되면「두꺼비집 검사하고」요
놀이기구를 타다가 무서우면「여친 생각하고」요
뒤에 따라오는 사람이 있으면「프로이트 할배 따라 Ego를 찾아드릴거라고 하고」요
짜증나는 사람에게 계속 전화가 오면「착신금지시키고」요
산보다는 탁트인「프로이트 책이」좋아요
사랑하는 사람이 생기면「심리학 책들을 보고」요
요리 실력은 모두들「라면 먹자고 해」요
친구들은 저보고「오덕후라고 하고」요
난 나와「오덕후들이 좋」고요
주량은「2병 넘어가면 꿈속의 나라로 가」요
친구들과 함께「애니메이션 이야기해」요
음악 스타일은「애니음악들이」요
비오는 날씨를「전이나 부쳐먹어」요
가끔씩 나는「짝사랑을 해봐요」요
갖고싶은 것은「PMP에」요
하고싶은 것은「바로 실행해버리고」요
내 성격은 한마디로「Ego君속의 Ego에요」요

바톤은
美妙님, Souseiseki님, 토코아맨, 설화가람님. 굴만주면아잉♡님, 10짤 미리내님
이상 끝.

받아가주세요 (꾸벅)

'끄적거림' 카테고리의 다른 글

Ego君의 전생운  (6) 2006.10.17
딴나라당의 만행?  (3) 2006.10.15
O-Game 도중  (8) 2006.10.13
루리카님이 주신 영어문답  (2) 2006.10.11
Kanon OP/ED  (3) 2006.10.07
Buy me a coffeeBuy me a coffee
O-Game을 하던중 이런 황당한 메세지를 받게 되었습니다.

y30840 [3:155:5]
10-12 20:00:04 경 귀하꼐서는 [3:297:13]에 위치한
식민지인 Harkonnen을 침공하신데 대해
본인은 매우 유감스럽게 생각하며 이러한 입장을 알려드립니다.

귀하의 행성을 정탐한결과

파이터 3 하베스터 1
정찰위성 5 태양열 인공위성 10
방어
로켓 시스템 20 레이저(약) 9
레이저(강) 3 이온 캐논 1
소형 보호막 1
빌딩
메탈 광업소 17 크리스탈 광업소 15
듀테륨 중수소 13 태양열 발전소 17
핵융합로 6 로봇 공장 7
쉽야드 8 메탈 탱크 1
연구소 7 미사일 사일로 2
연구
정탐 기술 6 컴퓨터 공학 5
무기 공학
따라서 본인에게 약탈해가신

17800 메탈, 9451 크리스탈, 7120 듀테륨 과

파괴된 레이저(약) 2문을 합산한

20800 메탈, 10451 크리스탈, 7120 듀테륨을
배상해주시길 바랍니다.

빠른답장 부탁드립니다.


약탈 하면 안되나요? O-Game은 약육강식의 세계로.. 대처를 안하면 끝장인 곳인것을 어찌 모르나요?
USSE동맹에게쪽지 보내서 다굴 하려다가 참습니다.

저도 약탈 억수로 겪었다만.. 왜 약탈 한 것 가지고 따지는것인지.. 근데 본 행성이 아니라 식민지에서 약탈인데.. 본 행성은 완전 방어시설로 발렸더군요 =_=;;

화가 나서 참아본다만... 약육강식의 사회에서 그런 것 쯤은 다 당하지 않나요? 제가 나쁜 놈으로 몰린 것 같군요.

'끄적거림' 카테고리의 다른 글

딴나라당의 만행?  (3) 2006.10.15
빈칸채우기 문답  (4) 2006.10.14
루리카님이 주신 영어문답  (2) 2006.10.11
Kanon OP/ED  (3) 2006.10.07
10월 신작 하피네스(はぴねす!) -_-;;  (5) 2006.10.04
Buy me a coffeeBuy me a coffee
(이 포스트는 코드 주석처리가 아직 안되었기 때문에 조만간 주석처리를 할 예정입니다:D)

제가 친구의 요청으로 졸지에 어셈블리 언어(Assembly Language)숙제를 하게 되었습니다.
(제가 다른 교수님 숙제라고 소스 코드를 공개하지만 학과장님 수업 과제였다면 공개를 안했을 것입니다 캬캬)

제가 듣는 학과장님 수업이 아니라 박모교수님이 수업하시는 것 숙제를 해달라는 것이였습니다.
SPARC Architecture, Assembly Language Programming, and C에 있는 연습문제 프로그래밍 해달라는 것이였습니다.
이것이 SUN사의 SPARC Machine에서만 돌아간다는 Assembly 언어 책입니다 -_-;; (책이 딱 한 종류밖에 없더군요)



여기서 다루는 Assembly언어는 SUN사의 SPARC Machine에서 실행되는 Assembly 언어 입니다. 다른 학교에서는 8051 Chip으로 Assembly 언어를 다루는데 .. 저희 과는 특이하게도 SUN사 SPARC Assembly를 다루더군요.

(다음학기때는 전자전기공학부의 마이크로컴퓨터를 배워볼까나? - 어디서든지 많이 쓰는8051Chip에서 쓰는 Assembly를 배운다고 하네요.(선배가 학점따기 쉽다고 해서 들어볼까 생각중))

연습문제 2장 문제
CHAPTER2. SPARC ARCHITECTURE
2.13 Exercises
2-3. Write a program to find the maximum of x³-14x²+56x-64 in the range -2≤x≤-8, by stepping one by one thought the range.

순간 머리가 멈칫... 그리고 어떻게 풀어야 할지 대략 감을 잡았습니다.
C언어라면 금방 짰을 과제인데 =_=
근데 전 단순히 -2부터 8까지 값을 while loop로 돌려 넣어서 값을 찾아내게 했습니다.
-2부터 8까지 값을 loop를 돌리면서 결과값을 Assembly code로 if else로 코드 짜는데 귀찮은것짜증내면서 삽질을 요하게 되고, 레지스터에 써야할 것은 한계가 있는데, 시간이 아깝다는 이유로 -2부터 8까지 값을 loop로 돌려서 결과값을 출력하게 했습니다.

아래 코드는 최대한 최적화를 하게 만들었습니다. 아무짝에 쓸모없는 nop 명령어를 지워버릴려고 얼마나 노력을 많이 했는지 =_=
아래의 같은 코드 파일 : ex2_3.s

.section ".data"
fmt: .asciz "%d is %d\n"
.section ".text"
.global printf
.global main
main:
save %sp, -96, %sp
mov -2, %l0
.global loop
loop:
cmp %l0, 8
bg done
nop
mov %l0, %o0
call .mul
mov 56, %o1
mov %o0, %l3
mov %l0, %o0
call .mul
mov %l0, %o1
mov %o0, %l1
call .mul
mov 14, %o1
mov %o0, %l4
mov %l1, %o1
call .mul
mov %l0, %o0
mov %o0, %l2
add %l2, %l3, %l1
sub %l1, 64, %l1
sub %l1, %l4, %l1
! output function call!
set fmt, %o0
mov %l0, %o1
call printf
mov %l1, %o2
add %l0, 1, %l0
bl loop
nop
done:
mov 1, %g1
ta 0


자 작업을 다 했으면 컴파일을 해볼까요?
[10/11(수) 03:56 cea5151@sol1] ~/assem/ch2$ gcc -g ex2_3.s -o ex2_3

gcc는 C 컴파일러이지만 어셈블리 언어도 컴파일이 됩니다. :D
-o ex2_3 은 컴파일 한 결과물을 a.out으로 저장하지 말고 ex2_3이란 파일로 저장하라는 말입니다,
-g ex2_3.s 는 ex2_3.s란 어셈블리 언어로 작성된 파일을 컴파일하는데 -g라는 옵션을 붙여서 컴파일 된 후 실행파일이 gdb가 소스 코드를 분석할 수 있게 컴파일을 하라는 것입니다 :D

Solaris에서 작업을 했으면 아래의 에러가 안나고 아주 편하게 컴파일이 될 것입니다. 그러나 윈도우즈에서 작업을 해서 ftp로 올린다면 컴파일이 안된다고 gcc에서 에러를 쏟아냅니다.
[10/11(수) 03:56 cea5151@sol1] ~/assem/ch2$ gcc -g ex2_3.s -o ex2_3
/usr/ccs/bin/as: "ex2_3.s", line 1: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 2: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 3: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 4: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 5: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 6: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 7: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 8: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 9: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 10: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 11: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 12: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 13: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 14: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 15: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 16: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 17: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 18: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 19: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 20: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 21: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 22: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 23: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 24: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 25: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 26: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 27: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 28: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 29: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 30: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 31: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 33: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 34: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 35: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 36: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 37: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 38: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 39: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 40: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 41: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 42: error: invalid character (0x0d)
/usr/ccs/bin/as: "ex2_3.s", line 43: error: invalid character (0x0d)
[10/11(수) 03:56 cea5151@sol1] ~/assem/ch2$

제대로 타이핑을 했는데도 이런 이상한 일이 벌어짐을 알수 있습니다. 이 것은 윈도우즈에서 작업을 했기 때문에 파일 포맷이 windows로 되어 있게 저장된 것입니다. Solaris나 Unix, Linux같은 경우에는 파일 포맷을 UNIX로 쓰기 때문에 이런 결과가 나타나게 되는 것입니다.

이 문제를 해결하는 방법은
[10/11(수) 03:56 cea5151@sol1] ~/assem/ch2$ dos2unix -o -k ex2_3.s ex2_3.s

dos2unix라는 프로그램을 실행시키는 것입니다. 이 명령어는 파일 포맷이 dos인 텍스트 파일을 UNIX 파일 포맷으로 바꿔준다는 말입니다.
man보고 어떻게 실행하는지 알았습니다. 자세한 것은 man 명령어 쳐서 알아보시길 바랍니다 :D

아 컴파일을 해볼까요?
[10/11(수) 03:56 cea5151@sol1] ~/assem/ch2$ gcc -g ex2_3.s -o ex2_3
[10/11(수) 03:56 cea5151@sol1] ~/assem/ch2$

컴파일이 제대로 되었다는 것을 알았습니다.

그러면 실행을 해볼까요?
[10/11(수) 03:56 cea5151@sol1] ~/assem/ch2$ ./ex2_3
-2 is -240
-1 is -135
0 is -64
1 is -21
2 is 0
3 is 5
4 is 0
5 is -9
6 is -16
7 is -15
8 is 0
[10/11(수) 03:56 cea5151@sol1] ~/assem/ch2$

원하는 결과가 나왔습니다.
전 학과장님께서 가르쳐 주신 책에 없는 print 명령어를 써서 결과 값이 제대로 되었는지 알았다만... 박모 교수님 시간에는 숙제를 print 명령어 없이 하라고 했기 때문에... 어떻게 하는지 모르겠습니다.
(gdb를 돌려서 해야하는가?)

이 프로그램을 C로 짠다면...
C언어 Code : ex2_3.c
#include <stdio.h>
main()
{
int temp,i = -2;
while (i <= 8) {
temp = (i*i*i) - (14*i*i) + (56*i) - 64;
printf("%d is %d\n",i, temp);
i++;}
}

결과값은 아까 전의 Assembly code랑 같습니다 =_=
-2 is -240
-1 is -135
0 is -64
1 is -21
2 is 0
3 is 5
4 is 0
5 is -9
6 is -16
7 is -15
8 is 0

이렇게 간단하게 짜집니다 ㅠ_ㅠ

정말 Assembly 언어 공부하면서... C언어가 편하다는 사실을 깨닫게 됩니다 ㅠ_ㅠ
Buy me a coffeeBuy me a coffee


루리카님이 바통을 주신 영어문답입니다.
영어라면 아주 머리가 아파오고 멀미, 편두통, 구토등을 유발하는 인자로서 =_=, 학창시절에 영어때문에 노이로제 걸렸을 만큼 영어에 대해 덜덜덜 하는 사람인데... 루리카님께서 영어문답을 주시다니 ㅠ_ㅠ
(답은 영작이 아니라서 다행이군요 :D)

■ Four Jobs I’ve had in my life
모범생인척, 매일 지각하는 지각쟁이 고등학생 =_=, 그러나 성적은 널뛰기로 나와서 매일 담임선생님에게 상담 받음
(어찌 영어 성적이 안나오는지?, 수학, 과학은 성적 잘나오는데?-제가 노력해도 안되는 것을 어떻게 하라고요 ㅠ_ㅠ)

초, 중, 고등학교에서 수업보다도 학교 컴퓨터 고치느라 돌아다녔던 노동력을 착취당한 무보수노동자였음.
(중학교때 컴퓨터 강동교육청장 상 받으니... 중학교때 수업은 안듣고 컴퓨터실에서 컴퓨터 뜯어고치던 기억이-_-;;)
(고등학교때는 교내 컴퓨터관련 상은 다 탔더니.. 교무실에서 짱박혀서 컴퓨터 고치던 기억이ㅠ_ㅠ)

모의고사 영어 성적이 안좋아서 수시 1학기로 들어간 홍익대학교 대학생
(영어 성적이 조금더 좋았다면 좋은 대학교로 갔을 것이란 생각을 합니다.=_=)

프로그래머를 희망하는 예비 코더(Coder)
(빨리 프로그래머 Level에 가고 싶어요. =_=)

■ Four movies I can watch over and over
스타워즈 시리즈 : 어릴때 부터 꿈과 희망을 가져다 준 영화 시리즈
에반게리온 극장판 : 이걸 영화로 해야할지 의문스럽군요
Matrix : 매트릭스 영화가 이해가 잘 안가서 계속 봤습니다. 1학년땐 자꾸 행렬(Matrix)가 계속 나와서.. 요즘도 행렬로 생각하고 있습니다 ㅠ_ㅠ (공대생의 안습)
AI : 저도 저런 로봇을 만들고 싶은 생각을 해봅니다.(변영태 교수님께서 인공지능 첫 시간에 보여주는 영화라고 선배들이 그러더군요)

■ Four places I have lived
서울특별시 강동구 천호동 : 현재 살고 있는 곳
(평지라서 좋아요)

경기도 성남시 중원구 하대원동 : 초등학교때 살던 곳.
(옆의 산동네인 상대원동보다 경사는 가파르지 않지만, 살던 곳은 산중덕에 있는 아파트)

경기도 성남시 수정구 태평3동 : 어릴때 태어나서 살던곳,
(오나전 경사 가파른 동네, 완전 산동네입니다.)

대구광역시 : 어릴때 잠깐 살았던 기억이..


■ Four TV shows I love to watch
KBS 9시 뉴스 - 뉴스는 챙겨봅니다.
SBS 그것이 알고 싶다. - 저의 호기심이 생겨나는 프로그램
KBS 상상플러스 - 보면서 내가 알고 있는 단어들은 왜 사람들은 모를까 하는 생각을 해봅니다.
MBC 아침 7시 뉴스 - 부모님께서 아침 7시 뉴스를 켜면 제가 자동적으로 일어납니다. (뉴스가 없엇다면 어떻게 일어났을까?)
더 이상 자주보는 TV프로 없음.


■ Four places I have been on vacation
대구광역시 : 부모님께선 어찌 억수로 더운 찜통의 달구벌 분지에서 자식들을 여름방학때 친척집에 보냈는지
경상북도 김천시(금릉군) : 부모님 고향 (두 분 다 같은 김천시 사람이지만 동네는 다름 :D)
(김천시가 예전에 금릉군과 김천시로 있었다고 합니다. )
충청북도 단양시 : 고수동굴, 팔선암 같은 관광지입니다.
강원도 강릉시 : 경포대해수욕장에서 가족들이랑 해수욕하고 관광했던 곳

■ Four websites I visit daily
이글루스 : 이글루스에 블로그가 있으므로.. 그리고 저의 일상생활과 공부한 것을 기록하는 곳이라서 자주 방문합니다.
홍익인 : 홍대내의 유익한 정보가 많아서, 그리고 홍대 안에 있는 의견들을 보기 위하여 많이 들립니다.(족보과 수강정보들때문에 갑니다 =_=)
Google : 숙제하는데 Google이 없었다면 무슨 낙으로 살았을까요? =_= 검색엔진중에서 최강인듯 합니다. 왠만한 검색어들을 잘 찾아주니까요.
네이버 : 네이버는 뉴스 볼때 씁니다. 네이버 지식인의 믿을 수 없는 정보때문에 -_-;; 그러나 구글과 비교해서 구글이 원하는 정보가 없다면 바로 네이버 지식인으로 검색합니다.


■ Four of my favorite foods
라면 : 고등학교때 부터 야식으로 먹던 것이 =_=;; 야식으로 쵝오입니다. (매운 것은 잘 못먹지만.. 맛있어서 먹어요 ;ㅁ;)
국시 : 서울쪽은 다 국수라고 하네요. 어무이가 해주시는 국시을 좋아합니다.
순대 : 순대에 간, 등등의 부산물들까지 먹으면 >.< (순대 살때 간과 폐 같은 부산물 많이 넣어달라고 주문합니다.)
된장찌개 : 된장은 집에서 만든 된장으로, 멸치, 두부,여러 가지 채소들을 넣고 끓인 것을 좋아합니다.

■ Four places I would rather be right now
일본 - 도쿄(東京)와 교토(京都), 오사카(大阪)에 가보고 싶어요
중국 - 고등학교때에 중국어를 배워보고 대학교 1학년때에도 중국어를 배웠다만.. 중국어 써보고 싶어요. 그리고 중국 대륙도 가보고 싶고, 유적도 보고 싶고
미국 - 뉴욕, 시애틀, 실리콘밸리에 가고 싶습니다.
독일 - 면허증 생기면 독일의 아우토반에서 차를 몰고 과속을 해봤으면 좋겠습니다. 그리고 독일의 과학기술도 보고 싶고요 (은근히 독일 프로그래머가 짠 프로그램들이 많아요 =_=;;)


■ Four bloggers I’m tagging
루리카 님께서 워낙 오래된 문답이라고 하셨을거라고 생각하지만
깐밤
souseiseki
귤만주면아잉♡
역설

다들 어떤 반응을 낼지?(응?)
자 받아주세요.
찬조출현 : Rozen Maiden 스이세이세키(취성석翠星石)

'끄적거림' 카테고리의 다른 글

빈칸채우기 문답  (4) 2006.10.14
O-Game 도중  (8) 2006.10.13
Kanon OP/ED  (3) 2006.10.07
10월 신작 하피네스(はぴねす!) -_-;;  (5) 2006.10.04
예전 학회홈페이지에서  (5) 2006.10.04
Buy me a coffeeBuy me a coffee

+ Recent posts