-
20140730 (rounding factor, adc, sbb, clc, stc, cmc, jmp, cmp)부산IT학원/스마트컨트롤러 2014. 7. 30. 10:47
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가 바뀐 값으로 조건에 맞게 점프를 한다.
'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글
20140801 (Assembly push, pop, pushad, popad, pushfd, popfd) (0) 2014.08.01 20140731 (Assembly loop, 배열, lea, pipe line) (0) 2014.07.31 20140729 (Assembly imul, idiv, div, cbw, cwd, cdq, cwde, movsx, movzx) (0) 2014.07.29 20140728 (add, sub, inc, dec, neg, mul) (0) 2014.07.28 20140725 (Assembly Flags Register) (0) 2014.07.25