8051
AVR
EZLab
PIC
80C196KC
DSP
ARM
VHDL
¸¶ÀÌÅ©·Î¸¶¿ì½º
·Îº¿Ã౸
Battle ·Îº¿
·Îº¿´ëȸ
È޸շκ¿
Embeded Linux
HW/SW °­ÁÂ
RTOS
 
 

 

2. 196À» ¹è¿öº¸ÀÚ

 

II. 196 Assember

II-II. º»°ÝÀûÀÎ 196 ¾î¼Àºí¸®¾î

II-II-5. Stack°ú subroutine ¹× system Á¦¾î ¸í·É

´ÙÀ½Àº 196KCÀÇ stack/subroutine call/system ¸í·ÉÀ» ¸ðµÎ Á¤¸®ÇÑ °ÍÀÌ´Ù.

mnemonic

byte

state

operand

flags

1st

2nd

Z

N

C

V

VT

ST

I

PSE

PUSH

1

6/8+CEA

waop










POP

1

8/11+CEA


waop









PUSHF

1

6/8



0

0

0

0

0

0

0

0

POPF

1

7/10











PUSHA

1

12/18



0

0

0

0

0

0

0

0

POPA

1

12/18











LCALL

3

11/13

disp-high

disp-low









SCALL

2

11/13

disp










RET

1

11/14











EI

1

2

enable interrupt (I=1)







1


DI

1

2

disable interrupt (I=0)







0


EPTS


2

enable PTS (PSE=1)








1

DPTS


2

disable PTS (PSE=0)








0

TRAP

1

16/18

(SP)¡çIP, IP¡ç2010H









IDLPD

2

8/25

baop


0

0

0

0

0

0

0

0

RST

1

15

IP¡ç2080H

0

0

0

0

0

0

0

0

 

<À§ÀÇ Ç¥¿¡ ÀÖ´Â operand ¾à¾îÀÇ ÀǹÌ>

a/b : 'a'´Â stackÀÌ ³»ºÎ memory¿¡ ÀÖ´Â °æ¿ì, 'b'´Â stackÀÌ ¿ÜºÎ memory¿¡ ÀÖ´Â °æ¿ìÀÌ´Ù.

II-II-5-1. Stack Á¦¾î ¸í·É

ÇÁ·Î±×·¥¿¡ À־ stackÀº data¸¦ Àá½Ã ÀúÀåÇÏ´Â Àå¼Ò¶ó°í ÇÒ ¼ö ÀÖ´Ù. ÀÌ¹Ì ¾Ë°í ÀÖ´Â °Íó·³ stack¿¡¼­´Â °¡Àå ³ªÁß¿¡ µé¾î°£ data°¡ ¸Ç óÀ½ ³ª¿À°Ô µÇ¾îÀÖ´Ù.(LIFO - Last In First Out, or FILO) ÀÌ ¹Ý´ëÀÇ °³³äÀ¸·Î Queue°¡ ÀÖÀ» °ÍÀÌ´Ù.(FIFO - First In First Out) StackÀº ÇöÀç stackÀÇ ²À´ë±â(TOP)¸¦ °¡¸®Å°´Â pointer (SP - Stack Pointer)¿Í ½ÇÁ¦ data°¡ ÀÖ´Â Stack ¿µ¿ªÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù.

Stack¿¡ data¸¦ ³Ö´Â °úÁ¤À» push¶ó°í Çϸç, data¸¦ ²¨³»´Â °úÁ¤À» popÀ̶ó°í ÇÑ´Ù. 196¿¡¼­´Â 16bit (word)´ÜÀ§·Î data¸¦ ³Ö°í »©³¾ ¼ö ÀÖ´Ù. data¸¦ ³ÖÀ¸¸é, SP´Â °¨¼ÒÇÏ°Ô µÇ°í, data¸¦ »©³»¸é SP´Â Áõ°¡ÇÏ°Ô µÈ´Ù. ¶Ç 196ÀÇ SP´Â »ç¿ëÀÚ°¡ ¸¶À½´ë·Î °ªÀ» ¼³Á¤ÇÏ¿© stackÀÇ À§Ä¡¸¦ °áÁ¤ÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù. ³»ºÎ memory¿¡ ȤÀº ¿ÜºÎ memory¿¡µµ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¿ÜºÎ memory¿¡ stackÀ» ¼³Á¤Çϸé push¿Í popÀ» ÇÏ´Â ½Ã°£ÀÌ ´õ °É¸®°Ô µÈ´Ù.

                      

