40
Компьютерийн зохион байгуулалт, ассемблер хэл Код : HW200 Улирал : Хавар 2009 Багш : С. Байгалтөгс /проф, доктор/ Монгол Улсын Шинжлэх Ухаан Технологийн Их Сургууль Сэдэв 9,10 :Бүтэцлэгдсэн програмчлал

Компьютерийн зохион байгуулалт, ассемблер хэл

  • Upload
    mabli

  • View
    164

  • Download
    0

Embed Size (px)

DESCRIPTION

Монгол Улсын Шинжлэх Ухаан Технологийн Их Сургууль. Компьютерийн зохион байгуулалт, ассемблер хэл. Код : HW200 Улирал : Хавар 2009 Багш : С. Байгалтөгс /проф, доктор/. Сэдэв 9 ,10 : Бүтэцлэгдсэн програмчлал. Бүтэцлэгдсэн програмчлал (Structured Programming). - PowerPoint PPT Presentation

Citation preview

Page 1: Компьютерийн зохион байгуулалт, ассемблер хэл

Компьютерийн зохион байгуулалт, ассемблер

хэл

Код : HW200

Улирал : Хавар 2009

Багш : С. Байгалтөгс /проф, доктор/

Монгол Улсын Шинжлэх Ухаан Технологийн Их Сургууль

Сэдэв 9,10 :Бүтэцлэгдсэн програмчлал

Page 2: Компьютерийн зохион байгуулалт, ассемблер хэл

Бүтэцлэгдсэн програмчлал (Structured Programming)

Энэ сэдвээр компьютерийн шинжлэх ухаан дахь хоёр чухал ач холболгдолтой зүйл болох ямар машин командууд процессорт хэрэглэгддэг, програмыг хэрхэн бэлдэж бүтээх талаар үзэх болно. Бүтэцлэгдсэн програмчлалын арга нь найдвартай програмыг бүтээхэд хэрэглэгдэг.

Агуулга : Хүчин чадлын тооцоолол Машин командын хамгийн бага цогц Throughput - хүчин чадал CISC ба RISC Бүтэцлэгдсэн програмчлал Удирдлагын бүтцийн хамгийн бага цогц

[www.cdeq.mn/hw200] 2

Page 3: Компьютерийн зохион байгуулалт, ассемблер хэл

Хүчин чадлын тооцоололӨмнөх сэдвүүдээр командын тодорхой хэдэн төрлийг үзсэн :

Бит дээрх логик командууд Бүхэл тооны арифметикийн командууд Санах ойд хандах командууд Програмын урсгалыг өөрчлөх нөхцөлт командууд

Мэдээж нэг процессор хүчирхэг байхын тулд хэдэн төрлийн командуудтай байх ёстой вэ гэсэн асуулт гарч ирнэ. Үүний хариулт нь : командын дээрх цогц нь хангалттай юм. Харин компьютерийн хүчин чадлын тодорхойлолт нь тодорхой бус байдаг.

Заримдаа хүмүүс үүнийг тодорхойлохдоо “хурд” бас “процессорын тооцолол” гэдэг. Мэдээж энэ хоёрын хослол байх хэрэгтэй. Одоо дараагийн тодорхойлолтыг авч үзье

[www.cdeq.mn/hw200] 3

Page 4: Компьютерийн зохион байгуулалт, ассемблер хэл

Хүчин чадлын тооцоололХүчин чадлын тооцоолол : Хоёр процессор нь ижилхэн тооцоолох хүчин чадалтай. Үүнд хэрвээ тэдгээрт ижилхэн програмууд ачаалагдаж(процессор бүрийн машин хэлдэх хөрвүүлэлтийн дараах) мөн ижилхэн үр дүнд боловсруулах үед юм.

Энэ нь бүх програмын(процессор бүр дэх машин хэл дээрх хөрвүүлэлтийн дараах) хувьд үнэн байх ёстой. Програмын үр дүн нь compiler хөрвүүлэгчээс хамаарч боловсруулагддаг. Жишээ нь, С хэлний compiler нь int өгөгдлийн төрлийн хувьд битүүдийн ялгаатай дугаарлалтыг хийдэг. Харин энэ процессорынх биш хөрвүүлэгчээс болж байгаа хэрэг юм.

[www.cdeq.mn/hw200] 4

