๊ด€๋ฆฌ ๋ฉ”๋‰ด

IT’s Portfolio

[System] The Elements of Computing System - 4 ๋ณธ๋ฌธ

Development Study/Rust

[System] The Elements of Computing System - 4

f1r3_r41n 2023. 11. 8. 13:52
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ป The Elements of Computing System - 4

๐Ÿค” ๊ธฐ๊ณ„์–ด

  • ํ”„๋กœ์„ธ์„œ์™€ ๋ ˆ์ง€์Šคํ„ฐ๋“ค์„ ์ด์šฉํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ทœ์น™
  • ๋Œ€์ƒ ํ•˜๋“œ์›จ์–ด ํ”Œ๋žซํผ์—์„œ ์ง์ ‘ ๋ช…๋ น ์‹คํ–‰ ๋ฐ ํ•˜๋“œ์›จ์–ด ์™„์ „ ์ œ์–ด๊ฐ€ ๋ชฉ์ 
  • ๋ฉ”๋ชจ๋ฆฌ : ์ปดํ“จํ„ฐ์—์„œ ๋ฐ์ดํ„ฐ์™€ ๋ช…๋ น์–ด๋ฅผ ์ €์žฅํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ์žฅ์น˜
  • ํ”„๋กœ์„ธ์„œ : CPU๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํ”„๋กœ์„ธ์„œ๋Š” ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ๊ธฐ์ดˆ ์—ฐ์‚ฐ๋“ค์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์žฅ์น˜
    • ๋ฉ”๋ชจ๋ฆฌ์™€ ๋ ˆ์ง€์Šคํ„ฐ์— ์žˆ๋Š” 2์ง„ ๊ฐ’์„ ํ”ผ์—ฐ์‚ฐ์ž๋กœ ๋‘๊ณ , ์—ฐ์‚ฐ์„ ์ถœ๋ ฅ๊ฐ’์€ ์„ ํƒ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋‚˜ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋จ
  • ๋ ˆ์ง€์Šคํ„ฐ : ํ•ญ์ƒ CPU์™€ ๊ฑฐ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ์—๋Š” ์‹œ๊ฐ„์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์„ธ์„œ๋Š” ๊ฐ’์„ ํ•˜๋‚˜ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋ฐ”๋กœ ์˜†์— ์—ฌ๋Ÿฌ ๊ฐœ ๋‘๊ณ  ์žˆ์Œ

๐Ÿค” ์–ธ์–ด

  • ๊ธฐ๊ณ„์–ด ํ”„๋กœ๊ทธ๋žจ์€ ๋ช…๋ น์–ด๋“ค์„ 2์ง„ ์ฝ”๋“œํ™” ํ•œ ๊ฒƒ
  • ๊ธฐ๊ณ„์–ด๋Š” ๋ณดํ†ต 2์ง„ ์ฝ”๋“œ์™€ ์—ฐ์‚ฐ๊ธฐํ˜ธ๋ฅผ ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•˜๋„๋ก ๋˜์–ด ์žˆ์Œ
  • 16๋น„ํŠธ ์ปดํ“จํ„ฐ ๋ช…๋ น : 1010 0011 0001 1001
    • 4๋น„ํŠธ์”ฉ 4๊ฐœ์˜ ํ•„๋“œ๋กœ ๊ตฌ์„ฑ
    • ๋งจ ์™ผ์ชฝ ํ•„๋“œ๋Š” CPU ์—ฐ์‚ฐ ์ข…๋ฅ˜, ๋‚˜๋จธ์ง€๋Š” ํ”ผ์—ฐ์‚ฐ์ž
    • 1010 ์€ ADD, ๋‚˜๋จธ์ง€ ํ•„๋“œ๋Š” ๊ฐ๊ฐ R3, R1, R9 ์˜๋ฏธ
  • ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด or ์–ด์…ˆ๋ธ”๋ฆฌ : ์—ฐ์‚ฐ๊ธฐํ˜ธ๋“ค์„ ์‚ฌ์šฉํ•œ ํ‘œ๊ธฐ๋ฒ•
  • ์–ด์…ˆ๋ธ”๋Ÿฌ : ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ 2์ง„ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋กœ ๋ณ€์—ญํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

