크리에이티브 커먼즈 라이센스

홈페이지HOME

PHP

JavaScript

HTML

CSS

드롭다운메뉴

제로보드4

도   움   말

백지 건강강좌/자가임상체험

물박사(자가면역질환...)^미러

전동명(천연물질사전)^미러

竹田 장승옥(블로그)^글목록

계산환산(계산기)^ 단위변환

관주성경 TTS 일반파일 TTS

바이블로 Bible_ro 다운로드

다운로드>폰에 복사
>파일선택...설치됩니다.

[도움말 보기] 바로가기

개선 요구, 충고는
아래 관리자 연락
전화/메일 부탁 드립니다.
최대한 빨리 처리하고
업데이트 올리겠습니다.


asm_90.


플래그 레지스터


     42 이형문 buju8t 01/15 1035

    13 플래그 레지스터에 대해.....



조건분기명령은 비교명령이나 연산명령의 결과에 따라서 분기합니다.

그러나, 정확히 말하자면 비교명령이나 연산명령의 결과에 의해 세트된

플래그 레지스터의 값에 따라서 분기하는 것입니다.

 플래그 레지스터는 여러 가지 상태를 기억하기 위한 레지스터 입니다.






+------------------------------------------------------------------+


 *플래그 레지스터의 각 비트의 명칭

 

 

공백인

비트는 사용하지 않읍니다.


 비트 15 14 13 12 11 10 9  8

 7  6  5  4  3  2  1  0  

 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

 

 OFDFIFTFSFZF

 AF  PF  CF  

 +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

 

+------------------------------------------------------------------+






스테이터스 플래그(  status

flag)

연산의 결과에 따라서 세트

혹은 리셋되는 플래그로 다음과 같은

것이 있읍니다.


-CF : 캐리플래그 (carry flag)

연산한 결과,최상의 비트로

부터의 높은 자리로 자리올림(캐리)

혹은 최상의 비트로 부터의

빌림이 발생한 경우에 1로 세트되고

그 이외의 경우 0으로 세트됩니다.

-PF :패리티 플래그(parity flag)

연산한 결과, 1로된 비트의

수가 짝수개(EVEN)일 때 1로 세트되

고 그 이외의 경우 0으로 리셋됩니다.

-AF : 보조 캐리플래그(auxiliary carry flag)

8(16)비트 연산에서,하위 4(8)

비트로 부터 상위 4 비트로 자리

올림 혹은 빌림이 발생한 경우에

1로 리셋된다. 10진 보정 명령에

있어서도 사용 됩니다.

-ZF : 제로 플래그(zero flag)

연산한 결과가 0으로 되었을

때에 1로 세트되고,그이외일 때는

0으로 리셋됩니다.

-SF :사인 플래래그(sign flag)

연산한 결과,최상의 비트가

1이 되었을 때(즉,보수표현으로

음수가 되었을 때) 1로 세트되고,그이외일

때는 0으로 리셋됩니다.

-OF : 오버플로우 플래그(overflow flag)

연산을 부호가 달린 숫자로

했을때,오버 플로우 혹은 언더 플로우

가 발생한 경우에 1로 세트되고,그

이외일 때는 0으로 리셋됩니다.






콘트롤 플래그(control flag)

 CPU의 동작 상태 를

제어하는 레지스터로 플래그 제어 명령이나

 플래그 전송명령을 사용하여

프로그램 중에서 세트 혹은 리셋

 됩니다.


-DF : 디렉션 플래그(direction flag)

스트링 조작을 할 때에 이

플래그가 0이면 번지를 나타내는

레지스터값이 자동으로 증가하고 1이면 레지스터값은 자동적으로

감소합니다.

-IF : 인터럽트 플래그(interrupt flag)

이 플래그가 0 일 때 INTR단자로

부터의 외부 인터럽트 요구는

무시되고,1 일 때에는 외부

인터럽트 요구를 받아 들일 수 있게

됩니다.

-TF : 트랩 플래그(trap flag)

이 플래그가 0일 때 CPU 는

보통대로 명령을 실행한다.이 플래그가

1일 때 CPU 는 한 명령을  실행할

때마다 자동적으로 내부 인터럽트


(INT1)가 발생하고,인터럽트

처리 루틴으로 들어간다.(단, 이 처리

루틴의 실행중에는 트랩플래그는

0으로 클리어 된다).이 플래그는

프로그램의 추적에 사용됩니다.






플래그 레지스터 제어 명령 과 전송 명령


STC (Set Carry flag)  캐리플러그를

1로 세트한다.

CLC (CLear Carry flag)  캐리플러그를

0으로 리셋한다.

CMC (CoMplement Carry flag) 캐리플래그가 0이면 1로

1이면 0으로

세트한다.

STD(Set Direction flag) 디렉션

플래그를 1로 세트한다.

CLD(CLear Direction flag)  디렉션 플래그를 0으로 리셋한다

STI(Set Interrupt-enable flag)  인터럽트 플래그를 1로 세트한다.

CLI(CLear Interrupt-enable flag)  인터럽트 플래그를 0으로 세트한다.

LAHF(Load AH from Flags)  플래그

레지스터의 하위 8비트를 AH레지

스터로

전송한다.사용하지 않는 비트의

값은

정해져 있지 않다.

SAHF(Store AH into Flags) AH레지스터의

내용을 플래그레지스터의

하위

8비트에 전송한다.

PUSHF (PUSH Flas onto stack)  플래그 레지스터의 내용을 스택(stag)상

푸쉬(PUSH:삽입)한다.