Page 5: Компьютерийн зохион байгуулалт, ассемблер хэл

Ижилхэн чадалтай процессорууд16 битийн INTEL микропроцессор нь 64 бит бүхэл тооны арифметикийг хэрэглэсэн програмыг ажлуулж чадна. Энэ нь 64 битийн үйлдэл бүрт 16 битийн машины үйлдлийг хийдэг гэсэн үг.

Орчин үеийн процессоруудын жишээ нь : Pentium1 болон Pentium4 процессорууд нь ижилхэн програмуудыг ажлуулж чадна. P – 4 процессорууд нь бусдыгаа бодвол машин циклүүд нь хурдан мөн машин командын олон хэлбэр байдаг.

С дээрх програмыг хоёр процессор дээр ажлуулахад үр дүн нь ижил гарах болно. Харин програмын ажиллах хугацаа нь Р – 1 нь Р – 4 – ийг бодвол урт буюу удаан ажиллах болно. 1952 онд SWAC дижитал компьютер нь төгс тоонуудыг олоход програмчлагдсан байсан. Төгс тоо гэдэг нь бүхэл тоо бөгөөд хуваагч тоонуудых нь нийлбэр тэр тоо өөрөө гардаг тоо юм.

[www.cdeq.mn/hw200] 5

Page 6: Компьютерийн зохион байгуулалт, ассемблер хэл

Ижилхэн чадалтай процессоруудЖишээ нь : 6 нь төгс тоо бөгөөд учир нь 6 – г хуваагч тоонууд нь 1, 2, 3 ба 6 = 1 + 2 + 3 юм. Өөр төгс тоонууд нь 28, 496, 8128 юм.

SWAC – ын маш их тооцоололын дараа олсон төгс тоо нь 33550336 юм.

[www.cdeq.mn/hw200] 6

Page 7: Компьютерийн зохион байгуулалт, ассемблер хэл

Min Командын цогц Хүчин чадлын тооцооллын тодорхойлолт ёсоор маш хурдтай процессор нь SWAC – аас илүү хүчин чадалтай биш болж байгаа юм.

Процессорууд нь гадаад төхөөрөмжүүдээ удирдаж тэдгээрийн хооронд мэдээлэл дамжуулж, тэдгээрээс мэдээлэл хүлээн авч байх ёстой. Эдгээрийг хийхдээ системийн түгээгүүрээр дамжуулан мөн санах ойгоос унших болон бичих үйлдэл хийн гадаад төхөөрөмжүүдээ удирддаг. Бүх процессорууд нь санах ойд бичилт хийх, ойгоос унших, хатуу диск болон график картыг удирдах зэрэг үйлдлүүдийг хийдэг. Мөн мультимедиа командууд өнөө үеийн шинэ процессорын чипт нэмэгдсэн.

Ямар машин команд процессорт заавал байдаг вэ?

[www.cdeq.mn/hw200] 7

Page 8: Компьютерийн зохион байгуулалт, ассемблер хэл

Командын цогцБүх процессорууд нь бит дээрх үйлдлийн үндсэн машин командууд, нөхцөл салаалах, болон санах ойд хандахыг дэмждэг ба ижилхэн тооцоолох хүчин чадалтай байдаг.

Бүхэл болон хөвөх таслалтай тоон дээрх арифметик үйлдлүүд нь бит дээрх үйлдлийн командуудаар хийгддэг учир арифметик командууд нь үндсэн команд биш юм. Дээрх тодорхой командын цогц болон нэмэлт шинэ командууд нь процессорын тооцоолох хүчин чадалд нэмэгддэггүй.

Throughput гэдэг нь нэгж хугацаанд процессорын гүйцэтгэж чадах тооцооллын хэмжээ юм. Процессор нь нэг секундэд 50 сая командыг гүйцэтгэж чаддаг.

[www.cdeq.mn/hw200] 8

Page 9: Компьютерийн зохион байгуулалт, ассемблер хэл

