2012/04/30

MIPS Ассемблер хичээл 3: Тооллын систем

Тоон төхөөрөмж (Digital Electronics) маань 0, 1 гэсэн тоог ойлгодог. Тийм болохоор бидний ойлгодог бүх зүйлсийг Тоон төхөөрөмж маань шууд ойлгодоггүй байх нь. Тиймээс бидэнд 0, 1 гэсэн төлөв рүү өгөгдлөө дүрслэх, хөрвүүлэх шаардлага гарчээ.

Хоёртын тооллын систем

Янз бүрийн тооллын системүүд бий. Тооллын систем гэдэг нь энгийнээр хэлбэл тоог дүрслэх дүрэм юм. Жишээ нь бид 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 гэсэн 10-н тоогоор бүх тоог дүрсэлдэг дүрэмтэй. Тиймээс бид 10-тын тооллын систем хэрэглэдэг гэсэн үг. Заавал 0, 1 , 3, 5 мав гэсэн тэмдэгүүдийг хэрэглэнэ гэсэн дүрэм байхгүй. 10-н ялгаатай дүрс, тэмдэг л ашигласан бол 10-тын тооллын систем гэсэн үг. Өнөөгийн нээлттэй дэлхийд нэг нэгэнтэйгээ ойлголцох их чухал учир нэгдсэн нэг тохирсон тэмдэглэгээг хэрэглэдэг нь энэ Энэтхэг-Араб тоо буюу  0, 1, 2, 3, 4, 5, 6, 7, 8, 9 юм.

Төрөл бүрийн тоог дүрсэлсэн тэмдэглэгээнүүд:

Вавилон тоо(60-тын тооллын систем)
Хятад тоо
Маяа тоо (20-тын тооллын систем)
За, тэгвэл 2-тын тооллын систем гэвэл тоог ямар нэгэн ялгаатай хоёр тэмдгээр л дүрслэхийг хэлж байна гэсэн үг. Бид 0, 1 гэсэн хоёр ялгаатай тэмдгийг ашигладаг. Эндээс харахад хязгааргүй олон тооллын систем байж болохоор байгаа биз. Гэхдээ бидэнд хэрэгтэй нь энэ 2-тын тооллын систем. Учир нь манай тоон төхөөрөмж маань ойлгодог ганц зүйл нь болохоор.



Бид 10-тын тооллын системийг санаж байгаа. 8-ын дараачийнхийг 9. 9-н дараачийнхийг бидэнд тэмдэглэх тэмдэг байхгүй. Тийм учраас бид орон ахиулах гэдэг үйлдэл хийдэг. Тэгээд 1, 0 гэсэн хоёрт тэмдэгээр 9-н дараачийн тоог 10 гэж тэмдэглэдэг. Үүнтэй адил хоёртын тооллын систем 0 + 1 = 1 гарна. 1 + 1 гэвэл хоёр гарна. Гэхдээ хоёрыг тэмдэглэх тэмдэг хоёртын тооллын системд байхгүй учир орон ахина. Ингээд 1 + 1 = 10 болно.

Ингэж орон ахидаг тооллын системийг өөрөөр хэлбэл оронтой тооллын системийг оронт тооллын систем гэдэг. Оронт тооллын системд тэмдэгт бүр байршлаасаа хамаарч өөр утгыг заадаг. Тухайлбал 111 гэсэн аравтын тоо байвал хамгийн баруун талын 1 нэг гэсэн утгыг,голын 1 арав гэсэн утгыг, зүүн талын 1 зуу гэсэн утгыг илэрхийлж байна.
Оронт бус тооллын систем гэвэл ром тоо байна. 8-ыг VIII, 9-ийг IX гэх мэт тэмдэгтүүд нь байршлаасаа хамаарч утга нь өөрчлөгддөггүй байх нь.

Тоон дээр үйлдэл хийхэд хамгийн тохиромжтой нь оронт тооллын систем юм. Учир нь орон бүр дээр нь үйлдэл хийх боломжтой юм. 

Дээрх зургаас 10-тын тооллын систем 2-тын тооллын системтэй харгалзсан хүснэгтийг харж байгаа байх. Эхлээд 10-таас 2-т луу хөрвүүлж сурах нь зүйтэй байх.

