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


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

 

II. 196 Assember

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

Áö³­ ½Ã°£¿¡ ¾ð±ÞÇÑ´ë·Î 196 ¾î¼Àºí¸®¾îÀÇ ¸í·ÉÀ» ±â´É¿¡ µû¶ó ¸î°¡Áö·Î ºÐ·ùÇغ¸¸é ´ÙÀ½°ú °°´Ù.

¨ç µ¥ÀÌÅÍ Àü¼Û ¸í·É : µ¥ÀÌÅÍÀÇ À̵¿¿¡ °üÇÑ ¸í·É

¨è »ê¼ú ¿¬»ê ¸í·É : »ê¼ú ¿¬»ê(addition, subtraction, multiplication, division)¿¡ °üÇÑ ¸í·É

¨é ³í¸® ¿¬»ê ¹× shift ¸í·É : ³í¸® ¿¬»ê°ú shift ¸í·É

¨ê branch ¸í·É : ÀÏ¹Ý ºÐ±â(jump) ¹× ºñ±³(compare), Á¶°Ç ºÐ±â¿¡ °üÇÑ ¸í·É

¨ë Stack°ú subroutine ¹× system Á¦¾î ¸í·É : subroutine call, return, stack Á¦¾î, system Á¦¾î ¸í·É

II-II-1. µ¥ÀÌÅÍ Àü¼Û ¸í·É

µ¥ÀÌÅÍ Àü¼Û ¸í·ÉÀº Àü¼ÛÇÏ´Â µ¥ÀÌÅÍÀÇ Å©±â¿¡ µû¶ó byte, word, double word Àü¼Û ¸í·É µîÀ¸·Î ºÐ·ùµÉ ¼ö ÀÖ´Ù. ¶ÇÇÑ ¹øÁö ÁöÁ¤ ¹æ½Ä(addressing mode)¿¡ µû¶ó register direct addressing mode, immediate addressing mode, indirect addressing mode, indirect addressing mode with auto increment µîÀ¸·Î ³ª´­ ¼ö Àִµ¥, ÀÌ´Â µ¥ÀÌÅÍ Àü¼Û¿¡¼­ »Ó ¾Æ´Ï¶ó µÚÀÇ ¸í·Éµé¿¡¼­µµ »ç¿ëµÇ¹Ç·Î Á¤È®È÷ ¾Ë¾ÆµÎ¾î¾ß ÇÑ´Ù.

¾î¼Àºí¸®¾îÀÇ ÇÑ ¹®ÀåÀÇ Çü½ÄÀº ÀÌ¹Ì ¾ð±ÞÇßÁö¸¸, ´ÙÀ½°ú °°´Ù.

<mnemonic> <Á¦ 1 operand>, <Á¦ 2 operand>, <Á¦ 3 operand>

ex) LDB 0F0H, 30H

µ¥ÀÌÅÍ Àü¼Û ¸í·É¿¡¼­´Â Á¦ 1 operand¿Í Á¦ 2 operand¸¸À» »ç¿ëÇÑ´Ù.

µ¥ÀÌÅÍ Àü¼Û ¸í·ÉÀº ¸ðµÎ ´ÙÀ½°ú °°´Ù.

 

mnemonic

byte

state

±â°è¾î

flagS

76543210

2 operand

1 operand

LD

2+BEA

4+CEA

101000aa

waop

wreg

Z N C V VT ST

LDB

2+BEA

4+CEA

101100aa

boap

breg


ST

2+BEA

4+CEA

110000aa

waop

wreg


STB

2+BEA

4+CEA

110001aa

baop

breg


XCH

3

5+CEA

00000100

waop

wreg


XCHB

3

5+CEA

00010100

baop

breg


LDBSE

2+BEA

4+CEA

101111aa

waop

wreg


LDBZE

2+BEA

4+CEA

101011aa

baop

breg


BMOVI

3

7+8/word

11001101

waop

lreg


 

¨ç aaÀÇ ÀÇ¹Ì ¨è operandÀÇ ÀǹÌ

 

aa

addressing mode

00

register direct

01

immediate

10

indirect

11

indexed

 

wreg

register fileÀÇ word register

waop

addressing mode¿¡¼­ ÁöÁ¤µÇ´Â word operand

breg

register fileÀÇ byte register

baop

addressing mode¿¡¼­ ÁöÁ¤µÇ´Â byte operand

lreg

register fileÀÇ long register

BEA

addressing mode¿¡¼­ ÇÊ¿äÇÑ byte

CEA

addressing mode¿¡¼­ ÇÊ¿äÇÑ state

 

