Skip to content

dbmina/Huffman_decoding_assembly

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

16 Commits
ย 
ย 
ย 
ย 

Repository files navigation

Huffman_decoding_assembly

This is an implementation of Huffman decoding with assembly langauges

1. ๊ตฌํ˜„ ์ ˆ์ฐจ ๊ฐœ์š”

ํ—ˆํ”„๋งŒ ๋””์ฝ”๋”ฉ์„ ์œ„ํ•ด ๋จผ์ € ranktable์„ ์™„์„ฑํ•˜๊ณ  register์˜ ์šฉ๋„๋ฅผ ๊ณ ์ •ํ•œ ์ดํ›„ ๋“ค์–ด์˜ค๋Š” input์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค. Input์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ์–ด์˜ค๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๊ณ  output์„ ํ•˜๋‚˜์”ฉ ์ €์žฅํ•œ ์ดํ›„ ์ด๋ฅผ *outp์— ์ €์žฅํ•˜๋Š” ์ ˆ์ฐจ๋กœ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

2. ์„ธ๋ถ€ ๊ตฌํ˜„ ๋‹จ๊ณ„

(1) ranktable ์™„์„ฑํ•˜๊ธฐ

๊ฐ€์žฅ ๋จผ์ € a0, a1, a2, a3, a4, a5 register ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ธ์ž๋กœ ๋“ค์–ด์˜ค๋Š” a0, a1, a2, a3 ๋ฅผ ์Šคํƒ์— ์ €์žฅ์‹œ์ผœ ๋†“์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ rank table ์„ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ 0๋ถ€ํ„ฐ 7 ์ˆœ์œ„๊ฐ€ ์•„๋‹Œ 8 -15 ์ˆœ์œ„์ธ ์ˆซ์ž๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ 0 7 ์ˆœ์œ„์— ์žˆ๋Š” ์ˆซ์ž๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด ์Šคํƒ์˜ ์ •ํ•ด์ง„ ์œ„์น˜์— 1 ์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๊ตฌํ˜„์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. 72(sp)์—๋Š” 0 ๊ณผ 1 ์˜ ์ˆซ์ž 64(sp) ์—๋Š” 2์™€ 3์˜ ์ˆซ์ž, 56(sp) ์—๋Š” 4 ์™€ 5 ์˜ ์ˆซ์ž โ€ฆ 16(sp) ์—๋Š” 14 ์™€ 15 ์˜ ์ˆซ์ž์˜ ์ž๋ฆฌ์˜ ํšŸ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ 72(sp)์˜ ์ˆซ์ž๊ฐ€ 0x11์ด๋ผ๋ฉด 0 - 7 rank์— 0๊ณผ 1์ด ๋ชจ๋‘ ๋“ฑ์žฅํ•˜๋Š” ๊ฒƒ์ด๊ณ  0x10 ์ด๋ผ๋ฉด 0๋งŒ ๋“ฑ์žฅํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ 0x01 ์ด๋ผ๋ฉด 1 ๋งŒ ๋“ฑ์žฅํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ 0 - 7 ranktable ์— ์‚ฌ์šฉ๋˜๋Š” ์ˆซ์ž๋“ค์„ ๋‹ค 1 ๋กœ ํ‘œ์‹œํ•œ ์ดํ›„ ์Šคํƒ์˜ ์ง€์ •๋œ ๋ถ€๋ถ„์„ ๋Œ๋ฉด์„œ 0 ์ธ ๋ถ€๋ถ„์„ ์ฐพ ์•„ 8 - 15 ์ธ ranktable ์„ ์™„์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค ๊ฐ๊ฐ์˜ ์Šคํƒ์„ ๋Œ๋ฉด์„œ ์ง€์ •๋œ ์Šคํƒ์˜ ์ˆซ์ž๊ฐ€ 0 x 11, 0 x 10, 0 x 01 ์ธ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆ„์–ด a 1 register ์— rank ์— 8~15 ์ธ ์ˆซ์ž๋“ค์„ ์ ์–ด์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์™„์„ฑ๋œ 8-15 rank ์˜ ์ˆซ์ž๋“ค์„ 4(sp) ์Šคํƒ์— store ํ•ด์ค๋‹ˆ๋‹ค. 0-7 rank์˜ ์ˆซ์ž๋“ค์€ 0(sp) ์— ์ €์žฅํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

image

