8월 27일 실습2(정리중)
어큐물레이터
prefix
아래 그림은 xchg명령어 그림.
아래 그림은 잘못된 예
2개의 메모리가 사용되었기 때문에 잘못된 예이다. 메모리에서 메모리로 값을 집어넣을 수 없다.
어셈블리는 반드시 메모리->cpu->메모리를 거쳐야 된다. 아래 2두줄이 그 예가 되겠다.
아래 그림은 xchg 두 수를 스왑하는 명령어이다. xchg를 사용하지 않으면 밑에 mov명령어처럼 3줄을
써야한다. 이 중에서 어떤것이 최적화되고 사용하기 좋은가(?)라는 질문을 한다면, 컴파일러의 속도가 빠른것을
사용하는 것이 좋다.
일단, xchg명령어를 보면, timing386(386기준으로 속도, 주기)가 3주기가 된다.
그런데 아래 빨간색 mov명령어를 보면 timing386주기가 2주기. 명령어를 3줄썼으므로 6주기가 된다.
주기가 작을 수록 속도가 빠르기에 두 수를 스왑할 일이 생긴다면, xchg를 사용하는 것이 좋다.
아래 그림을 참조해서 본다면, memory가 reg보다 주기가 2배나 느리다는 것을 알 수 있다.
아래 그림은 엑셀 파일로 EFLAGS를 구성해본 그림. 아래 PDF에서는 OF, SF, ZF, CF를 모니터링 하고 있다.
SF=1이라면, 음수라고 생각하면 된다. 0이면 음수가 아니다.
ZF=계산 결과가 0이라면, 1이 된다.
CF=carry가 발생하면 1, 아니면, 0이다.
OF=1이라면, overflow
77ac와 4b35를 어셈블리어로 빼서 디버깅하였다. 그랬더니 efl이 16진수로 a96이 나왔다. 이것을 2진수로 반환하여
아래 그림과 같이 EFLAGS구조를 만들어 비교해보았다. 그랬더니, OF=1, SF=1, ZF=0, CF=0이 나왔다.
overflow와 음수인것을 의미한다.
아래그림은 pdf의 그림. 위 그림과 비교.
아래는 디버깅한 부분. Dbl을 예로 들어봤다. EFL레지스터가 헥사값으로 206이다. 이것을 2진수로 변환하여 위의 두그림처럼, 비교하여 CF,SF,ZF,OF가 pdf와 일치하는지 보았다.