* breg, wreg, lreg¸¦ »ç¿ëÇÏ´Â °æ¿ì boap´Â °ü°è¾øÁö¸¸, wreg´Â ¦¼ö, lreg´Â 4ÀÇ ¹è¼öÀÇ address°¡ µÇ¾î¾ß¸¸ ÇÑ´Ù.

:

06H

05H

04H

03H

02H

01H

00H

 

À§ÀÇ table¿¡¼­ LD(Load Data) Á¦ 2 operandÀÇ ³»¿ëÀ» Á¦ 1 operand ÀÇ ³»¿ëÀ¸·Î º¹»çÇÏ´Â ¸í·ÉÀÌ´Ù. µÚ¿¡ ºÙÀº B´Â byte¸¦ ÀǹÌÇÑ´Ù. ST(STore)´Â ¹Ý´ë ¹æÇâÀ¸·ÎÀÇ µ¥ÀÌÅÍ Àü¼Û ¸í·ÉÀÌ´Ù. ³ª¸ÓÁö´Â µÚ¿¡¼­ ¾ð±ÞÇϱâ·Î ÇÏ°í, ¿©±â¼­ ÀÌ ¸í·É¿¡ ´ëÇؼ­ °£´ÜÈ÷ ¾Ë¾Æº¸°í ¹øÁö ÁöÁ¤ ¹æ¹ý(addressing mode)¿¡ ´ëÇؼ­ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.

II-II-1-1 data Àü¼Û ¸í·É Çü½Ä

(1) Byte Àü¼Û ¸í·É Çü½Ä I

LDB <Á¦ 1 operand>, <Á¦ 2 operand>

¨ç Á¦ 1 operand´Â byte register, Á¦ 2 operand´Â byte register ¶Ç´Â ¹øÁö ÁöÁ¤¿¡ ÀÇÇؼ­ ÁöÁ¤µÇ´Â memoryÀÌ´Ù.

¨è °á°ú°¡ ÀúÀåµÇ´Â Á¦ 1 operand´Â ¹Ýµå½Ã 80196KCÀÇ register fileÀ̾î¾ß ÇÑ´Ù.

(2) Byte Àü¼Û ¸í·É Çü½Ä II

STB <Á¦ 1 operand>, <Á¦ 2 operand>

¨ç Á¦ 1 operand´Â byte register, Á¦ 2 operand´Â byte register ȤÀº ¹øÁö ÁöÁ¤¿¡ ÀÇÇØ ÁöÁ¤µÇ´Â memoryÀÌ´Ù.

¨è STB¿ª½Ã Á¦ 1 operand´Â ¹Ýµå½Ã register fileÀ̾î¾ß ÇÑ´Ù.

(3) Word Àü¼Û ¸í·É Çü½Ä I

LD <Á¦ 1 operand>, <Á¦ 2 operand>

¨ç Á¦ 1 operand´Â word register, Á¦ 2 operand´Â word register ȤÀº ¹øÁö ÁöÁ¤¿¡ ÀÇÇØ ÁöÁ¤µÇ´Â memoryÀÌ´Ù.

¨è ¿ª½Ã Á¦ 1 operand´Â register fileÀ̾î¾ß ÇÑ´Ù.

(4) Word Àü¼Û ¸í·É Çü½Ä II

ST <Á¦ 1 operand>, <Á¦ 2 operand>

¨ç Á¦ 1 operand´Â word register, Á¦ 2 operand´Â word register ȤÀº ¹øÁö ÁöÁ¤¿¡ ÀÇÇØ ÁöÁ¤µÇ´Â memoryÀÌ´Ù.

¨è Á¦ 1 operand´Â register fileÀ̾î¾ß ÇÑ´Ù.

À§¿¡¼­ º¼ ¼ö ÀÖµíÀÌ 196Àº ´Ù¸¥ CPU¿Í´Â ´Þ¸® µ¥ÀÌÅÍ Àü¼Û¿¡¼­ Á¦ 1 operand°¡ register file ³»ÀÇ ¾î¶² memory¶óµµ »ó°ü¾ø´Ù. º¸ÅëÀÇ CPU¿¡¼­´Â ¿ÜºÎ memory¸¦ accessÇϱâ À§Çؼ­´Â ƯÁ¤ÇÑ register¸¦ »ç¿ëÇϰųª accumulator»ç¿ëÇØ¾ß ÇÑ´Ù. ÀÌ´Â 196ÀÇ RALUÀÇ °­Á¡À̶ó ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌÁ¦ ºÎÅÍ´Â 196ÀÇ ¹øÁö ÁöÁ¤ ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.

II-II-1-2 ¹øÁö ÁöÁ¤ ¹æ¹ý(addressing mode)

