시리얼통신, 무한반복 함수 어셈
<하이퍼터미널에서의 결과>
빛센서는 97번핀과 연결하고 한쪽은 VCC에 연결
LED는 포트A아무데나 연결해 놓음
----------------------어셈블리--------------------
.386
.MODEL FLAT
PUBLIC _STST
PUBLIC _LDST ;load status
.CODE
_STST PROC NEAR32
PUSH EBP
MOV EBP,ESP
PUSHFD
PUSHAD ;전체 레지스터 넣음
MOV EAX, [EBP-4]
AND EAX, 0FFFFFEFFh
MOV DWORD PTR[EBP-4], EAX ;efl 값넣어둠
MOV ECX, ESP ; 맨위의 ESP 주소
MOV ESP, [EBP+8] ;구조체 주소를 넘김
ADD ESP, 40 ;esp를 밑으로 내려보냄
;초기값을 가리키는 것이 필요
MOV EAX, EBP ;EAX의 초기 값
ADD EAX, -8
PUSH [EAX]
ADD EAX, -4
PUSH [EAX] ;ECX
ADD EAX, -4
PUSH [EAX] ;EDX
ADD EAX, -4
PUSH [EAX] ;EBX
MOV EBX, EBP
ADD EBX, 8 ;esp
PUSH EBX
PUSH [EBP] ;ebp의 값
ADD EAX, -12
PUSH [EAX] ;EDI
ADD EAX, -4
PUSH [EAX] ;ESI
PUSH [EBP+4] ;리턴어드레스 값
PUSH [EBP-4] ;EFL 값
MOV ESP, ECX
POPAD ;꺼내기
POPFD ; 플래그도
MOV ESP,EBP
POP ebp
RET
_STST ENDP
_LDST PROC NEAR32
;메모리 안에 있는 정보를 CPU올리기
MOV ESP, [ESP+4] ;esp =&context
POPFD ;플래그 efl = context.efl
POP EAX ;eax = old eip
MOV EBX, ESP ;esp 임시저장, ebx= current esp
MOV ESP, [ESP+12] ;스택으로 점프 esp = old esp
PUSH EAX ;y값을 return address 에 넣어줌 save old eip
MOV ESP, EBX ;다시 돌아온 esp ,esp = current esp
POPAD ;한 번에 넣기
MOV ESP,[ESP-20]
SUB ESP, 4 ;r.a까지 esp 올리기
RET
_LDST ENDP
END