Нэг тооллын системээс нөгөө тооллын систем рүү хөрвүүлэх математик томъёочлол, тайлбар, үндэс нь байдаг ч орхиод шууд хөрвүүлэх тухай үзье.
2-тын тооллын системд бид хоёр хоёроор тоогоо тоолно гэж ойлгож болно. Тэгж үзвэл аравтын тооллын систем дэх тоог хоёр хоёроор тоолж 2-т руу хөрвүүлнэ гэж ойлгож болно. Өөрөөр хэлбэл 10-тын тоог 2-т хуваах замаар хэчнээн 2-оор тоологдсон бэ? гэдгээр хөрвүүлэх юм.

Үндсэн арга нь 2-т хуваагаад гарсан үлдэгдлүүдээр нь илэрхийлэгдэх юм.


25 гэсэн аравтын тоог 2-т руу хөрвүүлье. 25-аа ноогдвор нь 0 болтол 2-т хуваагаад үлдэгдлүүдийг нь аваад явна:

25-г 2-т хуваана. Ноогдвор нь 12, үлдэгдэл нь 1
12-г 2-т хуваана. Ноогдвор нь 6, үлдэгдэл нь 0
6-г 2-т хуваана. Ноогдвор нь 3, үлдэгдэл нь 0
3-г 2-т хуваана. Ноогдвор нь 1, үлдэгдэл нь 1
1-г 2-т хуваана. Ноогдвор нь 0, үлдэгдэл нь 1

Ингээд хамгийн сүүлийн үлдэгдлээс нь эхлээд бичвэл 11001 болно. Энэ бол 25 гэдэг 10-тын тооны 2-т тооллын систем дэх дүрслэл. 11001 гэдэг тоог хоёртын тооллын системийн 25 уу? аль эсвэл арван нэгэн мянга нэг гэсэн аравтын тоо юу? гэдгийг яаж ялгах уу?

Бид аравтын тооллын системийг байнга хэрэглэдэг учраас ямар нэгэн ялгах тэмдэглэгээ хэрэглэдэггүй. Харин бусад тооллын системийг ялгаж тэмдэглэгээ хийдэг. Тухайлбал 2-тын тооллын системийн тооны ард В (Binary-2-тын) тэмдгийг тавьдаг. Тэгвэл 11001В гэж тэмдэглэсэн байвал хоёртын тооллын системийн 25 гэж ойлгох юм.

MSB (Most Significant Bit) буюу Монголоор Хамгийн ахмад оронгийн бит
LSB (Least Significant Bit) буюу Монголоор Хамгийн бага оронгийн бит

Энэ хоёр нь 2-тын тооллын систем дэх тооны хамгийн эхний бит, хамгийн сүүлийн битийг л хэлж байгаа юм.

Одоо 2-тоос 10-т руу хөрвүүлье. Оронгийн тоог нь оронгийн жингээр нь үржүүлсэн үржвэрүүдийн нийлбэрээр олдог. 2^k нь оронгийн жин. 

1 * 2^4 + 1 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 =
1 * 16 + 1 * 8 + 0 + 0 + 1 * 1 = 16 + 8 + 1 = 25 

Ингээд бүх аравтын тоог 2-тоор илэрхийлж чаддаг боллоо. Гэвч нэг асуудал байна. 25 гэсэн хоёрхон тэмдэгтээр дүрсэлж байгаа тоог бүхэл бүтэн 11001 гэсэн 5 тэмдэгтээр дүрсэлнэ гэдэг нэг ядаргаа гарч ирж байгаа юм. Жаахан том тоо байвал хоёртоор тоймгүй их тоо болно доо. Тийм учраас үүнийг багасгах арга хайж л дээ. Тэгээд олсон арга нь 8 болон 16-тын тооллын системээр илэрхийлэх. Яагаад 8, 16-т гэвэл 8 бол 2^3, 16 бол 2^4 юм. 8-тын тооллын систем дэх тооны орон бүрийг 2-тын гурван оронгоор шууд илэрхийлж болно, 16-тын тооллын систем дэх тооны орон бүрийг 2-тын дөрвөн оронгоор шууд илэрхийлж болно гэсэн үг.

Наймтын тооллын систем

2-тынхтай адилхан 0, 1, 2, 3, 4, 5, 6, 7 гэсэн найман тэмдэгтээр тоог дүрсэлдэг. 8 болохоор нэг орон урагшилдаг. 10-таас 8-т руу хөрвүүлэхдээ 8-т хуваагаад үлдэгдлүүдийг нь авна. Жишээ нь 25-г бол

25-г 8-т хуваана. Ноогдвор нь 3, үлдэгдэл нь 1.
3-г 8-т хуваана. Ноогдвор нь 0, үлдэгдэл нь 3.

Тиймээс аравтын тооллын системийн 25 нь наймт дээр 31 байх нь. Ялгах тэмдэглэгээ нь О тэмдэг. О нь octal буюу наймтын гэсэн үгийг товчилсон нь. 2-тын тооллын системд В-г хамгийн сүүлд тавьж байсан бол О-г хамгийн урд нь тавьдаг. Тэгвэл 25 = О31 болж байна.

Одоо буцаагаад 8-таас 10-т руу. Мөн оронгийн тоог нь жингээр нь үржүүлсэн үржвэрүүдийн нийлбэрээр олно. Жин нь 8^k байна.

3 * 8 ^ 1 + 1 * 8 ^ 0 =
3 * 8 + 1 * 1 =
24 + 1 =
25

Одоо 8-тоос 2-т руу хөрвүүлэхийг үзье.
Наймтын орон бүрийн тэмдэгтийг харгалзах хоёртын тоогоор солиход шууд хөрвүүлэгдэнэ.

Наймтын 2 = Хоёртын 010
Наймтын 5 = Хоёртын 101

О25 = 010101В  гэсэн үг. Хамгийн эхний тэгүүдийг бичихгүй байж болно гэсэн дүрмээр О25 = 10101В болно.

Эсрэгээрээ 2-тоос 8-т руу хөрвүүлье. Хойноос нь гурав гурван оронгоор тасална.
10101 нь '010'101' болно. Одоо дээрх хүснэгтээс харгалзах наймтын тоогоор солино. 010 нь 2, 101 нь 5. Тэгээд 25 гэж гарна.

10101В = О25

Арван зургаатын тооллын систем

 16-тын тооллын систем 8-ттай бараг адилхан. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F гэсэн 16-н тэмдэгтээр тоог дүрсэлдэг. А гэдэг нь аравтаар 10 гэсэн тоотой тэнцүү. F нь 15 гэх мэт.

10-таас 16-т руу мөн 16-т хуваагаад үлдэгдлүүдийг нь авна.

6898-г 16-т руу хөрвүүлье. 1AF2

6898-г 16-т хуваана. Ноогдвор нь 431, үлдэгдэл нь 2
431-г 16-т хуваана. Ноогдвор нь 26, үлдэгдэл нь 15 = F
26-г 16-т хуваана. Ноогдвор нь 1, үлдэгдэл нь 10 = A
1-г 16-т хуваана. Ноогдвор нь 0, үлдэгдэл нь 1

6898 гэсэн аравтын тоо маань 1AF2 гэж 16-т руу хөрвөгдлөө. Онцлох тэмдэглэгээ нь H. Тооныхоо ард нь бичнэ. Өөрөөр хэлбэл 1AF2H гэж бичих юм. Си хэлэнд 0х гэсэн тэмдэглэгээг ашигладаг. Үүнийг урд нь бичдэг. Тэгвэл 0х1AF2 гэх юм.

16-таас 10-т рүү хөрвүүлэхдээ мөн адил жингүүдээр нь задална.

1 * 16^3 + 10 * 16^2 + 15 * 16^1 + 2 * 16^0 =
1 * 4096 + 10 * 256 + 15 * 16 + 2 * 1 =
4096 + 2560 + 240 + 2 =
6898

2-т руу хөрвүүлэхдээ 8-т дээр хэрэглэж байсан аргыг хэрэглэнэ. Гэхдээ 16-т дээр дөрөв дөрвөн оронгоор авдаг.

1 = 0001
A = 1010
F = 1111
2 = 0010

1AF2H = 0001101011110010B = 1101011110010B

2-тоос 16-т руу хоёртын тоогоо баруун талаас нь дөрөв дөрвөөр таслаад харгалзах 16-тын тэмдэгтээр нь солиод гүйцээ.

1101011110010В = 0001'1010'1111'0010 = 1AF2H




No comments:

Post a Comment