๐Ÿค” ๋ช…๋ น

// R1, R2, R3๋Š” ๋ ˆ์ง€์Šคํ„ฐ
ADD R2,R1,R3    // R2<-R1+R3
ADD R2,R1,foo   // R2<-R1+foo, foo๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฆ„, foo๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ฐ’์„ ๋œปํ•จ
AND R1,R1,R2    // R1<-R1๊ณผ R2๋ฅผ ๋น„ํŠธ ๋‹จ์œ„ And ์—ฐ์‚ฐ ๊ฒฐ๊ณผ
  • ์‚ฐ์ˆ  ๋ฐ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ
    • ๋ชจ๋“  ์ปดํ“จํ„ฐ์—๋Š” ๊ธฐ์ดˆ ์‚ฐ์ˆ  ์—ฐ์‚ฐ ์™ธ์—๋„ ๋น„ํŠธ ๋ฐ˜์ „, ๋น„ํŠธ ์ด๋™ ๋“ฑ์˜ ๋ถˆ์—ฐ์‚ฐ, ๋…ผ๋ฆฌ ์—ฐ์‚ฐ๋„ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ
// ์ง์ ‘ ์ฃผ์†Œ ์ง€์ • ๋ฐฉ์‹
LOAD R1,67  // R1<-Memory[67]
LOAD R1,bar // R1<-Memory[67], bar๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ 67์„ ๊ฐ€๋ฆฌํ‚ด

// ์ฆ‰์‹œ ์ฃผ์†Œ ์ง€์ • ๋ฐฉ์‹
LOAD R1,67  // R1<-67

// ๊ฐ„์ ‘ ์ฃผ์†Œ ์ง€์ • ๋ฐฉ์‹
// x=foo[j] or x=*(foo+j)
ADD R1,foo,j    // R1<-foo+j
LOAD* R2,R1     // R2<-Memory[R1]
STR R2,x        // x<-R2
  • ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ
    • ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์€ ์‚ฐ์ˆ  ๋ฐ ๋…ผ๋ฆฌ ๋ช…๋ น์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํฌํ•จ๋˜์–ด ์žˆ์Œ
    • ๋ ˆ์ง€์Šคํ„ฐ์™€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋™์‹œํ‚ค๋Š” ๋กœ๋“œ, ์ €์žฅ ๋ช…๋ น์ด ์žˆ์Œ
// High
while(R1>=0) {
    (1)...
}
(2)...

// Low
beginWhile:
    JNG R1, endWhile    // If R1<0 goto endWhile
    (1)...
    JMP beginWhile      // goto beginWhile
endWhile:
(2)...
  • ์ œ์–ด ํ๋ฆ„
    • ํ”„๋กœ๊ทธ๋žจ์˜ ๋ช…๋ น๋“ค์€ ๋ณดํ†ต ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€๋งŒ, ๋‹ค๋ฅธ ์œ„์น˜๋กœ ๋ถ„๊ธฐํ•ด์„œ ์‹คํ–‰๋˜๊ธฐ๋„ ํ•จ
    • ๋ฐ˜๋ณต, ์กฐ๊ฑด ์‹คํ–‰, ์„œ๋ธŒ๋ฃจํ‹ด ํ˜ธ์ถœ ๋“ฑ

