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

|