반응형 코스웨어/14년 스마트컨트롤러287 LDST 과제 1. 아래 소스에 대해 주석을 달고 2. 자신이 작성한 LDST Procedure에도 주석을 삽입하여 3. 2개의 LDST 소스를 메일로 과제 제출할 것. PUBLIC _LDST ; LoaD STatus Procedure;-------------------------------------------------------------------------------_LDST PROC NEAR32 ; LoaD STatus Procedure Startmov esp, [esp + 4]popfdpop eaxmov ebx, [esp + 12]mov ecx, espmov esp, ebxpush eaxmov esp, ecxpopadmov esp, [esp - 20]sub esp, 4ret _LDST EndP ; LoaD.. 2014. 8. 18. 20140808업무일지 김재성[7번] 휴가 -2Day (*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~) 구조체 .c영역#include typedef struct _context{unsigned int EFL;unsigned int EIP;unsigned int EDI;unsigned int ESI;unsigned int EBP;unsigned int ESP;unsigned int EBX;unsigned int EDX;unsigned int ECX;unsigned int EAX;}context; (*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~.. 2014. 8. 8. STST 과제 1. 아래 소스에 대해 주석을 달고 2. 자신이 작성한 STST Procedure에도 주석을 삽입하여 3. 2개의 STST 소스를 메일로 과제 제출할 것. ;-------------------------------------------------------------------------------_STST PROC NEAR32 ; STore STatus Procedure Startpush ebp; 프로시저 시작 (Entry Code)mov ebp, esp; 프로시저 시작 (Entry Code) pushfdmov esp, [ebp + 8]add esp, 40pushadmov eax, ebpadd eax, 8mov [esp + 12], eaxmov eax, [ebp]mov [esp + 8], eaxmov .. 2014. 8. 7. 2014.08.06 업무보고 출석번호 6번 김용우 ※ 이전에 정리한 Assembly의 마지막 부분을 풀이한 내용이다. 좀더 확실하게 정리를 해보자. main.c stst.asm ▶아래의 그림을 보면 조금 복잡할 수도 있지만 순서대로 Stack Memory의 내용을 비교해서 보면 쉽게 이해할 수 있다.→ 먼저 main함수의 EBP를 기준으로 구조체 변수가 생성이 된것을 알 수 있다. 그리고 바로 주소값을 인자로 stst함수를 호출한다.함수영역으로 가기전에 Stack Memory에 위의 그림과 같이 구조체 Status의 주소값을 저장해둔다. 아래는 main.asm의 소스코드중 일부를 가져온것이다.Status의 값을 넣는 과정을 첨부했다.leaeax, DWORD PTR _status$[ebp] ;_status$ = -20 을 의미pusheax→ 함수를 호출하.. 2014. 8. 6. 2014.08.05 업무보고 출석번호 5번 김상엽 Aembly의 함수 호출 함수 호출시 뒤에서 넣는 방식 앞에서 넣는 방식 두가지가 존재한다. 인텔형 함수 호출 방식 1. 함수의 조건 모든 함수는 종료 전에 모든것을 원래대로 돌려놓아야 한다. 예외: eax는 어떤값을 가지든 상관이 없다. eax는 반환값이 존재하므로 예외이다. Assembly는 변수의 자료형 크기와 개수를 계산하여 한방에 Stack영역에 할당한다. 이 방법은 배열을 사용하여도 동일하게 적용 된다. 이렇듯 우리가 void 형을 쓰든 int형을 쓰고 return을 쓰지 않아도 컴파일러가 0을 자동으로 채워주기 때문에 컴파일 하는것이 에러 없이 잘 동작 할 수 있다는 것을 확인 할 수 있었습니다. 위의 C코드를 보면 변수 i가 초기화가 두번 된 것을 확인할 수 있다. 그렇기 때문에 그것을 A.. 2014. 8. 6. 2014.08.04 업무일지 [김대희] 프로시저는 어셈블리에서 '함수'어셈블리에서 '프로시저'라고 해서 다른 고수준 언어에서 '함수'라고 부르는 것이아니고C언어에서도 이를 프로시저라고 부름 Initialize는 함수의 이름이고ENDP는 함수가 끝났다는 뜻이다. 이 함수는 만들어는 져있지만 호출은 되지 않는다.왜냐하면 Entry Point가 _start로 되어있기 때문이다.이는 C언어와 유사함 함수를 호출하는 방법은 call initialize _start도 실제로는 initialize나 마찬가지다ENDP가 INVOKE exitprocess 일 뿐 예제로 살펴보자 .386.MODEL FLATExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD .STACK 4096 ;reserve 4096-byte stack.. 2014. 8. 4. 2014.08.01 업무일지 [고한솔] ESP 레지스터STACK의 시작'주소'를 가지고 있다. (32bit의 stack point) push 명령어Operand를 1개 가진다. push 100 의 명령을 수행 할 때는ESP = ESP - 4* ESP = 100이렇게 두가지의 수행을 하게된다. push명령 debug로 실행하는 화면 ESP가 가지고있는 현재 주소는 0012ffc4 push 0ffffffffh 명령을 수행 한 후 1. ESP = ESP - 4 의 주소인 12ffc0을 가지고2. 그 주소에 ffff ffff의 메모리를 넣는다. push 012345678h 명령을 수행 한 후 1. ESP = ESP -4 의 주소인 12ffbc2. 그 주소에 12345678의 메모리를 넣는데 리틀엔디안 방식으로 넣어진걸 확인할 수 있음. ...... .. 2014. 8. 1. 20140731 업무일지 출석번호 1번 고윤석 예제를 이용해서 공부해 보자 예제 1. cmp 를 이용해서 숫자를 비교한다 그리고 그 결과를 가지고 점프를 사용하는데 jnl: jump if not less 이상일떄SF=OF jnc: jump if not carry 캐리값이 없을떄CF=0 이 조건들을 만족할시에만 점프가 가리키는 곳으로 점프를 하게 된다 예외적으로 jmp: 무조건 점프 가 있다 점프를 시킬시에는 보통 elseLarge 와 같은 라벨을 만든다 라벨을 만들시에는 중복이 될수도 있으니 차근차근 계획해서 만드는 것이 좋다 예제 2. jge jump if greater or equal SF=OF 비교한 값이 이상일떄(jnl 과 같다) jne jump if not equal ZF=0 같지 않을때 점프를 수행하라 예제 3. .386 .MODEL FL.. 2014. 7. 31. 2014.07.30. 업무일지 출석번호 22번 허수웅 섭씨 온도에서 화씨 온도 구하기 구하는 공식은 F = (9 / 5) * C + 32 이나 코드 영역을 보게 되면 add ax,2가 추가 된 것을 확인할 수 있다. 이것을 추가해 주는 이유는 5로 나눈 결과값이 소수점 한자리수가 6을 넘어가게 되면 그 값을 버려주기 때문에 반올림 할 수 있는 경우 반올림을 해주기 위해 2를 더해준다. 2를 더해주게 되면 결과값에 0.4를 더해주는 것과 동일하므로 소수점이 0.6이상이 발생하게 되면 0.4를 더해주어 반올림한 결과가 되도록 설정해준다. 32bit보다 큰수 계산하기 위의 경우 Nbr1Hi 00000000 Nbr1Lo FFFFFFFF Nbr2Hi 00000000 Nbr2Lo FFFFFFFF 일 경우 adc를 통하여 발생한 carry가 Hi 덧셈에 사용되는지를 알.. 2014. 7. 31. 이전 1 ··· 10 11 12 13 14 15 16 ··· 32 다음 728x90 반응형