๐Ÿค” ํ•ต ๊ธฐ๊ณ„์–ด

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ต ์ปดํ“จํ„ฐ๋Š” ํฐ ๋…ธ์ด๋งŒ ํ”Œ๋žซํผ์ด๊ณ  CPU, ๋ช…๋ น์–ด ๋ฉ”๋ชจ๋ฆฌ, ๋ฐ์ดํ„ฐ ๋ฉ”๋ชจ๋ฆฌ, ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘ I/O ์žฅ์น˜๋กœ ๊ตฌ์„ฑ๋œ 16๋น„ํŠธ ์žฅ์น˜
  • ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ณต๊ฐ„
    • ํ•ต์—์„œ๋Š” ๋ช…๋ น์–ด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ, ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ฃผ์†Œ ๊ณต๊ฐ„์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Œ
    • ํญ์ด 16๋น„ํŠธ์ธ ๋‘ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์€ 15๋น„ํŠธ๋กœ, ์ตœ๋Œ€ 32K๊ฐœ์˜ 16๋น„ํŠธ ๋‹จ์–ด๋“ค์— ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Œ
    • ํ•ต CPU๋Š” ๋ช…๋ น์–ด ๋ฉ”๋ชจ๋ฆฌ(ROM)์— ์กด์žฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ ˆ์ง€์Šคํ„ฐ
    • ํ•ต ์‹œ์Šคํ…œ์—๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’๋งŒ์„ ์ €์žฅํ•˜๋Š” D ๋ ˆ์ง€์Šคํ„ฐ์™€ ๋ฐ์ดํ„ฐ ๊ฐ’๊ณผ ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” A 16๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์žˆ์Œ
      • D=M+1์—์„œ M์€ ํ•ญ์ƒ A์— ์ €์žฅ๋œ ๊ฐ’์„ ์ฃผ์†Œ๋กœ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ๋ถ„๊ธฐ๋ช…๋ น์–ด์˜ ๋„์ฐฉ ์œ„์น˜๋Š” ํ•ญ์ƒ A์— ์ €์žฅ๋œ ๊ฐ’์„ ๋ชฉ์ ์ง€๋กœ ํ•จ

๐Ÿค” A-๋ช…๋ น์–ด

  • A ๋ ˆ์ง€์Šคํ„ฐ์— 15๋น„ํŠธ ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ์“ฐ์ž„
    • (1) ์ƒ์ˆ˜
    • (2) ๋ฐ์ดํ„ฐ ์ฃผ์†Œ
    • (3) ์ ํ”„ํ•  ๋ช…๋ น์–ด ์ฃผ์†Œ
  • ์‚ฌ์šฉ๋ฒ• : @value
    • value๋Š” ์Œ์ˆ˜๊ฐ€ ์•„๋‹Œ 10์ง„์ˆ˜, ๋˜๋Š” ๊ทธ ์ˆซ์ž๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ธฐํ˜ธ

๐Ÿค” C-๋ช…๋ น์–ด