(1) PUSH/POP (Push/Pop word)

word operand¸¦ stack¿¡ push/pop ÇÏ´Â ¸í·ÉÀÌ´Ù.

Çü½Ä> PUSH <word operand> ; SP¡çSP-2, [SP]¡ç<word operand>

POP <word operand> ; <word operand>¡ç[SP], SP¡çSP+2

ex) LD SP, #0F0H ; ³»ºÎ register ¿µ¿ª¿¡ stack ÁöÁ¤

LD 50H, #1234H -------- ¨ç

PUSH 50H

CLR 50H -------- ¨è

: : :

POP 50H -------- ¨é

¨ç¸í·É±îÁö ½ÇÇà ÈÄ ¨è¸í·É±îÁö ½ÇÇà ÈÄ ¨é¸í·É±îÁö ½ÇÇà ÈÄ

addr

low byte

high byte


SP

F0H

00H


50H

34H

12H









¡æ

00F0H



 

addr

low byte

high byte


SP

EEH

00H


50H

00H

00H


:

:

:

¡æ

00EEH

34H

12H


00F0H



 

addr

low byte

high byte


SP

F0H

00H


50H

34H

12H






00EEH

34H

12H

¡æ

00F0H



 

¶Ç StackÀÇ ´Ù¸¥ Ư¡Àº ´ÙÀ½°ú °°´Ù.

¨ç stackÀº memoryÀÇ ³ôÀº addressºÎÅÍ ³·Àº address·Î Ä¿Áö°Ô µÈ´Ù. POP ¸í·ÉÀº SP¸¦ 2 Áõ°¡½ÃÅ°°í, PUSH ¸í·ÉÀº SP¸¦ 2 °¨¼Ò½ÃŲ´Ù.

¨è PUSH/POP ¿¡´Â Ç×»ó word°¡ ¿òÁ÷À̹ǷÎ, word operand¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

¨é PUSH/POP ¸í·ÉÀº data°¡ ÀÖ´Â memory À§Ä¡¸¦ SP°¡ Áö½ÃÇÏ°í Àֱ⠶§¹®¿¡, LD 50H, 2[SP] µîÀÇ ¸í·ÉÀ» »ç¿ëÇÏ¿©, SP¸¦ ÀÌ¿ëÇÑ °£Á¢ ¹øÁö ÁöÁ¤À¸·Î stack¿¡ ÀÖ´Â data¸¦ accessÇÒ ¼ö ÀÖ´Ù.

(2) PUSHF/POPF (Push/Pop Flags)

ÀÌ´Â PSW(Program Status Word)¸¦ push/pop ÇÏ´Â ¸í·ÉÀÌ´Ù. PSW¸¦ pushÇϸé PSW´Â 0ÀÌ µÇ¾î interrupt´Â disableµÇ°í, PSWÇÏÀ§ÀÇ interrupt mask °ªµµ push µÈ´Ù. »ê¼ú ¿¬»êÀ̳ª ±× ¿ÜÀÇ PSW¿¡ ¿µÇâÀ» ÁÖ´Â ¸í·É ÈÄ¿¡ subroutineÀ» callÇÑ °æ¿ì, subroutine¿¡ PSWÀÇ °ª¿¡ ¿µÇâÀ» ÁÖ´Â ¸í·ÉµéÀÌ ÀÖ´Ù¸é, PSWÀÇ °ªÀ» º¸Á¸Çϱâ À§Çؼ­ routine óÀ½¿¡ ÀÌ°°Àº ¸í·ÉÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.