(1) ·¹Áö½ºÅÍ Á÷Á¢ ¹øÁö ÁöÁ¤(register direct addressing mode)

register¿Í register °£ÀÇ data¸¦ Á÷Á¢ accessÇÒ ¶§ »ç¿ëµÈ´Ù.

ex) LDB 50H, 60H ; 60H byte registerÀÇ ³»¿ëÀ» 50H byte register·Î Àü¼ÛÇÑ´Ù.

LDB 41H, 0E0H ; 0E0H byte registerÀÇ ³»¿ëÀ» 41H byte register·Î Àü¼ÛÇÑ´Ù.

STB 77H, 88H ; 77H byte registerÀÇ ³»¿ëÀ» 88H byte register·Î Àü¼ÛÇÑ´Ù.

LD 50H, 64H ; 64H word regiserÀÇ ³»¿ëÀ» 50H word register·Î Àü¼ÛÇÑ´Ù.

ST 0A0H,86H ; 0A0H word registerÀÇ ³»¿ëÀ» 86H word register·Î Àü¼ÛÇÑ´Ù.

note

À§¿¡¼­ ¸»Çß´ø °Íó·³ word Àü¼ÛÀÇ °æ¿ì, operand´Â ¹Ýµå½Ã word registerÀÇ address°¡ µÇ¾î¾ß ÇÑ´Ù. Áï, ¦¼ö ¹øÁö¸¸ÀÌ »ç¿ëµÉ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°Àº °æ¿ì´Â error°¡ µÈ´Ù.

LD 51H, 60H

ST 6AH, 7FH

±×·¯³ª byte Àü¼ÛÀÇ °æ¿ì¿¡´Â ¾î¶² address¶óµµ »ó°üÀÌ ¾ø´Ù.

(2) immediate ¹øÁö ÁöÁ¤

¸í·É¾î¿¡ ÀúÀåµÉ data°¡ Á÷Á¢ Æ÷ÇԵǾî ÀÖ´Â °æ¿ìÀÇ addressing ¹æ¹ýÀ¸·Î register¿¡ ¿øÇÏ´Â data¸¦ ³Ö°í ½ÍÀ» ¶§¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿©±â¿¡ »ç¿ëµÇ´Â dataÀÇ ¾Õ¿¡´Â #À» »ç¿ëÇؼ­ address(variable name)¿Í ±¸ºÐÇÑ´Ù.

ex) LDB 81H, #50H ; byte register 81H¿¡ data 50H°¡ ÀúÀåµÈ´Ù.

LD 4AH, #1024 ; word register 4AH¿¡ ½ÊÁø¼ö 1024°¡ ÀúÀåµÈ´Ù.

LDB 0BBH, #'a' ; byte register 0BBH¿¡ 'a'ÀÇ ASCII code °ªÀÌ ÀúÀåµÈ´Ù.

note 1

µ¥ÀÌÅÍ°¡ word register¿¡ ÀúÀåµÇ´Â ¼ø¼­´Â ÇÏÀ§, »óÀ§ÀÇ ¼ø¼­·Î ÀúÀåµÈ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½ ¸í·ÉÀÌ ½ÇÇàµÈ ÈÄÀÇ memory(register file)ÀÇ ³»¿ëÀ» º¸¸é ¾Æ·¡¿Í °°´Ù.

              LD 50H, #1234H

              ( ¸í·É ½ÇÇà Àü )

52H

:


51H

??

ȗˤ byte

50H

??

ÇÏÀ§ byte

4FH

:


 

; word register 50H¿¡ data 1234H¸¦ ÀúÀåÇÑ´Ù.

              ( ¸í·É ½ÇÇà ÈÄ  )

52H

:


51H

12H

ȗˤ byte

50H

34H

ÇÏÀ§ byte

4FH

:


 

note 2

immediate addressing mode¿¡´Â STB, ST´Â ¾ø´Ù. µû¶ó¼­ ´ÙÀ½ ¸í·ÉÀÇ °æ¿ì´Â error°¡ µÈ´Ù.

STB #14, 50H

(3) °£Á¢ ¹øÁö ÁöÁ¤(indirect addressing mode)