C-Command : dest = comp;jump    
// dest๋‚˜ jump ํ•„๋“œ๋Š” ๊ณต๋ž€์ผ ์ˆ˜ ์žˆ์Œ
// dest๊ฐ€ ๊ณต๋ž€์ด๋ฉด '='๊ฐ€ ์ƒ๋žต๋จ
// jump๊ฐ€ ๊ณต๋ž€์ด๋ฉด ';'๊ฐ€ ์ƒ๋žต๋จ

  • ํ•ต ํ”Œ๋žซํผ์—์„œ ๊ฑฐ์˜ ๋ชจ๋“  ์ผ์„ ์ˆ˜ํ–‰ํ•จ
    • (1) ๋ฌด์—‡์„ ๊ณ„์‚ฐ?
    • (2) ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ์–ด๋””์— ์ €์žฅ?
    • (3) ๊ทธ ๋‹ค์Œ ํ•  ์ผ์€ ๋ฌด์—‡?
  • ์ตœ์ƒ์œ„ ๋น„ํŠธ ๊ฐ’ 1์€ ์ด ๋ช…๋ น์–ด๊ฐ€ C-๋ช…๋ น์–ด์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ฝ”๋“œ
    • ๊ทธ ๋‹ค์Œ ๋‘ ๋น„ํŠธ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ
  • comp ํ•„๋“œ : ALU๊ฐ€ ํ•  ์—ฐ์‚ฐ์ด ๋ฌด์—‡์ธ์ง€
  • dest ํ•„๋“œ : ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ์–ด๋””์— ์ €์žฅํ• ์ง€
  • jump ํ•„๋“œ : ์ ํ”„ ์กฐ๊ฑด

  • ๊ณ„์‚ฐ ํ•„๋“œ
    • ๊ณ„์‚ฐ ํ•„๋“œ์˜ a๋น„ํŠธ๋Š” A ๋ ˆ์ง€์Šคํ„ฐ์™€ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ’ ์ค‘ ์–ด๋Š ๊ฒƒ์„ ๊ณ„์‚ฐํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•ด์คŒ
    • ๋‚˜๋จธ์ง€ c1~6์€ ์–ด๋–ค ๊ณ„์‚ฐ์„ ํ• ์ง€ ๊ฒฐ์ •(= ALU)

  • ๋ชฉ์ ์ง€ ํ•„๋“œ
    • comp ๋ถ€๋ถ„์—์„œ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ์–ด๋””์— ์ €์žฅํ• ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ„
    • d1์€ A ๋ ˆ์ง€์Šคํ„ฐ, d2๋Š” D ๋ ˆ์ง€์Šคํ„ฐ, d3๋Š” Memory[A]๋ฅผ ๋‹ด๋‹นํ•˜๋Š”๋ฐ, ํ™œ์„ฑํ™”๋œ ๋น„ํŠธ๊ฐ€ ๋‹ด๋‹นํ•˜๋Š” ์žฅ์†Œ์— ๊ฐ’์„ ์ €์žฅ

  • ์ ํ”„ ํ•„๋“œ
    • ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ ์ปดํ“จํ„ฐ๊ฐ€ ์ด์ œ ์–ด๋Š ์œ„์น˜์˜ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•จ
    • ์‹ค์ œ๋กœ ์ ํ”„ํ• ์ง€๋Š” ALU์˜ ์ถœ๋ ฅ๊ฐ’์— ๋‹ฌ๋ ธ๋Š”๋ฐ, ์ถœ๋ ฅ๊ฐ’์ด ์Œ์ˆ˜๋ผ๋ฉด j1, 0์ด๋ผ๋ฉด j2, ์–‘์ˆ˜๋ผ๋ฉด j3 ๋น„ํŠธ๋ฅผ ๋ณด๊ณ  ์ ํ”„ ์—ฌ๋ถ€ ๊ฒฐ์ •

๐Ÿค” ๊ธฐํ˜ธ

  • ์–ด์…ˆ๋ธ”๋ฆฌ ๋ช…๋ น์€ ์ƒ์ˆ˜๋‚˜ ๊ธฐํ˜ธ๋ฅผ ์ด์šฉํ–‡ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ์ฐธ์กฐ ๊ฐ€๋Šฅ
  • ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ธฐํ˜ธ
    • ๊ฐ€์ƒ ๋ ˆ์ง€์Šคํ„ฐ : R0 ~ R15๋Š” RAM ์ฃผ์†Œ 0 ~ 15๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์ •์˜ํ•จ
    • ๋ฏธ๋ฆฌ ์ •์˜๋œ ํฌ์ธํ„ฐ : SP, LCL, ARG, THIS, THAT ๊ธฐํ˜ธ๋Š” ๊ฐ๊ฐ RAM ์ฃผ์†Œ 0~4๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ์ •์˜ํ•จ
      • ๊ฐ€์ƒ๋จธ์‹  ๊ตฌํ˜„ ์‹œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋จ
    • I/O ํฌ์ธํ„ฐ : SCREEN๊ณผ KBD ๊ธฐํ˜ธ๋Š” ๊ฐ๊ฐ RAM ์ฃผ์†Œ 16384(0x4000)๊ณผ 24576(0x6000)์„ ์ฐธ์กฐํ•จ
      • ์Šคํฌ๋ฆฐ ๋ฐ ํ‚ค๋ณด๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘ ์‹œ์ž‘ ์ฃผ์†Œ๊ฐ€ ๋จ
  • ๋ ˆ์ด๋ธ” ๊ธฐํ˜ธ
    • ๋ถ„๊ธฐ ๋ช…๋ น์–ด์˜ ๋ชฉ์ ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ„
    • ์‚ฌ์šฉ์ž๊ฐ€ '(XXX)' ๋ผ๋Š” ์˜์‚ฌ ๋ช…๋ น์œผ๋กœ ์ง์ ‘ ์„ ์–ธํ•จ
  • ๋ณ€์ˆ˜ ๊ธฐํ˜ธ
    • ์ด์ „ ๋‘ ๊ฐ€์ง€ ๊ธฐํ˜ธ๊ฐ€ ๋ชจ๋‘ ์•„๋‹Œ ๊ฒฝ์šฐ
    • ์–ด์…ˆ๋ธ”๋Ÿฌ๋Š” RAM ์ฃผ์†Œ 16์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋ณ€์ˆ˜๋งˆ๋‹ค ์œ ์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•จ

