20140730 (rounding factor, adc, sbb, clc, stc, cmc, jmp, cmp)

113일차








-----------------

Assembly

-----------------





------- rounding factor


라운딩 팩터




섭씨를 화씨로 변환하는 프로그램인데

변환 공식이 F = (9 / 5) * C + 32 이다.

그런데 소스 중에 빨간 줄이 쳐진 곳을 보면 2를 더한다.

왜 2 를 더할까?


rounding factor라고 하는데

9 / 5 = 1.8 이다.

정수간에 연산이기에 소수점 아래는 다 버리게 된다.

그래서 반올림 하여 2로 만들어 주어서 차이가 적게 만드려고 한다.

(9 + 2) / 5 = 2.2 로 2에 가깝게 만들어 주었다.


2 / 5 = 0.4 로 소수점 어떤 값에 0.4를 더해주게 되면

반올림된 값으로 쳐줄 수 있다. 그래서 정수 계산에서 2를 더해준다.









------- adc , sbb Instruction


adc (덧셈)

adc   A ,  B

==> A = A + B + carry


sbb (뺄셈)

sbb   A ,  B

==> A = A - B - carry












------- clc , stc , cmc Instruction


carry flag 셋팅.















------- jmp Instruction


무조건 점프



jmp   offset(상대값)









------- 조건에 따른 점프


jz   endwhile

zero flag 가 set 됐으면 endwhile로 점프


jnz   startwhile

zero flag 가 0 이면 (연산 결과가 0이 아니다) startwhile로 점프


js   endprg

sign flag 가 set 됐으면 (음수이면)  endprg로 점프


jns   smart

sign flag 가 0 이면 (양수이면)  smart로 점프














------- cmp Instruction


비교

cmp   operand1 ,  operand2



operand1 에서 operand2 를 뺀다.



뺀 값이 저장되는건 아니고 flags가 바뀐다.



그 flag가 바뀐 값으로 조건에 맞게 점프를 한다.


설정

트랙백

댓글