CISCCISC ( Complex Instruction Set Computer ) процессор нь олон командуудтай бөгөөд тэдгээр комплекс командуудын зарим нь машин цикл бүрт олон ачаалагдаж ажилладаг. INTEL процессорууд нь CISC архитектуртай. RISC ( Reduced Instruction Set Computer ) процессор нь цөөх хэдэн командаас тогтох бөгөөд тэдгээр командууд нь энгийн байдаг. Зарим хэдэн команд нь CISC командтай эквивалент ажилладаг. MIPS процессорууд нь RISC юм. Хэрвээ командууд бүх зүйлүүд нь ижилхэн бол CISC нь маш өргөн throughput – тэй байх болно. Ялангуяа том хэмжээтэй цахиуран чип нь олон тооны комплекс командыг хэрэгжүүлэхэд хэрэглэгддэг. Энэ нь өгөгдөл нь хол зайд зөөгдөж арай их хугацааг зарцуулах болно. Тиймээс машин цикл нь удаан байх ба гүйцэтгэлийн хугацаа нь илүү их болно.

[www.cdeq.mn/hw200] 9

Page 10: Компьютерийн зохион байгуулалт, ассемблер хэл

CISCЭнгийн командууд нь нэг комплекс командтай тэнцдэг. Харин энгийн команд нь олон дахин давтагдаж гүйцэтгэгддэг. CISC – ийн сул тал нь комплекс командыг хэрэглэх нь компайлерт хүнд байдаг. Энэ нь програмыг компайлдахад олон дахин давтагдаж зөвхөн энгийн командуудыг хэрэглэх машин програм руу хөрвүүлэгддэг. Сүүлд Pentium чипт MMX (multi-media extension) командууд нэмэгдсэн.

[www.cdeq.mn/hw200] 10

Page 11: Компьютерийн зохион байгуулалт, ассемблер хэл

RISCЦөөрүүлсэн командын цогцтой компьютер буюу RISC нь цөөхөн командуудаас бүрддэг. RISC – ийн гол төсөөлөл нь комплекс командыг бодвол цөөхөн командын цогцтой байснаар команд нь хурдан биелэгдэж сайжрах давуу талтай. Хэрвээ чип дээр цөөхөн командын цогцыг хэрэгжүүлснээр чип нь илүү олон ерөнхий зориулалтын регистрт зориулсан сул зайтай болох ба мөн чип дээр кэш санах ой, командын pipeline багтаж хурд нэмэгддэг.

Сүүлийн арван жилд RISC чип нь CISC чипийн түрүүнд байдаг байсан. Харин орчин үеийн CISC чип нь RISC – ийн олон (cache, pipelining гэх мэт) онцлог шинжүүдийг агуулах болсон. Мөн хуучин RISC чипийг бодвол илүү их throughput буюу тооцоолох хэмжээ ихэссэн.

[www.cdeq.mn/hw200] 11

Page 12: Компьютерийн зохион байгуулалт, ассемблер хэл

RISCХэрэглэгч болон оффисийн компьютерууд нь windows програм хангамжийн хамт CISC чипийг хэрэглэх нь эвтэйхэн болсон.

Embedded system буюу суурьлагдсан системд RISC – ийг хэрэглэдэг.

[www.cdeq.mn/hw200] 12

Page 13: Компьютерийн зохион байгуулалт, ассемблер хэл

Bug-free Software

Гүйцэтгэл нь start – аас эхлэх болно. Хэрвээ addu командаас гүйцэтгэл нь эхлэх бол ямар байх вэ? Регистр $9 болон $8 нь магадгүй ялгаатай тоог агуулах болно.

start нь эхний командын ажиллах хаягийг заах тэмдэгт хаяг юм. Start + 8 нь 8 байтын хаягийг илэрхийлнэ. Jump команд нь тэр хаягруу удирдлагыг шилжүүлнэ.

[www.cdeq.mn/hw200] 13

Page 14: Компьютерийн зохион байгуулалт, ассемблер хэл

Bug-free BlocksКодын нэг блокын дунд хэсэгрүү удирдлага үсрэхэд bug бий болно. Хэрвээ тэр блок нь эхлэлээс төгсгөл хүртэл биелэгдэхээр бичигдсэн бол эхлэлийн цэгээсээ эхэлнэ эсвэл алдаа үүсэх болно.

Энэ нь бүтэцлэгдсэн програмчлалын нэг

ойлголт юм. Кодын нэг блок нь нэг entry

point (гүйцэтгэл эхлэх цэг) ба нэг exit point

(төгсөх цэг) агуулах командуудын нэг

дарааллыг хэлнэ. Entry point болон exit point