๐Ÿค” I/O ์กฐ์ž‘

  • ํ•ต ํ”Œ๋žซํผ์€ ํ‚ค๋ณด๋“œ์™€ ์Šคํฌ๋ฆฐ ์žฅ์น˜์— ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์Œ
  • ๋‘ ์žฅ์น˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋งต์„ ํ†ตํ•ด ์ปดํ“จํ„ฐ์™€ ํ†ต์‹ ํ•จ
    • ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์€ ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ๋งต์— ์ €์žฅ๋˜๊ณ , ์Šคํฌ๋ฆฐ์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜์— ๊ฐ’์„ ์“ฐ๋ฉด ๊ทธ์— ๋Œ€์‘ํ•˜๋Š” ์Šคํฌ๋ฆฐ ์œ„์— ํ”ฝ์…€์ด ์“ฐ์—ฌ์ง
  • ์Šคํฌ๋ฆฐ
    • 512x256์˜ ํ‘๋ฐฑ ํ”ฝ์…€๋กœ ๊ตฌ์„ฑ
    • ์Šคํฌ๋ฆฐ ํ”ฝ์…€์€ RAM[16384]๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” 8K ๋ฉ”๋ชจ๋ฆฌ ๋งต์— ๋Œ€์‘
    • ๊ฐ ์—ด๋งˆ๋‹ค 32๊ฐœ์˜ 16๋น„ํŠธ ๋‹จ์–ด๋กœ ํ‘œํ˜„๋จ
  • ํ‚ค๋ณด๋“œ
    • RAM[24567]์— ์œ„์น˜ํ•œ 1๋‹จ์–ด ๋ฉ”๋ชจ๋ฆฌ ๋งต์„ ํ†ตํ•ด ํ‚ค๋ณด๋“œ์™€ ํ†ต์‹ 
      • ์‹ค์ œ ํ‚ค๋ณด๋“œ๊ฐ€ ๋ˆŒ๋ฆด ๋•Œ๋งˆ๋‹ค, ๋ˆŒ๋ฆฐ ํ‚ค์˜ 16๋น„ํŠธ ASCII ์ฝ”๋“œ๊ฐ€ ๊ธฐ๋ก๋˜๋Š” ์‹
      • ํ‚ค๊ฐ€ ๋ˆŒ๋ฆฌ์ง€ ์•Š๋Š” ๋™์•ˆ์—๋Š” 0์ด ๊ธฐ๋ก๋จ

๐Ÿค” ๋ช…๋ น์–ด ์˜ˆ์‹œ

fn main() {
    let (mut i, mut sum) = (1, 0);
    while i<=100 {
        sum+=i;
        i+=1;
    }
}
  • Rust์˜ 1..100 ๋ง์…ˆ
    @i        // i๋Š” ์–ด๋–ค ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•จ
    M=1        // i=1
    @sum    // sum์€ ์–ด๋–ค ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•จ
    M=0        // sum=0