POPF  (POP Flags off stack) 스택 위의 워드데이터를

플래그레지스터

POP한다.






다음 두 명령의 차이를 알아 봅시다.


CMP AX,BX ;AX레지스터로

부터 BX 레지스터를 가상적으로  뺀

다음

그 결과에 따라 플래그 레지스터만을 변화시킨다.


SUB AX,BX ;AX레지스터에서

BX 레지스터를 뺀다음 그결과에 따라

플래그 레지스터를 변화 시킨다.


결국 두명령의 결과 플래그

레지스터의 결과는 똑 같읍니다.


플래그 레지스터의 값은 산술 논리연산을 행할 때에 세트 리셋되고,전송

명령이나 분기명령에서는 변화하지 않읍니다.따라서 비교명령과 분기명령

사이에 전송명령등을 사용할 수 있읍니다.


CODE  SEGMENT

ASSUME CS:CODE

MOV AX,1234H

MOV BX,8888H

CMP BX,0

JB L1

JL L1

NOP

8888H를

부호없는 숫자로 간주하면 0보다 크므로

JB에서는 분기하지 않는다 그러나 부호있는 숫자로

보면

0보다 작으므로 JL에서 분기한다.

L1: CMP AX,BX

JG L2  ;부호있는 숫자로

보았을 때 AX가 크므로 JG에서 분기한다.

JA L2

NOP

L2: ADD AX,8000H

JC L3

JS L3 ;1234H에

8000H를 더하면 9234H가 된다.자리 올림이

 생기지

않으므로 캐리플러그는 0이 된다.그러나 최상위

 비트가

1이 되므로 사인 플러그는 1이 된다.

 따라서

JC 에서는 분기하지 않고JS에서 분기한다.

NOP ;아무것도

하지 않는다는 명령

L3: ADD AX,8000H  ;두 수를 더하면 자리올림이

발생하고 결과는 1234H

된다.이때 캐리 플러그는 1로 세트된다.제로가

아니므로

제로 플러그는 0이다.

MOV AX,0

JZ L4

JC L4  ; 캐리플러그가

1이므로 분기한다.

NOP

L4: MOV AX,0FFFFH

ADD AX,1

JC L5

NOP

L5: CLC ;CLC는 clear carry로서

캐리플러그를 0으로 만든다.

MOV AX,0FFFFH

INC AX  ;INC명령에 의해

자리 올림이 생긴 경우에는  캐리

 플러그의

값은 변화하지 않는다.

JC L6

JE L6

NOP

L6: MOV AH,4CH

INT 21H

CODE  ENDS

END






플래그 레지스터를 보는 방법


+-----------+----+----+----+----+----+----+----+----+

플래그 이름 OF  DF  IF  SF  ZF  AF  PF  CF


+-----------+----+----+----+----+----+----+----+----+

 0  NV  UP

 DI  PL  NZ  NA  PO  NC

+-----------+----+----+----+----+----+----+----+----+

 1  OV  DN

 EI  NG  ZR  AC  PE  CY

+---  --------+----+----+----+----+----+----+----+----+


약자를 읽어 내는 방법


NV:not overflow OV:overflow

UP:up DN:down


DI:disable interrupt  EI:enable interrupt

PL:plus NG:negative


NZ:not zero ZR:zero

NA:not auxiliary carry  AC:auxiliary carry

PO:parity odd PE:parity

even

NC:not carry  CY:carry






INC명령과 DEC명령은 캐리플래그에 영향을 주지 않읍니다.


-T


AX=1234  BX=0000  CX=003F  DX=0000  SP=0000  BP=0000

 SI=0000  DI=0000

DS=54EF  ES=54EF  SS=54FF  CS=54FF  IP=0003 NV

UP EI NG NZ NA PE NC

54FF:0003 BB8888  MOV BX,8888

-T


AX=1234  BX=8888  CX=003F  DX=0000  SP=0000  BP=0000

 SI=0000  DI=0000

DS=54EF  ES=54EF  SS=54FF  CS=54FF  IP=0006 NV

UP EI NG NZ NA PE NC

54FF:0006 83FB00  CMP BX,+00

-T


AX=1234  BX=8888  CX=003F  DX=0000  SP=0000  BP=0000

 SI=0000  DI=0000

DS=54EF  ES=54EF  SS=54FF  CS=54FF  IP=0009 NV

UP EI NG NZ NA PE NC

54FF:0009 7203  JB  000E

BX레지스터와 0H 의 비교 결과에 따라 플래그레지스터가 세트됩니다.

뺄셈결과 8888H이므로 최상의 비트는 1이 되고 사인플래그는 NG(음수)가

됩니다.빌림이 발생하지 않았으므로 캐리플러그는 NC(0) 가되고 오버플래그

는 NV(0)가 됩니다.


-T


AX=1234  BX=8888  CX=003F  DX=0000  SP=0000  BP=0000

 SI=0000  DI=0000

DS=54EF  ES=54EF  SS=54FF  CS=54FF  IP=000B NV

UP EI NG NZ NA PE NC

54FF:000B 7C01  JL  000E

-Q



ID:
PW:

     0 분
     3 분

자유게시판

건강백과 HOME

홈페이지 HOME

조   약     HOME

생활지혜 HOME

서식양식 HOME

법원 전산양식 검색

In Na zum

비공개 HOME

백과넷 포탈 : 건강/법률(메인)/홈피/서식/조약/생활지혜

◁ 2002.9.1.~2018.10.16. ▷

관리자 연락(저작권 의심 신고) : 김병희 010-6204-4973 k8z7@hanmail.net