°£Á¢ ¹øÁö ÁöÁ¤ÀÇ °æ¿ì¿¡´Â register¸¦ pointer·Î¼­ »ç¿ëÇÑ´Ù. Áï, registerÀÇ °ªÀÌ ½ÇÁ¦ »ç¿ëµÉ memoryÀÇ address°¡ µÈ´Ù. ÀÌ °æ¿ì [ ]¸¦ ÀÌ¿ëÇÏ¿© pointer·Î »ç¿ëµÇ°í ÀÖÀ½À» ³ªÅ¸³½´Ù. [ ]¾ÈÀÇ register´Â ¹Ýµå½Ã word register°¡ µÇ¾î¾ß ÇÑ´Ù(µû¶ó¼­ ¦¼ö address register°¡ µÇ¾î¾ß ÇÑ´Ù.). 0000H~0FFFFH±îÁöÀÇ memory ¿µ¿ªÀ» access Çϱâ À§ÇÑ ÁÖ¼Ò·Î »ç¿ëµÇ±â ¶§¹®ÀÌ´Ù.

                         ex) LDB 53H, [60H]

                           ( ¸í·É ½ÇÇà Àü )

 

ÁÖ¼Ò

:


61H

56H

ȗˤ byte

60H

33H

ÇÏÀ§ byte

:

:


:

:


53H

00H


52H

:


ÁÖ¼Ò


:


5635H

33H

5634H

22H

5633H

11H

:


:


; word register 60H°¡ °¡¸®Å°´Â memoryÀÇ ³»¿ëÀ» byte register 53H

; ¿¡ ÀúÀåÇÑ´Ù.

                        ( ¸í·É ½ÇÇà ÈÄ )

ÁÖ¼Ò

:


61H

56H

ȗˤ byte

60H

33H

ÇÏÀ§ byte

:

:


:

:


53H

11H


52H

:


ÁÖ¼Ò


:


5635H

33H

5634H

22H

5633H

11H

:


:


                           LD 60H, [70H]

                          ( ¸í·É ½ÇÇà Àü )

 

ÁÖ¼Ò

:


71H

56H

high byte

70H

34H

low byte

:

:


:

:


61H

00H

high byte

60H

00H

low byte

5FH

:


ÁÖ¼Ò


:


5636H

44H

5635H

33H

5634H

22H

5633H

11H

:




word register 70H°¡ °¡¸®Å°´Â memoryÀÇ ³»¿ëÀ» word register

; 60H¿¡ ÀúÀåÇÑ´Ù.

                           ( ¸í·É ½ÇÇà ÈÄ )

ÁÖ¼Ò

:


61H

56H

high byte

60H

34H

low byte

:

:


:

:


61H

33H

high byte

60H

22H

low byte

5FH

:


ÁÖ¼Ò


:


5636H

44H

5635H

33H

5634H

22H

5633H

11H

:


:

:

STB 53H, [80H] ; byte register 53HÀÇ ³»¿ëÀ» word register 80H°¡ °¡¸®Å°´Â memory

; ¿¡ ÀúÀåÇÑ´Ù.

                           ST 54H, [90H]

                           ( ¸í·É ½ÇÇà Àü )

ÁÖ¼Ò

:


91H

00H

high byte

90H

20H

low byte

:

:


:

:


55H

81H

high byte

54H

17H

low byte

53H

:


ÁÖ¼Ò


:


22H

00H

21H

00H

20H

00H

1FH

00H

:




 ; word register 54HÀÇ ³»¿ëÀ» word register 90H°¡ °¡¸®Å°´Â

; memory¿¡ ÀúÀåÇÑ´Ù.

                         ( ¸í·É ½ÇÇà ÈÄ )

ÁÖ¼Ò

:


91H

00H

high byte

90H

20H

low byte

:

:


:

:


55H

81H

high byte

54H

17H

low byte

53H

:


ÁÖ¼Ò


:


22H

00H

21H

81H

20H

17H

1FH

00H

:


:

:

note 1

¾Õ¼­ ¼³¸íÇßÁö¸¸, [ ] ¾ÈÀÇ register´Â ¹Ýµå½Ã word address register°¡ µÇ¾î¾ß ÇÑ´Ù. Áï, ¦¼ö address°¡ µÇ¾î¾ß ÇÑ´Ù. ´ÙÀ½°ú °°Àº ¸í·ÉÀº error´Ù.

LD 50H, [51H]

STB 59H, [5BH]

note 2

°£Á¢ ¹øÁö ÁöÁ¤À» Á¦ 1 operand¿¡ »ç¿ëÇÒ ¼ö ¾ø´Ù. Á¦ 1 operand´Â ¹Ýµå½Ã register file³»ÀÇ address¸¸ »ç¿ëµÉ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°Àº °æ¿ì´Â errorÀÌ´Ù.

LDB [50H], 70H

ST [4EH], 54H

(4) ÀÚµ¿ Áõ°¡(auto increment)°¡ ÀÖ´Â °£Á¢ ¹øÁö ÁöÁ¤