Çü½Ä> PUSHF ; SP¡çSP-2, [SP]¡çPSW, PSW¡ç0(¡æinterrupt disable)

POPF ; PSW¡ç[SP], SP¡çSP+2

(3) PUSHA/POPA (Push/Pop All)

ÀÌ ¸í·ÉÀº 8096ÀÇ PUSHF/POPF¸¦ º¸°­ÇÏ¿©, 80196¿¡¼­ º¸°­µÈ interrupt mask1ÀÇ °ª°ú WSRÀÇ °ªµµ °°ÀÌ push/popÇÏ´Â ¸í·ÉÀÌ´Ù. ÀÌ ¸í·ÉÀº PSW¿Í interrupt1ÀÇ ³»¿ëÀ» push/pop ÇÏ°Ô µÇ¸ç, À§¿Í ¸¶Âù°¡Áö·Î push ÈÄÀÇ PSWÀÇ °ªÀº 0ÀÌ µÈ´Ù.

Çü½Ä> PUSHA ; SP¡çSP-2, [SP]¡çPSW/INT_MASK, PSW¡ç0(¡æinterrupt disable)

; SP¡çSP-2, [SP]¡çINT_MASK1/WSR, INT_MASK1¡ç0

POPA ; INT_MASK1/WSR¡ç[SP], SP¡çSP+2

; PSW/INT_MASK¡ç[SP], SP¡çSP+2

II-II-5-2. Subroutine call ¸í·É

SubroutineÀº ÇÁ·Î±×·¡¸Ó°¡ À̸§À» ºÙÀΠƯº°ÇÑ ±â´ÉÀ» °¡Áø ÇÁ·Î±×·¥ blockÀÌ´Ù. ¿¹¸¦ µé¾î Ư¼öÇÑ °èÇÑÀ» ÇÑ´Ù´ø°¡, stringÀ» LCD¿¡ Ãâ·ÂÇÏ´Â blockµîÀÌ µÉ °ÍÀÌ´Ù. ÀÌ·¯ÇÑ subroutineµéÀº ÇÁ·Î±×·¥ÀÇ ¾î´À ºÎºÐ¿¡¼­µçÁö »ç¿ëÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. µû¶ó¼­ subroutineÀº ºÐ±â¿Í´Â ´Ù¸£´Ù´Â °ÍÀ» ¸í½ÉÇØ¾ß ÇÑ´Ù. ¶Ç ÀÌ subroutineÀº Çѹø »ç¿ëÇÏ°í ³­ µÚ, ¿ø·¡ÀÇ À§Ä¡·Î º¹±ÍÇØ¾ß ÇϹǷÎ, ºÐ±â(jump)¿Í´Â ´Ù¸£°Ô »ç¿ëµÈ´Ù. Áï, subroutineÀº call ¸í·É¿¡ ÀÇÇØ ºÒ·¯Áö°í, return ¸í·É¿¡ ÀÇÇØ ¿ø·¡ÀÇ À§Ä¡·Î º¹±ÍÇÏ°Ô µÈ´Ù. ¶Ç CALL°ú RET¿¡¼­´Â À§Ä¡¸¦ ±â¾ïÇÏ°í µÇµ¹¾Æ°¡±â À§Çؼ­ stackÀ» »ç¿ëÇÑ´Ù.

                                   