(2) inbytes๊ฐ€ 8 byte ์ดˆ๊ณผ์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„

4 byte๋Š” ranktable๋กœ ๋ฌด์กฐ๊ฑด ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๊ณ  ์ดํ›„ ๋“ค์–ด์˜ค๋Š” byte๊ฐ€ 4byte๋ฅผ ๋„˜๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. 4byte๋ฅผ ๋„˜๋Š”๋‹ค๋ฉด ์šฐ์„  ์ฒซ byte์˜ ๊ธธ์ด๋Š” padding bit์„ ์ œ์™ธํ•˜๋ฉด 28bit๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ฝ”๋“œ๋ถ€๋ถ„์—์„œ keepgoing์ด๋ผ๋Š” ๋ถ€๋ถ„์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ 4byte๋ฅผ ๋„˜์ง€ ์•Š๋Š”๋‹ค๋ฉด paddingbit์„ ๊ณ ๋ คํ•˜์—ฌ length๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์— inbyte์˜ ๊ธธ์ด๋ฅผ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜๋ˆ„์–ด ๊ณ„์‚ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

(3) register์˜ ์šฉ๋„๋ฅผ ํ”ฝ์Šคํ•˜๊ธฐ

์ด์ œ๋ถ€ํ„ฐ ํŠน์ • register๋ฅผ ํŠน์ • ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ํŠน์ • ์Šคํƒ์˜ ์œ„์น˜๋ฅผ ํŠน์ • ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • a1: a1์˜ register๋Š” output์„ ์ €์žฅํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ 32bit๊ฐ€ ์ฑ„์›Œ์ง€๊ฒŒ ๋˜๋ฉด ์ด๋ฅผ ์ง€์ •๋œ *outp ์— ์ €์žฅํ•˜๊ณ  a1์€ ๋‹ค์‹œ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œํ‚ต๋‹ˆ๋‹ค.
  • a0: a0 register๋Š” ์ง€๊ธˆ ํ˜„์žฌ ์ƒํ™ฉ์„ keep trackํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. a0 register์˜ ๋งˆ์ง€๋ง‰ 4 bit์€ ํ˜„์žฌ output์ด store๋œ ๊ฒƒ์ด ๋ช‡๊ฐœ์ธ์ง€ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋งˆ์ง€๋ง‰ 4bit์ด 5๋ผ๋ฉด output์ด 5X4=20 bit๋งŒํผ ์ €์žฅ๋˜์–ด์žˆ๋Š”๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋งˆ์ง€๋ง‰ 4bit์ด 8์ด ๋˜๋ฉด ๊ทธ๊ฒƒ์„ outp ํŠน์ • ์žฅ์†Œ์— ์ €์žฅํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • a5 register๋Š” ํ˜„์žฌ bit์˜ ์ƒํ™ฉ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • a0์˜ upper bits๋Š” a5 register์˜ bit๊ฐ€ ๋ช‡ ๊ฐœ ๋‚จ์•˜๋Š”๊ฐ€๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
  • a5์˜ ๊ธธ์ด๋Š” 32bit์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ bit๋ฅผ 3๊ฐœ, 4๊ฐœ, 5๊ฐœ์”ฉ ์ฝ์Œ์— ๋”ฐ๋ผ ๊ธธ์ด๊ฐ€ ์ค„์–ด๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ 31๋งŒํผ a5๋ฅผ shiftํ–ˆ์„ ๋•Œ 0์ด๋ฉด threebit์œผ๋กœ ๊ฐ€์„œ ์ฝ๊ณ , 30๋งŒํผ shiftํ–ˆ์„ ๋•Œ 2์ด๋ฉด fourbit์œผ๋กœ ๊ฐ€์„œ ์ฝ๊ณ , 3์ด๋ฉด fivebit์œผ๋กœ ๊ฐ€์„œ ์ฝ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • 112(sp)๋Š” ํ˜„์žฌ ๋‚จ์€ inbytes๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ๋งŒ์•ฝ ๋‹ค์Œ input์ด a5์— ๋ชจ๋‘ ์˜ฌ๋ผ๊ฐ”์„๋•Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ -4์”ฉ ๊ฐ์†Œํ•˜์—ฌ ์ƒˆ๋กญ๊ฒŒ storeํ•ด์ค๋‹ˆ๋‹ค.
  • 28(sp)์˜ ๊ฒฝ์šฐ ๋‹ค์Œ ๋“ค์–ด์™€์•ผ ํ•  input์„ ์ €์žฅํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • 20(sp)๋Š” ๋‹ค์Œ input์˜ ๊ธธ์ด๋ฅผ ์ €์žฅํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