ÀÌ °æ¿ì´Â °£Á¢ ¹øÁö ÁöÁ¤°ú ºñ½ÁÇÏ´Ù. ±×·±µ¥, ¸í·É ½ÇÇà ÈÄ °£Á¢ ¹øÁö ÁöÁ¤¿¡ »ç¿ëÇÑ register°ªÀ» byteÀÇ °æ¿ì +1, wordÀÇ °æ¿ì +2¸¸Å­ Áõ°¡½ÃŲ´Ù. ÀÌ´Â °£Á¢ ¹øÁö ÁöÁ¤°ú increment ¸¦ È¥ÇÕÇØ ³õÀº °ÍÀ¸·Î, ƯÁ¤ ¿¬»êÀ» ÇÒ ¶§ Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. (ex. search, block copy, block fill...) °£Á¢ ¹øÁö ÁöÁ¤¿¡¼­ »ç¿ëÇÑ [ ]µÚ¿¡ +¸¦ ºÙ¿©¼­ [ ]+·Î ³ªÅ¸³½´Ù.

                        ex) LD 72H, [62H]+

                           ( ¸í·É ½ÇÇà Àü )

ÁÖ¼Ò

:


63H

96H

high byte

62H

24H

low byte

:

:


:

:


73H

81H

high byte

72H

17H

low byte

71H

:



ÁÖ¼Ò



:

:


9627H

55H


9626H

44H


9625H

33H

>

9624H

22H


9623H

11H


:

:

; 62H°¡ °¡¸®Å°´Â memoryÀÇ ³»¿ëÀ» 72H·Î Àü¼ÛÇÑ ÈÄ(word) 62HÀÇ

; °ªÀ» +2¸¸Å­ Áõ°¡½ÃŲ´Ù.

                             ( ¸í·É ½ÇÇà ÈÄ )

ÁÖ¼Ò

:


63H

96H

high byte

62H

26H

low byte

:

:


:

:


73H

33H

high byte

72H

22H

low byte

71H

:



ÁÖ¼Ò



:

:


9627H

55H

>

9626H

44H


9625H

33H


9624H

22H


9623H

11H


:

:

LDB 77H, [62H]+ ; 62H°¡ °¡¸®Å°´Â memoryÀÇ ³»¿ëÀ» 77H·Î Àü¼ÛÇÑ ÈÄ(byte) 62HÀÇ

; °ªÀ» +1 ¸¸Å­ Áõ°¡½ÃŲ´Ù.

ST 88H, [90H]+ ; 88HÀÇ ³»¿ëÀ»(word) 90H°¡ °¡¸®Å°´Â memory·Î Àü¼ÛÇÑ ÈÄ 90HÀÇ

; °ªÀ» +2 ¸¸Å­ Áõ°¡½ÃŲ´Ù.

                          STB 31H, [60H]+

                            ( ¸í·É ½ÇÇà Àü )

ÁÖ¼Ò

:


61H

84H

high byte

60H

20H

low byte

:

:


:

:


32H

00H

high byte

31H

FFH

low byte

30H

:



ÁÖ¼Ò



:

:


8423H

55H


8422H

44H


8421H

33H

>

8420H

22H


841FH

11H


:

:

; 31HÀÇ ³»¿ëÀ»(byte) 60H°¡ °¡¸®Å°´Â memory·Î Àü¼ÛÇÑ ÈÄ 60HÀÇ

; °ªÀ» +1 ¸¸Å­ Áõ°¡½ÃŲ´Ù.

                             ( ¸í·É ½ÇÇà ÈÄ )

ÁÖ¼Ò

:


61H

84H

high byte

60H

21H

low byte

:

:


:

:


32H

00H

high byte

31H

FFH

low byte

30H

:



ÁÖ¼Ò



:

:


8423H

55H


8422H

44H

>

8421H

33H


8420H

FFH


841FH

11H


:

:

ÀÚµ¿ Áõ°¡¸¦ »ç¿ëÇϸé inc ¸í·ÉÀ» ¾²Áö ¾Ê¾Æµµ µÇ¹Ç·Î ÇÁ·Î±×·¥À» °£´ÜÇÏ°Ô ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ¸Þ¸ð¸® 8000H~9000H ¹øÁö¸¦ 11H ¸ðµÎ ä¿ì°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ °£´ÜÈ÷ ÇÁ·Î±×·¥ÇÏ¸é µÈ´Ù.

LD 60H, #8000H

LDB 50H, #11H

LOOP: STB 50H, [60H]+

CMP 60H, #9000H

JNE LOOP

END



 

»óÈ£ : (ÁÖ) ·Îº¸ºí·° »ç¾÷ÀÚµî·Ï¹øÈ£: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