ÇÁ·Î±×·¥¿¡¼­ CALLÀ» ÇÏ°Ô µÇ¸é º¯À§ ¸¸Å­ÀÇ À§Ä¡·Î JumpÇÏ°Ô µÈ´Ù. ±×·¯³ª ¿©±â¼­´Â º¸ÅëÀÇ jump¿Í´Â ´Þ¸® jump¿Í ÇÔ²², CALL ´ÙÀ½ ¸í·ÉÀÇ address¸¦ (Áï, ÇöÀçÀÇ IP) stack¿¡ ÀúÀåÇÑ´Ù. jump ÈÄ subroutineÀ» ½ÇÇàÀÌ ¸ðµÎ ³¡³ª¸é returnÀ¸·Î mainÀ¸·Î º¹±ÍÇÏ°Ô µÇ´Âµ¥, À̶§ return ¸í·ÉÀº stack¿¡¼­ ÀÌÀüÀÇ IP¸¦ popÇÏ¿© ÇöÀçÀÇ IP¿¡ ³Ö°Ô µÈ´Ù. ÀÌ·¸°Ô Çϸé, call ÀÌÈÄÀÇ ¸í·ÉÀ¸·Î ¹Ù·Î º¹±ÍÇÒ ¼ö ÀÖ´Ù. Áï, CALL°ú RETÀÇ ½ÇÇà°úÁ¤À» ¿ä¾àÇÏ¸é ´ÙÀ½°ú °°´Ù.(½ÇÁ¦·Î ÀϾ´Â ÀÏ)

CALL XXX ; SP¡çSP-2, [SP]¡çIP, IP¡çIP+displacement(jump)

RET ; IP¡ç[SP], SP¡çSP+2

196KC¿¡´Â JUMP¿Í ¸¶Âù°¡Áö·Î LCALL°ú SCALLÀÌ ÀÖ´Ù.

(1) LCALL (Long Call)

ÀÌ ¸í·ÉÀº ÇöÀç À§Ä¡¿¡¼­ -32768~32767ÀÇ À§Ä¡(196KCÀÇ ¸ðµç address space)¿¡ ÀÖ´Â subroutineÀ» call ÇÒ ¶§ »ç¿ëÇÑ´Ù.

Çü½Ä> LCALL <displacement word> ; ÇöÀç À§Ä¡¿¡¼­ -32768~+32767ÀÇ À§Ä¡·Î branch

(2) SCALL (Short Call)

ÀÌ ¸í·ÉÀº ÇöÀç À§Ä¡¿¡¼­ -1024~+1024(1K)ÀÇ À§Ä¡¿¡ ÀÖ´Â subroutineÀ» call ÇÒ ¶§ »ç¿ëÇÑ´Ù. SJMP¿¡¼­¿Í ¸¶Âù°¡Áö·Î, ÀÌ ¸í·ÉÀº LCALLº¸´Ù ±â°è¾î code°¡ 1byte À۱⠶§¹®¿¡ 1K À̳»ÀÇ subroutineÀ» callÇÒ ¶§ »ç¿ëÇϸé memory¸¦ Àý¾àÇÒ ¼ö ÀÖ´Ù.

Çü½Ä> SCALL <displacement 11bit>

note> ASM96¿¡¼­´Â CALL ¸í·ÉÀ» »ç¿ëÇϸé, assembler°¡ ÀÚµ¿À¸·Î SCALL/LCALLÀ¸·Î º¯È¯ÇØÁØ´Ù. ¶Ç JMP¿¡¼­¿Í ¸¶Âù°¡Áö·Î º¯À§´Â labelÀ» »ç¿ëÇÏ¸é µÈ´Ù.

subroutine¿¡¼­ stackÀ» »ç¿ëÇÒ °æ¿ì RET Àü¿¡ ¹Ýµå½Ã pushÇÑ data´Â ¸ðµÎ popÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ¿¹»óÄ¡ ¸øÇÑ ¿À·ù°¡ »ý±æ °ÍÀÌ´Ù.

II-II-5-3. System Á¦¾î ¸í·É

(1) EI/DI (Enable/Disable Interrupts)

maskable interrupt¸¦ ¸ðµÎ enable/disable ÇÑ´Ù.

Çü½Ä> EI ; I flag=1

DI ; I flag=0

(2) EPTS/DPTS (Enable/Disble PTSs)

PTS(Peripheral Transaction Server)¸¦ ¸ðµÎ enable/disable ÇÑ´Ù.

Çü½Ä> EPTS ; PSE flag=1

DPTS ; PSE flag=0

(3) TRAP

interrupt callÀÇ ÀÏÁ¾À¸·Î, memory address 2010H·Î jumpÇÑ´Ù. µ¿ÀÛÀº ´ÙÀ½°ú °°´Ù.

SP¡çSP-2, (SP)¡çIP, IP¡ç(2010H)

ÀÌ ¸í·ÉÀº programÀ» debugging ÇÒ ¶§ »ç¿ëÇÏ¸é µÈ´Ù.

(4) RST (software Reset)

systemÀ» resetÇÏ´Â ¸í·ÉÀÌ´Ù. Áï, PSW=0, IP´Â 2080H·Î ÃʱâÈ­µÇ¸ç, SFRµµ ÃʱⰪÀ¸·Î settingµÈ´Ù. hardware reset°ú °°Àº È¿°ú°¡ ÀÖ´Ù.

(5) IDLPD

ÀÌ ¸í·ÉÀº CPU¸¦ idle/power down mode·Î µé¾î°¡°Ô Çϰųª reset½ÃŲ´Ù.

Çü½Ä> IDLPD #key(byte)

key

±â´É

1

idle mode

2

power down mode

´Ù¸¥°ª

reset

 

       Âü°í : http://www.postech.ac.kr/group/poweron/ - lectures/Micro processor, controller, µ¿¾Æ¸® °­ÀÇ

                         Âü°í ¼­Àû : Micro controller 80196 ±âÃʺÎÅÍ ÀÀ¿ë±îÁö - Â÷¿µ¹è Àú

 

<Programming Exercise>

1. ´ÙÀ½ ÇÁ·Î±×·¥À» ÀÛ¼ºÇ϶ó.

(1) byte register 20H¿¡ ÀÖ´Â 2°³ÀÇ 16Áø¼ö¸¦ ASCII code·Î ¹Ù²Ù¾î¼­ byte register 30H, 31H¿¡ ÀúÀåÇÏ´Â ÇÁ·Î±×·¥.

Âü°í)

ASCII

Hex

ASCII

Hex

2FH

/

39H

9

30H

0

3AH

:

31H

1

40H

@

32H

2

41H

A

33H

3

42H

B

34H

4

43H

C

35H

5

44H

D

36H

6

45H

E

37H

7

46H

F

38H

8

47H

G

 

2. ´ÙÀ½ ºó Ä­À» ä¿öº¸ÀÚ.

¸í·É

SP

20H

21H

22H

23H

24H

25H

stack ³»¿ë([SP])

low

high

low

high

LD SP, #7EE0H











LD 50H, #0











ST 50H, [SP]











LD 20H, #1234H











LD 22H, #5678H











LD 24H, #0A0BH











PUSH 20H











PUSH 22H











PUSH 24H











XCH 20H, 22H











XCH 20H, 24H











POP 24H











POP 22H











POP 20H













 

»óÈ£ : (ÁÖ) ·Îº¸ºí·° »ç¾÷ÀÚµî·Ï¹øÈ£:214-86-56219 Åë½ÅÆǸž÷½Å°í19-2544 ´ëÇ¥: ½Å´ë¼· ÀüÈ­:(02)2679-8556 Fax :(02)2679-8557 [°³ÀÎÁ¤º¸Ã³¸®¹æħ]
º»»ç : °æ±âµµ ºÎõ½Ã ¿ø¹Ì±¸ ¾à´ëµ¿ ºÎõ Å×Å©³ëÆÄÅ© 401µ¿ 502È£     ¼­¿ï»ç¹«¼Ò : ¼­¿ï½Ã ¿µµîÆ÷±¸ ¹®·¡µ¿ 4°¡ 8-1 4Ãþ
Copyright(C) 2004, (ÁÖ) ·Îº¸ºí·° ½Ã½ºÅÛÁî All Rights Reserved E-Mail : WebMaster