==================================Outline====================================
div 명령어 숙제----------------------------------------------------------------------------
div 명령어 숙제
[답안]
C = (5/9) * (F - 32)
9C = 5(F-32)
C = 5(F-32)/9
mov esi, 70 //esi = F
sub esi, 32 //esi = F - 32
imul esi, 5 // esi = 5(F-32)
mov edi, 9 //edi = 9
mov eax, esi //eax = 5(F-32)
cdq //register setting for div.
idiv edi // eax = 5(F-32)/9
mov edi, eax //edi = 5(F-32)/9
edi = 15h
큰 수의 덧셈과 뺄셈(pdf p/130)
64bit길이의 숫자를 계산하려면 32bit인 두 개의 변수를 선언하여 하위 32bit와 상위 32bit를 더해준 후에 올림수만 처리해주면 된다. 이 때 adc 명령어를 사용한다.
adc = 올림수가 생기는 것까지 포함하여 덧셈을 해주는 연산
A B C
+ D E F
----------
add C + F ; 일의 자리수는 일반 덧셈 사용
adc B + E ; 올림수가 발생하는 자리는 adc 사용
adc A + D ; 올림수가 발생하는 자리는 adc 사용
덧셈이나 뺄셈 모두 뒤에서부터 올림 수나 빌림 수를 생각하여 계산해야 한다.
캐리 플래그 변경 명령어
clc: 클리어(0)
stc: 셋(1)
cmc: 보수(0이면 1, 1이면 0)
분기와 순환(Branching and Looping)
무조건 이동
C의 goto문과 같은 기능을 한다. 명령어는 jmp이다. 실행 코드 안에서 이동하기 때문에 코드 영역의 주소를 알아야 한다. 때문에 코드 영역에 라벨을 표시하여 명령어가 실행되면 라벨이 표시된 곳으로 이동한다.
라벨을 표시하는 방법은 ‘라벨:' //라벨은 사용자가 지정
pdf p/152 예제
jmp는 앞은 물론 뒤로도 가능하다.
jmp를 사용할 때 라벨은 문자임으로 어셈블러는 라벨을 숫자로 기억하고 라벨이 끝나는 자리를 기준으로 라벨이 붙혀진 곳을 계산하여 라벨점으로 이동하게 된다.
라벨 후 숫자의 용량을 뜻한다. short 1BYTE near은 4BYTE이다.
레지스터도 jmp명령어의 라벨이 될 수 있다. 이것을 레지스터 indirect라고 부른다.
또한 메모리에 저장된 값도 이동 기준이 될 수 있다.
'Busan IT > Assembly' 카테고리의 다른 글
확장/반복문, Procedures (0) | 2015.10.01 |
---|---|
조건문의 사용 (4) | 2015.09.30 |
기본 명령어(나눗셈, 나눗셈 연산 준비, 레지스터 확장) (1) | 2015.09.24 |
기본 명령어(inc, dec, neg, mul, imul) (0) | 2015.09.22 |
mov 명령어 (0) | 2015.09.21 |