нь эхлэх болон төгсөх нөхцөлүүдээр тодорхойлогдоно. Блок зөв биелэгдэх үед гүйцэтгэл нь entry point – оос эхлэх ёстой ба эхлэх нөхцөл үнэн болно. Харин гүйцэтгэл дуусах үед гарах нөхцөл үнэн болно.

[www.cdeq.mn/hw200] 14

Page 15: Компьютерийн зохион байгуулалт, ассемблер хэл

Бүтцийн дүрэм 1 : Кодын блокХэрвээ эхлэх нөхцөл зөв, дуусах нөхцөл нь худал үед bug блокт байх ёстой. Энэ нь хэрвээ биелэлт нь нэг блок руу үсрэхээр бол худал байх болно.

Бүтэцлэгдсэн програмчлалын дүрэм 1 : Кодын блок нь бүтэцлэгдсэн. Бүтцийн схемд нэг эхлэх цэгтэй, нэг дуусах цэгтэй тэгш өнцөгт нь бүтэцлэгдсэн байх болно.

[www.cdeq.mn/hw200] 15

Page 16: Компьютерийн зохион байгуулалт, ассемблер хэл

Дүрэм 1 – ийн хэрэгжүүлэлтДараалал дахь командууд нь нэг нэгээрээ биелэгдэнэ.

[www.cdeq.mn/hw200] 16

Page 17: Компьютерийн зохион байгуулалт, ассемблер хэл

Дараалал Паскаль, С, Java нь бүтэцлэгдсэн хэл юм. Эдгээр хэлэндэх командуудын нэг блок нь нэг эхлэх болон төгсөх цэгтэй.

Блок 1 – ийн төгсөх нөхцөлүүд нь үнэн

бол блок 2 дох эхлэх нөхцөлүүдэд

шилжинэ. Ингэж хоёр блок дарааллын

дагуу биелэнэ.

[www.cdeq.mn/hw200] 17

Page 18: Компьютерийн зохион байгуулалт, ассемблер хэл

Бүтцийн дүрэм 2 : Дараалал Хэрвээ блок бүрийн төгсөх нөхцөл нь дараагийн блокын эхлэлийг зааж байвал блокуудын дараалал нь зөв байх болно. Програмын биелэлт нь блокын эхлэлийн цэгт нэвтэрч блокын төгсгөлийн цэгт хүрнэ.

Бүтэцлэгдсэн програмчлалын дүрэм 2 :

Дараалсан хоёр эсвэл түүнээс дээш кодын

блок нь бүтэцлэгдсэн байх болно. Энэ дүрмийн

ассемблер хэлний хэрэгжүүлэлт нь эхний

дүрэмтэй ижилхэн байх болно.

[www.cdeq.mn/hw200] 18

Page 19: Компьютерийн зохион байгуулалт, ассемблер хэл

Бүтцийн дүрэм 3 : СэлгэлтIf – then – else нь заримдаа сэлгэлт гэж нэрлэгддэг. Учир нь сэлгэх сонголт юм. Бүтэцлэгдсэн програмчлалд сонголт бүр нь нэг кодын блок байдаг. Хэрвээ сэлгэлт нь бүтцийн схемийн дагуу бол энд нэг эхлэлийн цэг, нэг төгсгөлийн цэг байх болно.

Бүтэцлэгдсэн програмчлалын дүрэм 3 :

Хоёр кодын блокын сэлгэлт нь бүтэцлэгдсэн

байх болно.

Сэлгэлтийн бүтцийн эхлэлийн нөхцөлийн

жишээ нь : регистр $8 нь тэмдэгтэй бүхэл

тоог агуулдаг. Гарах нөхцөл нь : регистр $8 нь

тэмдэгтэй бүхэл тооны абсолют утга агуулах

болно. [www.cdeq.mn/hw200] 19

Page 20: Компьютерийн зохион байгуулалт, ассемблер хэл

Сэлгэлтийн хэрэгжүүлэлтСалаалах бүтэц нь гарах нөхцөлийг биелүүлэхэд хэрэглэгдэнэ.

[www.cdeq.mn/hw200] 20

Page 21: Компьютерийн зохион байгуулалт, ассемблер хэл