(4) input์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ์–ด์˜ค๊ธฐ

Threebit์ผ ๊ฒฝ์šฐ a0๋ฅผ 48(163)๋งŒํผ ๊ฐ์†Œ์‹œํ‚ค๊ณ  fourbit์˜ ๊ฒฝ์šฐ 164 ๋งŒํผ, fivebit์˜ ๊ฒฝ์šฐ 16*5๋งŒํผ ๊ฐ์†Œ์‹œํ‚ค๋Š”๋ฐ ๊ฐ์†Œํ•จ์— ๋”ฐ๋ผ a0์˜ upperbit์ด ์Œ์ˆ˜๊ฐ€ ๋˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ input์„ loadํ•ด์™€์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ž„์œผ๋กœ next์˜ ์ƒํ™ฉ์œผ๋กœ ๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋” ์ด์ƒ ์ฝ์–ด์˜ฌ bit์ด ์—†์„๊ฒฝ์šฐ์—๋Š” input์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์ด๋ผ๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์— paddingbit ๋ถ€๋ถ„์œผ๋กœ ๊ฐ€์„œ ์ถ”๊ฐ€์ ์ธ ์กฐ์ •์„ ํ•ด์ค๋‹ˆ๋‹ค. ๋‹ค์Œ input์„ ์ฝ์–ด์˜ค๋Š” ๊ณผ์ •์ด ๋ณต์žกํ•œ๋ฐ ๋งŒ์•ฝ 20(sp) ๋ถ€๋ถ„์ด 0์ด๋ผ๋ฉด ์ƒˆ๋กœ์šด input stream์„ ์ฝ์–ด์™€์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ loadnext๋กœ ๊ฐ€์„œ ์ƒˆ๋กœ์šด input stream์„ ์ฝ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ 20(sp) ๋ถ€๋ถ„์ด 0์ด ์•„๋‹ˆ๋ผ๋ฉด ์ด๋ฏธ ๋“ค์–ด์˜ฌ input stream์ด ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ์ƒˆ๋กœ์šด ๊ฒƒ์„ loadํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ nottotal ๋ถ€๋ถ„์œผ๋กœ ๊ฐ€๋Š”๋ฐ ์—ฌ๊ธฐ์„œ๋„ ๊ฒฝ์šฐ๊ฐ€ ๋‚˜๋‰˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. a5์— ์ƒˆ๋กœ์šด byte๋ฅผ loadํ•œ ์ดํ›„์—๋„ ์ €์žฅ๋˜์–ด์žˆ๋Š” input stream์ด ๋‹ค ๋“ค์–ด๊ฐ€์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ณ  ๋ชจ๋‘ ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ ๋ชจ๋‘ ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ์—๋Š” ifcase๋กœ ๊ฐ€์„œ ํŠน๋ณ„ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค. 3 bit, 4 bit, 5 bit์”ฉ ์ฝ์–ด ๊ฐ๊ฐ์— ํ•ด๋‹นํ•˜๋Š” ranktable๊ณผ ๋งค์น˜์‹œ์ผœ output stream์— ํ•˜๋‚˜์”ฉ ์ €์žฅ์„ ํ•ด์ค๋‹ˆ๋‹ค. 32bit๊ฐ€ ์ฑ„์›Œ์ง€๊ฒŒ ๋˜๋ฉด outbytes์˜ ์ˆ˜๋„ 4์”ฉ ๊ฐ์†Œ์‹œํ‚ต๋‹ˆ๋‹ค. ์ด๋Š” ์ฝ”๋”ฉ๋œ outbytes๊ฐ€ ์ •ํ•ด์ง„ outbytes์˜ ์ˆ˜๋ฅผ ๋„˜์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ outbytes์˜ ์ˆ˜๊ฐ€ 0๋ณด๋‹ค ์ž‘์•„์ง€๊ฒŒ ๋œ๋‹ค๋ฉด storeํ•˜๋Š” ๊ฒƒ์„ ๋ฉˆ์ถ”๊ณ  return์„ ํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

About

This is an implementation of Huffman decoding with assembly langauges

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors