400 likes | 739 Views
Монгол Улсын Шинжлэх Ухаан Технологийн Их Сургууль. Компьютерийн зохион байгуулалт, ассемблер хэл. Код : HW200 Улирал : Хавар 2009 Багш : С. Байгалтөгс /проф, доктор/. Сэдэв 5 : Операндууд болон бит логик. Операндууд болон бит логик.
E N D
Монгол Улсын Шинжлэх Ухаан Технологийн Их Сургууль Компьютерийн зохион байгуулалт, ассемблер хэл Код : HW200 Улирал : Хавар 2009 Багш : С. Байгалтөгс/проф, доктор/ Сэдэв 5 :Операндууд болон бит логик [www.cdeq.mn/hw200]
Операндууд болон бит логик Ихэнх машины хэл дээрх команд нь өгөгдлийг агуулсан байдаг. Энэ өгөгдлийг операнд гэх болно. Өмнөх сэдэвт үзсэн oriкоманд нь үнэндээ операндыг агуулж байсан. Бит дээрх логик үйлдэл нь 2 өгөгдөл дээр хийгдэх ба жишээ нь тэдгээрийн хооронд OR эсвэл AND гэх мэт үйлдлийг хийх болно. Агуулга : • Шууд операнд • Бит логик • OR, AND, XOR логик үйлдэл • Машины хэлдээрх командын бүтэц • Тэг битийн өргөтгөл • Регистр $0 дээр OR үйлдэл хийх буюу командыг ачаалах [www.cdeq.mn/hw200]
Шууд операнд Машины хэлдээрх командын 32 битийн 16 бит нь нэг операндад хэрэглэгддэг. Командын энэ кодлогдсон нэг операндыг шууд операнд гэж нэрлэдэг. Жишээ нь өмнөх жишээ програмын нэг командыг энд харуулъя. хаяг машин код ассемблер код 0x004000000x34080002ori $8,$0,0x2 Энэ командын сүүлийн 16 бит нь 0х0002 гэсэн операндыг илтгэж байна (ассемблер хэлдээрх команд дээр 0х2). Мөн ALU, регистр $0 болон шууд операнд 0х0002 – ын хооронд логик OR үйлдэл гүйцэтгэхийг хэлж байна. Үр дүн нь регистр $8 – д орох болно. [www.cdeq.mn/hw200]
Шууд операнд Бит дээрх логик үйлдэл нь операндуудын багана бүр дэх бит дээр хийгддэг. Доор 8 битийн 2 тоон дээр логик OR үйлдэл хийснийг харуулав. 0110 1100 операнд 0101 0110 операнд --------- 0111 1110 үр дүн [www.cdeq.mn/hw200]
Тэг битийн өргөтгөл Дахин өмнөх командыг харцгаая. хаяг машин код ассемблер код 0x004000000x34080002ori $8,$0,0x2 Шууд операндын 16 бит 0000 0000 0000 0010 нь регистр 0 дох 32 битийн утга 0000 0000 0000 0000 0000 0000 0000 0000 – тай логик OR үйлдлийг хийж байна. Энэ үйлдэл нь операндуудын урт өөр учир боломжтой бус харагдаж болох юм. Ялангуяа MIPS процессор нь 16 бит операндыг ижилхэн урттай болтол нь тэгээр өргөтгөдөг. Ингэхдээ зүүн талаас нь эхлэн 0 – ээр дүүргэдэг. [www.cdeq.mn/hw200]
Тэг битийн өргөтгөл 0000 0000 0000 0000 0000 0000 0000 0010 0000 0000 0000 0000 0000 0000 0000 0000 ----------------------------------------------------- 0000 0000 0000 0000 0000 0000 0000 0010 Тэгийн өргөтгөл ------ ------ ------ ------ 0000 0000 0000 0000 0000 0000 0000 0010 – Тэгээр өргөтгөсөн шууд операнд 0000 0000 0000 0000 0000 0000 0000 0000 – регистр $0 дох өгөгдөл 0000 0000 0000 0000 0000 0000 0000 0010 – үр дүн регистр $8-д орно [www.cdeq.mn/hw200]
OR команд Регистр $0 – дох тэгүүд дээр OR үйлдэл хийгддэг учир нь, эцэстээ тэгээр өргөтгөсөн шууд операнд хуулагдаж байна гэсэн үг юм. Ингэж регистрт хуулж байгааг регистрт ачаалах гэж нэрлэдэг. Регистр $8 – д 32 битийн төлөв ачаалагдсан байх ба төлөв нь эерэг 2 операндыг илтгэнэ. Регистрт ачаалахад хэрэглэгдэж байгаа ORI командыг тайлбарлавал ori d,$0,тогтмол #регистр d<тогтмол. #тогтмол нь 16 бит #0x0000 ... тогтмол ... 0xFFFF Хэрвээ тогтмол нь бүхэл тоог илэрхийлж байвал 0 <= тогтмол <= 65535 байна. Ассемблер командын d, $0, болонтогтмол 3 операнд нь энэ хязгаарт байна. [www.cdeq.mn/hw200]
Энгийн OR команд OR логик үйлдэлд хэрэглэгддэг ORI командыг тайлбарлавал ori d, s, тогтмол # регистр d < тогтмолын OR үйлдэл # регистр $s – ын бичлэг #тогтмол нь 16 бит #0x0000 ... тогтмол ... 0xFFFF Команд нь зөв дарааллын дагуу бичигдэх ёстой бөгөөд тогтмол нь тодорхойлогдсон хязгаар дотор байрлана. Хэрвээ ассемблер хэлдээрх шууд операнд нь 16 битээс бага бол ассемблер нь шаардлагатай 16 бит хүртэл өргөтгөдөг. Хэрвээ 16 битээс илүү гарвал ассемблер нь алдааны мэдээллийг хэвлэдэг. Ассемблер хэлдээрх командын тогтмол хэсэг нь эерэг аравтын эсвэл 16 – тын тогтмол утга байна. [www.cdeq.mn/hw200]
Энгийн OR команд Ассемблер нь тогтмолыг 16 битийн машины хэлдээрх командруу хөрвүүлдэг. Жишээ нь доорх ассемблер хэлдээрх 2 команд нь ижилхэн машины хэлдээрх командруу хөрвүүлэгдэнэ. ori $5,$4,0x10 ori $5,$4,16 [www.cdeq.mn/hw200]
Жишээ SPIM симуляторын ассемблер хэсэг нь алдаатай команд дээр алдааны мэдээллийг гаргадаггүй. Харин команд биелэгдсэн үед регистр 0 – ийн утгыг өөрчлөгддөггүй. Одоо 2 утгыг OR үйлдэл хийх жижигхэн програмыг авч үзье. Эхний утга нь регистр $8 – д ачаалагдах ба дараа нь шууд операндтай OR үйлдэл хийнэ. Үр дүн нь харин регистр $10 – т хадгалагдана. .text .globl main main: ori $8,$0,0x0FA5 # регистр $8 – д ачаалж байна ori $10,$8,0x368F # OR үйлдэл хийгээд үрдүн $10 – т [www.cdeq.mn/hw200]
Програмын ажиллагаа Програмын ажиллагааны эцэст үр дүн нь 0x3faf болсон жишээг харцгаая. Програмыг ажлуулахдаа : • Эх файлаа бэлдэнэ • SPIM – ыг эхлүүлнэ • Эх файлаа ачаална • Симуляторын switch – ыг тавьж өгөх * ON – ерөнхий регистрүүд 16 – таар * ON – хоосон эхлэл * OFF – псевдо командыг зөвшөөрөх * OFF – файлыг ачаалах [www.cdeq.mn/hw200]
Програмын ажиллагаа • Програмын тоолуур эхний командын хаягийг инизилциацлах • F10 товчийг дарж команд бүрээр ажлуулах [www.cdeq.mn/hw200]
ORI машин код Доор командын машин кодыг харуулав. 3 дах мөрөнд ялгаатай функцүүдийг агуулсан талбарыг харуулав. MIPS процессорын ажиллагааг команд бүрийн талбараар үзүүлжээ. Командын зүүн талаасаа 6 – н бит нь опкод бөгөөд процессор ямар үйлдэл хийхийг тодорхойлно. Дараагийн 5 бит хэсэг нь операнд регистрийг тодорхойлно. Үлдсэн битүүд нь үр дүнг хадгалах регистр болон шууд операнд юм. 3 4 0 8 0 f a 5 – команд 16 – таар 0011 0100 0000 1000 0000 1111 1010 0101– команд битээр 00110100000 01000 0000 1111 1010 0101– команд талбар ori$0$8 шууд операнд опкод операнд регистр ori $8, $0, 0x0fa5 [www.cdeq.mn/hw200]
Машин командын харьцуулалт ori $0 $8 0 f a 5 Өмнөх энэ командаас adduкоманд нь хэлбэрийн хувьд ялгаатай. 0 1 0 9 5 0 2 1 – команд 16 – таар 000000 01000 0100101010 00000 100001 – командын талбар опкод – операнд – операнд – хадгалах газар ------ 2 дох ORI болон ADDU команд нь ижилхэн 32 битийн өргөнтэй бөгөөд эхний 6 бит нь опкод ба ALU – ын ямар үйлдэл хийхийг заана. ADDU командын сүүлийн 6 бит нь 2 дох опкод бөгөөд шууд операндыг агуулаагүй. [www.cdeq.mn/hw200]
Битийн логик үйлдлийн хэрэглээ Машины хэлрүү хөрвүүлэгдсэн командын эхний 6 – н бит нь ямар үйлдэл хийхийг заах буюу опкод гэж нэрлэх бөгөөд заримдаа 2 – дох опкод хэрэгтэй болдог. Опкод нь мөн командын бусад хэсэг хэрхэн ашиглагдахыг заана. Ингэхээр командын хэдэн битээс бүрдэхийг бодож гаргасан материалыг харах хэрэгтэй болдог. Харин MIPS процессор нь үүнийг автоматаар хийдэг. 2 – тын тооллын 4 давуу талыг дахин дурдвал • Энгийн, хэрэглэхэд хялбар • Тодорхойгүй биш сигналуудыг өгч чадна • Ачаалах процесс алдаагүй болдог • Битүүдийн төлөв болон зэрэг нь илэрхий [www.cdeq.mn/hw200]
Битийн логик үйлдлийн хэрэглээ Ихэнх компьютерүүд бүхэл тооны арифметик болон хөвөх цэгтэй үйлдлүүдийг хийх чадвартай байдаг.Харин компьютерүүд илүү өргөн боломжтойгоор хөгжиж байгаа бөгөөд 2 – тын тоолол нь олон зүйлийг үзүүлэхэд хэрэглэгддэг. Бит дээрх логик үйлдлүүд нь олон төрлийн хэрэглээнд битииг тооцоолоход хэрэглэгддэг. Жишээ нь 32 битийн процессороор нэг бичиг баримт боловсрууллаа гэж бодоход фонт болон мэдээллийг суурьлуулах хэрэгтэй болно. Ингэхэд 32 битийн процессор бүрт мэдээлэл нь тодорхой битүүдийн төлөв буюу 2 – тын тоололд кодлогдсон байдаг. Харин процессорын програм нь тэдгээр кодуудыг боловсруулахдаа бит дээрх үйлдлүүдийг ашиглах хэрэгтэй болдог. [www.cdeq.mn/hw200]
AND команд Ассемблер нь машины хэлдээрх команд бүрийн битүүдтэй харилцан үйлдэл хийх аргуудтай байдаг. Энэ нь энгийн бөгөөд ассемблер хэлдээр програм бичих явцад логик операторуудыг хэрэглэнэ гэсэн үг юм. Харин тэр нь үнэндээ бит дээрх логик үйлдэл болох юм. ANDIкоманд нь 32 битийн 2 тоондээр and логик үйлдлийг хийдэг. andi d, s, const# регистр d < үр дүн орох регистр #регистр $s # 16 битийн тогтмол # 0x0000 ... const ... 0xFFFF Командын 3 операнд нь зөв дарааллаараа байрлах ба const нь өгөгдсөн хязгаарт байна. [www.cdeq.mn/hw200]
XOR команд Регистрийг 0 битээр дүүргэхийг регистрийг цэвэрлэх гэж нэрлэдэг. Регистрийг цэвэрлэх нь ерөнхий арга бөгөөд дээрх команд нь сайн арга бол биш. XOR нь ерөнхийдөө OR – ыг агуулсан төстэй команд бөгөөд 2 операнд 2 – уулаа 1 үед үр дүн нь 0 байдаг. Доор машины хэлдээрх дүрслэлийг үзүүлэв. XOR командын машины хэл нь ORI болон ANDI командтай төстэй харагддаг. xori d,s,const# регистр d # регистр $s #const 16 битийн тогтмол # 0x0000 ... const ... 0xFFFF [www.cdeq.mn/hw200]
XOR команд Командын 3 операнд нь зөв дарааллын дагуу бичигдэх ба const нь дээрх өгөгдсөн интервалд байрлах болно. Ассемблер програм дахь шууд операнд нь 16 битээс бага байвал ассемблер нь 16 бит хүртэл нь өргөтгөдөг. Хэрвээ 16 битээс давбал ассемблер нь алдааны мэдээллийг хэвлэх болно. [www.cdeq.mn/hw200]
Жишээ програм Энд 2 ижилхэн өгөгдлийн хооронд нийт 3 ялгаатай логик үйлдлийг хийх програмыг харуулжээ. Програмын мөр бүрийн ажиллагаа бүрт регистр нь ялгаатай утгуудыг авах болно. ## OR, AND, болон XOR үйлдлийн жишээ .text .globl main main: ori $15, $0,0x0FA5 # регистр $15 – руу өгөгдөл ачаалж байна ori $8,$15,0x368F # OR үйлдэл хийж байна andi $9,$15,0x368F # AND үйлдэл хийж байна xori $10,$15,0x368F # XOR үйлдэл хийж байна [www.cdeq.mn/hw200]
Жишээ програм SPIM – ыг ажлуулахад дараах үр дүн харагдана. [www.cdeq.mn/hw200]
Шилжүүлэх болон логик командууд Регистр доторх өгөгдлийг зүүн эсвэл баруун тийшээ нэг битээр шилжүүлж болдог. Энэ үйлдлийг хийдэг командуудыг shift буюу шилжүүлэх команд гэдэг. Агуулга : • Логик шилжүүлэх команд (sllба srl) • Үйлдэлгүй команд • Битдээрх логик үйлдлийн команд (or, and, xor, nor) • NOT команд • MOVE команд • Жишээ програм [www.cdeq.mn/hw200]
Логик зүүн шилжүүлэх команд Нэг байрлалд логик зүүн шилжүүлэх команд нь зүүнээс нь эхлэн бит битээр нь шилжүүлдэг. Ингэхэд бага бит (баруун захын бит) – д 0 бичигдэх ба ахлах бит (зүүн захын бит) нь хаягддаг. 2 удаа шилжүүлэх нь нэг удаа шилжүүлэх командыг 2 дуудсантай ижил байх болно. Мэдээж 0 байрлалд шилжүүлэх үйлдэлд битүүд өөрчлөгдөхгүй. N битийн өгөгдлийг N бит зүүн шилжүүлэлт хийвэл бүх битүүд нь 0 болж өөрчлөгдөнө. Зурагт 8 битийн үйлдлийг үзүүлсэн. Анхны өгөгдөл нь 10100111, харин үр дүн нь 01001110 [www.cdeq.mn/hw200]
Логик зүүн шилжүүлэх команд MIPS процессор нь 32 битийн регистр дээр үйлдлээ гүйцэтгэдэг. Үр дүн нь мөн 32 битийн регистрт хадгалагддаг. sll d,s,shft #$d< логик зүүн шилжүүлсэн үр дүнгээ хадгалах регистр # шилжүүлэх өгөгдөл #0 <= shft < 32 ALU (арифметик логик байгууламж) нь ямар битүүд дээр үйлдэл хийж байгаад анхаарал өгөхгүй үйлдлээ гүйцэтгэдэг. Хэрвээ битүүд нь тэмдэггүй бүхэл тоог илтгэж байвал зүүн шилжүүлэх нь үйлдэл нь тэр тоогоо 2 – оор үржүүлсэнтэй эквивалент юм. [www.cdeq.mn/hw200]
Шилжүүлэх програм Энэ програмд 32 битийн өгөгдөл дээр 2 бит зүүн шилжүүлэх үйлдэл хийгдэх ба үр дүн нь 8 бит дээрх үйлдэлтэй ижилхэн. .text .globl main main : ori $8, $0, 0x6F# регистр $8 – д өгөгдлийг ачаалж байна sll $9, $8, 2# 2 битээр зүүн тийш шилжүүлж байна # төгсгөл [www.cdeq.mn/hw200]
Шилжүүлэх байрлал ALU нь үйлдлээ гүйцэтгэхдээ : • Регистрээр өгөгдлийг ALU – д ачаалах • ALU үйлдлээ гүйцэтгэх • Үр дүнгээ тодорхой заагдсан регистрт хийх Эдгээр нь операнд регистр нь бас үр дүнг хадгалах регистр бол асуудалгүй. Учир нь эхний алхамаар л операнд өгөгдөл нь ALU – руу дамжиж үр дүнг хадгалах регистр бэлэн байдаг. Доор програм дахь SLL командын машины хэл дээрх бичлэгийг үзүүлэв. 0 0 0 8 4 8 8 0 – команд 16 – таар 0000 0000 0000 1000 0100 1000 1000 0000 - команд битээр 00000000000010000100000010000000 - командын талбарALUop $8 $8 2 sll [www.cdeq.mn/hw200]
Үйлдэлгүй команд Регистр $0 нь 32 ширхэг 0 битүүдийг агуулах бөгөөд зүүн шилжүүлэх үйлдлийн дараа үр дүн нь мөн 0 байх болно. Ямар нэг команд регистр $0 – ыг өөрчлөх нь хэрэгжихгүй. Ингэж үйлдэл хийдэггүй машины хэлдээрх командыг үйлдэлгүй команд гэж нэрлэдэг. MIPS процессорт ялангуяа энэ үйлдэлгүй команд маш их хэрэглэгддэг. [www.cdeq.mn/hw200]
Логик баруун шилжүүлэх команд MIPS процессор нь логик баруун шилжүүлэх командыг хэрэгжүүлдэг. Ингэхдээ өгөгдөл бит битээр баруун тийш шилждэг. Ахлах бит нь 0 болж бага бит нь хаягддаг. Хэрвээ тухайн өгөгдөл нь тэмдэггүй бүхэл тоо байвал 1 бит логик баруун шилжүүлэх үйлдэл нь анхны өгөгдлийг 2 – т хуваасантай тэнцүү байдаг. N удаа баруун шилжүүлэх үйлдэл нь 2N – д хуваасантай тэнцүү үр дүнг үзүүлнэ. srl d,s,shft# үр дүнг хадгалах регистр d # shft нь 5 битийн бүхэл тоо, 0 <= shft < 32 [www.cdeq.mn/hw200]
NOR команд Зурагт NOR командын бит дээрх үйлдлийг харуулжээ. NOR команд нь шууд операндгүй бөгөөд эхлээд OR үйлдэл хийгээд дараа нь үгүйсгэл авахтай эквивалент юм. Ассемблер хэлдээрх бичлэг нь nor d,s,t#NOR үйлдлийг хадгалах регистр # үйлдлээ $s болон $t – ын хооронд хийдэг [www.cdeq.mn/hw200]
Командын хүснэгт Хүснэгтэнд логик үйлдлүүдийн регистр регистрээр нь харуулжээ. Регистр d нь үр дүнг хадгалах бөгөөд s болон t нь операндыг агуулах регистрүүд юм. [www.cdeq.mn/hw200]
NOT болон MOVE команд NOT командыг регистр $0 болон NOR командыг ашиглан гаргаж авдаг. nor d,s,$0# регистр d үр дүнг хадгална Өгөгдлийг нэг регистрээс өөр регистрт хуулах үйлдлийг зөөх (move) үйлдэл гэдэг. move үйлдлийг OR болон регистр 0 – ыг ашиглан хийдэг. or d,s,$0#d үр дүнг хадгалах регистр [www.cdeq.mn/hw200]
Жишээ програм Энд ORI командыг үзүүлсэн байна. Эхний мөр нь битүүдийн дугаар бөгөөд баруун талын бага битээсээ эхлэн дугаарлагдсан байна. Командын опкод нь 0xD буюу 001101 гэсэн 6 битийн өргөнтэй. Үйлдэл хийх регистр нь s, хадгалах регистр нь d ба шууд операнд нь const юм. програмын ассемблер бичлэг нь ori $8,$9,0x004A Энэ үзүүлэх жишээ програм команд нь регистр $25 – д очих болно. Жишээ програмд логик болон шилжүүлэх үйлдлийг хийх болно. Эхлээд регистр $25 – ыг 0 битээр дүүргэж цэвэрлэе. [www.cdeq.mn/hw200]
Жишээ програм Програмын эхлэл нь or $25,$0,$0# регистр $25 – ыг цэвэрлэж байна Дараа нь өмнөх командаа гүйцэтгэнэ. Утгуудыг тус тусд задлаж бичвэл : Команд нь 4 талбараас бүрдэх бөгөөд утгаа $11, $12, $13, болон $14 регистрүүдэд хийх болно. or $25,$0,$0# регистр $25 – ыг цэвэрлэж байна ori $11,$0,________ # опкод ori $12,$0,________# операнд $s ori $13,$0,________ # хадгалах регистр $d ori $14,$0,________ # шууд операнд [www.cdeq.mn/hw200]
Опкодыг шилжүүлэх(Жишээ програм) ORI команд нь өгөгдлийг хадгалсан регистрийн бага битэд шууд операндыг хийх болно. or $25,$0,$0# регистр $25 – ыг цэвэрлэж байна ori $11,$0,0xD# опкод ori $12,$0,0x9# операнд $s ori $13,$0,0x8# хадгалах регистр $d ori $14,$0,0x004A# шууд операнд Регистр $11 нь баруун битээс эхлэн опкодыг агуулна. Ялангуяа опкод нь 26 – 31 ахлах 6 – н битэд байрлах хэрэгтэй болно. Ингэхийн тулд өгөгдлийг зөв байрлалд шилжүүлэхийн тулд sllкомандыг ашиглана. [www.cdeq.mn/hw200]
Үргэлжлэл 5 дах бит хүртэл 6 бит опкод байрлана. Тэгэхээр 26 битээр зүүн тийш шилжүүлэх хэрэгтэй болно. Програмыг ажлуулбал Харин одоо опкод зөв байрлалдаа орсон. Програмын зорилго нь регистр $25 – д хийх учир дутуу кодыг гүйцээе. [www.cdeq.mn/hw200]
Source register(үргэлжлэл) Одоо регистр $9 – ыг зөв байрлалд нь тавих хэрэгтэй бөгөөд эхний хүснэгтэнд үзүүлснээр регистр $12 – т баруун битээс нь эхлэн байрласан. Үүнийг регистр $25 – ын 21 – 25 битүүдэд байрлуулах хэрэгтэй. Програмын үр дүнд дараах байдалтай байх болно. Регистр $s – ын бага бит нь регистр $12 – ын 0 битээс эхлэн байрлана. Тэгэхээр командын 21 – р битээс эхлэн байрлуулах ёстой болно. Ингэхийн тулд 21 бит шилжүүлэх бөгөөд дараа нь OR хийн байрлуулна. [www.cdeq.mn/hw200]
Source register(үргэлжлэл) OR үйлдэл хийн регистрийн шилжүүлбэл [www.cdeq.mn/hw200]
Хадгалах регистр ба тогтмол OR болон шилжүүлэх функцтэй ижлээр хадгалах регистр болон тогтмолыг зөв байрлалд нь тавих болно. Ингээд манай жишээ програм бэлэн болно. [www.cdeq.mn/hw200]
Програмын ажиллагаа [www.cdeq.mn/hw200]