Бүтцийн дүрэм 4 : ДавталтДавталт (while – loop) нь дүрмийн дагуу тодорхойлогдох болно. Энд нэг эхлэх цэг болон нэг төгсөх цэгтэй байх болно. Эхлэлийн нөхцөл нь хангагдсан байх бөгөөд төгсөх нөхцөл нь биелэгдэх боломжтой байх болно. Мөн кодын гаднах өөр цэгээс бүтэцрүү үсрэлт байхгүй.

Бүтэцлэгдсэн програмчлалын дүрэм 4 :

Нэг кодын блокын давталт нь

бүтэцлэгдсэн байдаг.

[www.cdeq.mn/hw200] 21

Page 22: Компьютерийн зохион байгуулалт, ассемблер хэл

Кодын блокДоорх бүх бүтцүүдийн хувьд : эхлэлийн цэг нь оройд нь, төгсгөлийн цэг нь доор байрлах болно. Мөн бүтцийн гадна тал руу үсрэлт байхгүй. Бүтэц бүр нь кодын блок бүрийг илэрхийлнэ.

[www.cdeq.mn/hw200] 22

Page 23: Компьютерийн зохион байгуулалт, ассемблер хэл

Бүтцийн дүрэм 5 : Nesting structuresБүтцийн схемийн дагуу кодын блок бүрийг бүтцүүдийн аль нэгрүү өргөтгөж болно.

Бүтэцлэгдсэн програмчлалын дүрэм 5 : Нэг эхлэлийн цэг болон нэг төгсгөлийн цэгтэй бүтэц нь нэг кодын блоктой эквивалент байх болно.

[www.cdeq.mn/hw200] 23

Page 24: Компьютерийн зохион байгуулалт, ассемблер хэл

Top – down дизайнАбсолют утгыг олох нь Top – down бүтэцлэгдсэн дизайны нэг жишээ юм. Энэ дизайны

хэрэглээ нь нэг програмын

блок эхлэх ба дараа нь дараалал,

сэлгэлт, эсвэл давталтын бүтцийн

блок байрлах болно.

Жишээ нь хэрэглэгчийн

оруулсан бүхэл тооны

нийлбэрийг олох програмын

дизайныг гаргая. Эхний дизайн нь :

[www.cdeq.mn/hw200] 24

Page 25: Компьютерийн зохион байгуулалт, ассемблер хэл

Давталт болон салаалах жишээЭнэ сэдвээр давталт болон салаалах үйлдлийн зураг хавсаргаж тайлбарласан бүтэцлэгдсэн програмчлалын хоёр жишээ програмыг үзэх болно. Ассемблер хэлэнд бүхэл тооны массив, тэмдэгт бичвэрийг тодорхойлох болно.

Агуулга :

[www.cdeq.mn/hw200] 25

Page 26: Компьютерийн зохион байгуулалт, ассемблер хэл

Null-terminated StringБичвэр нь ASCII тэмдэгтүүдийн дараалал бөгөөд нэг нь нэг байт байдаг. Бичвэр нь С болон С++ хэлний хувьд ерөнхий байх ба энд ассемблер хэлэндэх зарлагааг үзүүлье.

Тэмдэгтүүд нь санах ойд ‘T’ – ээс эхлэн дарааллаараа байрлах болно. Зурагт үүнийг үзүүлэв. Хоосон байт нь ASCII хоосон зай (0x20) байх болно. Сүүлийн байт нь 0х00 байх буюу ташуу зураасаар үзүүлсэн.

Харин одоо Windows PC – д ажиллаж буй SPIM програмын data display – г үзүүлэв.

[www.cdeq.mn/hw200] 26

Page 27: Компьютерийн зохион байгуулалт, ассемблер хэл

Null-terminated String

space буюу хоосон зай (0x20) – г ‘_’ – ээр үзүүлсэн ба энэ null байтын хаяг нь 0x1000001B

[www.cdeq.mn/hw200] 27

Page 28: Компьютерийн зохион байгуулалт, ассемблер хэл

Бичвэрийн уртБичвэрийн урт нь null – ыг тоолохгүй ба тэмдэгтүүдийн тоогоор тодорхойлогдоно. Уртыг тооцоолохдоо 0 – ээс эхлэн тоолно. Null байт биш л бол тоолуур нэгээр нэмэгдэх ба null тааралдвал тоололтыг зогсоох болно. Энэ процедурыг үзүүлсэн бүтцийн схем нь бүтэцлэгдсэн. Програмын бүдүүвчийг үзүүлвэл :