(LOOP)
    @i
    D=M        // D=i
    @100
    D=D-A    // D=i-100
    @END
    D;JGT    // if(i-100)>0 goto END
    @i
    D=M        // D=i
    @sum
    M=D+M    // sum=sum+i
    @i
    M=M+1    // i=i+1
    @LOOP
    0;JMP    // goto LOOP
(END)
    @END
    0;JMP    // ๋ฌดํ•œ๋ฃจํ”„(๋‚จ์€ ์‹คํ–‰ ํšŸ์ˆ˜ ์†Œ๋ชจ)
  • ๊ธฐ๊ณ„์–ด์˜ 1..100 ๋ง์…ˆ

๐Ÿค” ๊ณฑ์…ˆ ํ”„๋กœ๊ทธ๋žจ(Mult.asm)

// Multiplies R0 and R1 and stores the result in R2.
// (R0, R1, R2 refer to RAM[0], RAM[1], and RAM[2], respectively.)
//
// This program only needs to handle arguments that satisfy
// R0 >= 0, R1 >= 0, and R0*R1 < 32768.

    @2
    M=0        // R2๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”. R2์—๋Š” ๊ฒฐ๊ณผ๊ฐ’ ์ €์žฅ
(LOOP)
    @0
    D=M        // R0์˜ ๊ฐ’์„ D์— ์ €์žฅ. R0์€ ๋ช‡๋ฒˆ ๊ณฑํ• ์ง€ ๋‚จ์€ ํšŸ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ„
    @END
    D;JEQ    // D์˜ ๊ฐ’์ด 0์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณ„์‚ฐ ์ข…๋ฃŒ
    @1
    D=M        // R1์˜ ๊ฐ’์„ D์— ์ €์žฅ
    @2
    M=M+D    // R2+=D
    @0
    M=M-1    // ๋‚จ์€ ๊ณฑ์…ˆ ํšŸ์ˆ˜ 1 ๊ฐ์†Œ
    @LOOP
    0;JMP    // ๋ฌด์กฐ๊ฑด LOOP๋กœ ์ ํ”„
(END)
    @END
    0;JMP

๐Ÿค” I/O ์กฐ์ž‘ ํ”„๋กœ๊ทธ๋žจ

// Runs an infinite loop that listens to the keyboard input.
// When a key is pressed (any key), the program blackens the screen,
// i.e. writes "black" in every pixel;
// the screen should remain fully black as long as the key is pressed. 
// When no key is pressed, the program clears the screen, i.e. writes
// "white" in every pixel;
// the screen should remain fully clear as long as no key is pressed.

@i
M=0        // i=0 ์ดˆ๊ธฐํ™”
(LOOP)
    @KBD
    D=M        // ํ˜„์žฌ ํ‚ค๋ณด๋“œ์— ์ž…๋ ฅ๋œ ๊ฐ’์„ D์— ๋Œ€์ž…

    @NOINPUT
    D;JEQ    // D==0 jump
    @INPUT
    D;JGT    // D>0 jump

(NOINPUT)
    @16384
    D=A
    @i        // ํ˜„์žฌ ์Šคํฌ๋ฆฐ ์œ„์น˜ -> A
    D=D+M    // 16384+i(1)
    A=D

    M=0        // ํ˜„์žฌ ์Šคํฌ๋ฆฐ ์œ„์น˜์— 0000 0000 0000 0000 ๋Œ€์ž…

    @END
    0;JMP

(INPUT)
    @16384
    D=A
    @i        // ํ˜„์žฌ ์Šคํฌ๋ฆฐ ์œ„์น˜ -> A
    D=D+M
    A=D

    M=-1    // ํ˜„์žฌ ์Šคํฌ๋ฆฐ ์œ„์น˜์— 1111 1111 1111 1111 ๋Œ€์ž…

    @END
    0;JMP

(END)
    @i
    M=M+1    // i=i+1

    @LOOP
    0;JMP    // LOOP๋กœ jump
728x90
๋ฐ˜์‘ํ˜•
Comments