[www.cdeq.mn/hw200] 28

Page 29: Компьютерийн зохион байгуулалт, ассемблер хэл

Бичвэрийн урт

[www.cdeq.mn/hw200] 29

Page 30: Компьютерийн зохион байгуулалт, ассемблер хэл

Program continued Диаграмын дараагийн

хэсэг нь "point at the first character" гэж

нэрлэгдэх болно. Одоо өгөгдлийн хэсэг нь 0x10000000 хаягаас

эхлэдэг. Үүний эхний 16 бит нь 0x1000 байна. Үүнийг lui

команд ашиглан бааз регистрт ачаалах болно.

[www.cdeq.mn/hw200] 30

Page 31: Компьютерийн зохион байгуулалт, ассемблер хэл

Давталтын биеlbu команд дахь байтын

хаяг нь шилжилт + $9 өөр тооцоологдох

болно. Lbu команд нь регистр $10 – ын бага байтад тэмдгийг ачаалах болно. Эхний гурван байт нь тэг байна. Beq команд нь

регистр нь тэг байхыг шалгана.

[www.cdeq.mn/hw200] 31

Page 32: Компьютерийн зохион байгуулалт, ассемблер хэл

Complete Program

[www.cdeq.mn/hw200] 32

Page 33: Компьютерийн зохион байгуулалт, ассемблер хэл

Бүхэл тоон массивБүхэл тоон массив нь санах ойн дараалсан 32 битийн бүхэл тоон дараалал юм. Массив дахь бүхэл тоонуудын тоо нь санах ойд хадгалагдах утга байх болно.

Ассемблер хэлэнд бүхэл тоон массивыг зарлахдаа бүхэл тоонуудыг таслалаар тусгаарлан .word директивийг ашигладаг.

.word директив нь зэрэгцүүлсэн байрлалд өгөгдлийг хийх болно.

[www.cdeq.mn/hw200] 33

Page 34: Компьютерийн зохион байгуулалт, ассемблер хэл

Жишээ програм : массивын нийлбэрЖишээ програмд бүхэл тоон массивыг хэрэглэнэ. Массивын урт өгөгдөх ба програм нь 3 нийлбэрийг олно :

Магадгүй энэ жишээг өмнө нь Java болон C хэл дээр хийж байсан байх.

[www.cdeq.mn/hw200] 34

Page 35: Компьютерийн зохион байгуулалт, ассемблер хэл

Бүтцийн схемБүтцийн схем нь ямар ч хэлний хувьд ижилхэн байх болно.

[www.cdeq.mn/hw200] 35

Page 36: Компьютерийн зохион байгуулалт, ассемблер хэл

Массивын хэмжээг ачаалахМассивын хэмжээг авах хэрэгтэй. Хэмжээ нь өгөгдлийн хэсгийн (data section) эхний 32 бит байна. 0x10000000 хаягнаас өгөгдлийн хэсэг эхлэх ба бааз регистрт хаягийн эхний хагасыг

ачаалах болно.

Дараа нь

хэмжээг

регистр $15 – д

ачаалах болно.

[www.cdeq.mn/hw200] 36

Page 37: Компьютерийн зохион байгуулалт, ассемблер хэл

Building the Loopbeq команд нь массивын төгсгөлд count очвол давталтаас гарч салаалахад хэрэглэгдэж байгаа.

[www.cdeq.mn/hw200] 37

Page 38: Компьютерийн зохион байгуулалт, ассемблер хэл

Add Entry to SumДавталтын

төгсгөлд count

нь нэгээр

нэмэгдэж байгаа.

Мөн заагч

дөрвөөр ихсэж

байгаа. Харин

давталтын биеийн

голд массивын

элементийг авч

бүх бүхэл

тоонуудын

нийлбэр дээр нэмж байгаа.

[www.cdeq.mn/hw200] 38

Page 39: Компьютерийн зохион байгуулалт, ассемблер хэл

Is the Entry Negative?

[www.cdeq.mn/hw200] 39

Page 40: Компьютерийн зохион байгуулалт, ассемблер хэл

Complete Program

[www.cdeq.mn/hw200] 40