35
Компьютерийн зохион байгуулалт, ассемблер хэл Код : HW200 Улирал : Хавар 2009 Багш : С. Байгалтөгс /проф, доктор/ Монгол Улсын Шинжлэх Ухаан Технологийн Их Сургууль Сэдэв 8 :Үсрэх болон салаалах командууд [www.cdeq.mn/hw200]

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

[www.cdeq.mn/hw200]

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

хэл

Код : HW200

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

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

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

Сэдэв 8 :Үсрэх болон салаалах командууд

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

Үсрэх болон салаалах командуудКомпьютерийн хүчин чадал нь өгөгдлөөс хамаарч үйлдлийг өөрчлөх болон үйлдэлээ дахин давтах зэрэг чадвараас хамаардаг.

Орчин үеийн програмчлалын хэл нь бүтцийн удирдлагыг хэрэглэн тэдгээрийг шийддэг болсон. Үйлдэл давтахыг while бүтцээр ба удирдлага сонгох замыг if – then – else бүтцээр хийдэг. Харин процессорын машин команд болон ассемблер хэлэнд эдгээр бүтэц байдаггүй. Тиймээс ассемблер хэл дээр програмаа бичихдээ эдгээр бүтцийг үндсэн ассемлер командуудыг ашиглан бий болгож ашигладаг.

Эдгээр үндсэн командууд нь jump(үсрэх) болон нөхцөл салаалах командууд юм.

[www.cdeq.mn/hw200]

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

Үсрэх болон салаалах командуудАгуулга :

Үсрэх команд

- j команд (jump – үсрэх) Нөхцөлт салаалах команд

- beq команд (тэнцүү бол)

- bne команд (тэнцүү биш бол)

[www.cdeq.mn/hw200]

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

Машин цикл (эргэн санавал)Програм ажиллаж байх явцад түүнд ашиглагдах өгөгдлүүд нь үндсэн санах ойд байрладаг. Нэг командын хаяг нь 4 байт командын эхний байтын хаяг байдаг. Машин цикл бүр нэг машин командыг биелүүлдэг.

Машин цикл эхэнд PC буюу program counter нь санах ойгоос биелэх командын хаягийг барин агуулж байдаг.

Ингээд команд нь процессороор орон гүйцэтгэлд

бэлэн болно. Машин циклийн дунд үед PC нь 4 – өөр

нэмэгдэж командыг заах болно. Ингэж барьсан

командаа гүйцэтгэж машин цикл нь автоматаар

дарааллын дагуу командыг гүйцэтгэх болно.

[www.cdeq.mn/hw200]

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

Үргэлжлэл Харин jump команд биелэгдэх үед Program counter – т шинэ хаяг орох бөгөөд ингэснээр машин цикл эхнээсээ эхлэн (зурагт үзүүлсэн) шинэ хаягандахь командыг барих болно. Ингэж командыг гүйцэтгэхийн оронд санах ой дох jump командын дагуу процессор нь санах ой дох өөр хаягандахь командыг биелүүлдэг. PC өөрчлөгдөхийн өмнө санах ой дох jump командын дагуу команд нь биелэгдэх болно. Команд нь биелэгдсний дараа үсэрсэн хаягнаас эхлэн дараагийн команд нь биелэгддэг. Санах ой дох jump командын дагуу өөр хаягандахь командруу үсрэхийг салаалах дэлээ (delay) гэж нэрлэдэг. Энэ дэлээ нь MIPS – ын pipeline – аас шалтгаалдаг. Энгийн үед командууд нь дарааллын дагуу биелэгддэг. Машин цикл нь эдгээр командыг гүйцэтгэхээр дуудах үед гүйцэтгэл нь альхэдийн эхлэсэн байдаг. Үүнийг командын pipe гэдэг.

[www.cdeq.mn/hw200]

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

PC – ын өөрчлөлтЭнд командын дарааллыг үзүүлжээ. “load” болон “add” нь энгийн команд бөгөөд “jump” команд нь PC – т орох хаягийг үзүүлжээ. Сүүлийн команд no – op нь Program counter өөрчлөгдөх хугацааг олгох салаалах дэлээг нөхөж байна. Програм эхлэхэд дараах 4 команд нь төгсгөлгүй давтагдах болно.

Давталтын бүтэц нь

jump командаас

бүтэж байна. Энэ

jump командын

зорилго нь PC – т

0x00400000 хаягийг

хийх юм. [www.cdeq.mn/hw200]

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

Дадлага Энд өөр програмын схемийг үзүүлжээ. Командууд нь дараалан биелэгдэх ба эдгээрт анхаарал хандуулалгүй jump команд болон зорилгыг нь анхаарах хэрэгтэй.

jump командын үсрэх хаяг 0x00450000

[www.cdeq.mn/hw200]

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

Jump команд Өмнө үзсэнээр jump команд нь program counter – т 32 битийн хаягийг ачаалж байна. Ингэхээр 32 битийн команд нь хэрхэн 32 битийн хаягийг заах вэ? Зарим командын битүүд нь зөвхөн opcode – д хэрэглэгддэг. Энэ нь jump командын ассемблер хэлний хэлбэр юм.

Командын машин хэлний бичиглэл нь :

Энэ командад 26 битийн хаяг агуулагдаж байна. Харин энэ үсрэх 26 битийн хаяг нь 32 бит хаягруу хувирдаг.

[www.cdeq.mn/hw200]

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

Jump команд Энэ нь үсрэх команд биелэгдэх ажиллагааны үед хийгддэг. Командууд нь үргэлж тухайн хаягнаас эхлэх бөгөөд 32 бит командын хаягийн хамгийн бага 2 бит нь үргэлж “00” байдаг. 26 бит хаяг нь зүүн тийшээ 2 бит шилжин үр дүнд нь 28 бит хаяг бий болно. Харин шилжүүлэх үйлдлийн дараа хаягийн ахлах 4 битийг нөхөх хэрэгтэй болох бөгөөд энэ 4 бит нь PC – аас ирэх болно. Энэ нь 28 бит хаягийн ахлах оронг төгсгөж 32 бит хаяг болох болно.

Жишээ нь дараагийн хуудсанд 0x5B145188 хаягруу үсрэх командын машин хэлийг үзүүлжээ. Тухайн команд нь санах ойн 0x56767250 хаягт байрших болно.

[www.cdeq.mn/hw200]

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

Jump команд

[www.cdeq.mn/hw200]

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

Jump команд Jump болон салаалах команд нь ижилхэн, хаягруу хандах болно. Jump командын үсрэх хаяг болон jump командын дараагийн команд нь санах ойд хамт байж болно. Үрсэх хаягийн эхний 4 – н бит нь ижилхэн байдаг.

Компайлер нь source program – ыг машин хэлрүү хөрвүүлэх үед хаягийг анхаарах болно. Jump команд нь 32 битийн хаяглалын орон зай доторх дурын байрлал руу үсэрдэггүй. Дараах хязгаар доторх хаягруу үсэрч болдог.

Энд wxyz нь PC – ын ахлах 4 битийг илэрхийлж байна.

[www.cdeq.mn/hw200]

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

Jump команд(дадлага) Дараах зурагт jump командыг хэрхэн ашигладгийг үзүүлжээ. Jump командаас бусад командууд нь операндгүй бөгөөд програмын эхний команд руу jump команд нь үсрэх болно. Сүүлийн команд нь дэлээ болж байна.

j машин командын ахлах 6 – н бит нь опкод.

[www.cdeq.mn/hw200]

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

Тэмдэгт хаягJump командын 26 битийн талбар нь 32 битийн хаягийг илэрхийлдэг. Харин энэ нь бодож гаргахад төвөгтэй байдаг. Хэрвээ машин хэлдээр програмчлах байвал үүнийг гараараа хийх болно. Харин одоо үүнийг ассемблер хийх болно. Дараах програмыг харуулвал :

main тэмдэгт хаяг нь эхний командын

хаягийг илэрхийлнэ. J команд нь машин

командын 26 битийг тооцон удирдлага

main – рүү шилжих болно. Регистр $8-ыг

нэгээр нэмэгдүүлж байгаа команд дэлээ

болж өгөх болно.

[www.cdeq.mn/hw200]

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

Програмын ажиллагааПрограмын SPIM дах хэлбэрийг харуулжээ. Ажлуулахдаа мэдээж PC – ын утгыг 0x400000 гэж тохируулна.

[www.cdeq.mn/hw200]

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

Нөхцөл шалгах командНөхцөл шалгах команд нь хэрвээ нөхцөл нь үнэн бол шинэ хаяг руу салаалдаг. Нөхцөл нь хоёр регистрийн утгыг харьцуулж ажилладаг. Энд beq командыг харуулав.

Хоёр регистрийн битүүдийг харьцуулах бөгөөд хэрвээ битүүд нь ижилхэн бол PC нь салаалах хаягийн утгаар өөрчлөгдөнө.

[www.cdeq.mn/hw200]

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

Ifs ба whilesНөхцөл шалгах команд нь давталт болон нөхцөл салаалах үйлдлийг хоёуланг нь хэрэгжүүлэхэд хэрэглэгддэг. Блок диаграмаар мөн үзүүлжээ.

Мөн ассемблер хэлдээр :

bne команд нь :

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

True & falseTrue ба false нь ассемблер хэл дээр нөхцөл салаалах болон jump командад хэрэглэгддэг. Дараах жишээг харцгаая. Ассемблер командуудын үндсэн удирдлагын бүтцийг үзүүлжээ.

Хэрвээ үнэн бол эхний хаягруу эсвэл худал бол дараагийн тэмдэгт хаягруу үсрэх болно. (энэ нь java болон C хэлдээрх if-then-else юм.)

[www.cdeq.mn/hw200]

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

Абсолют утгаДараах ассемблер

кодыг харъя.Энэ нь

дээд түвшний

хэлдээрх бүтцийг

хэрэгжүүлсэн бөгөөд

блок диаграмын

дагуух энэ

програм нь “А”

тэмдэгт хаяг дахь

утгын абсолют утгыг

тооцоолох болно.

[www.cdeq.mn/hw200]

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

Абсолют утга“А” нь 0x10000000 хаягнаас эхлэх болно.

Блок диаграм :

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

Тэмдгийн битийг шилжүүлэх“А” нь сөрөг эсэхийг шийдэхдээ тэмдгийн бит нь 1 байна уу гэж шалгах болно. Үүнийг хийхдээ логик шилжүүлэх үйлдлээр тэмдгийн битийг регистрийн 0 битийн байрлалд шилжүүлэх болно.

Регистр нь 0 байвал “А”

нь эерэг байх болно.

[www.cdeq.mn/hw200]

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

Store -AТэмдгийн бит нь баруун тийшээ 31 бит шилжинэ. Регистр $9 – ын бага битэд орох бөгөөд 0 байна эсэхийг шалгана.

[www.cdeq.mn/hw200]

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

Бүрэн програм нь

[www.cdeq.mn/hw200]

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

Set InstructionsЭнэ сэдвээр хоёр нэмэлт салаалах команд болон нөхцөлт set командыг үзэх болно. Set командууд нь нөхцөл нь true эсвэл false эсэхээс хамааран регистрт 1 эсвэл 0 – ыг тавих болно.

Агуулга :

[www.cdeq.mn/hw200]

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

Bltz & bgezbltz болон bgez команд нь регистрийг 0 – той харьцуулдаг.

[www.cdeq.mn/hw200]

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

Set on Less ThanSet командууд нь удирдлагын урсгалыг өөрчлөдөг бөгөөд регистр 1 эсвэл 0 утгыг тавьдаг. Slt команд нь хоёртын гүйцээлтийг хэрэглэдэг.

Харин sltu команд нь тэмдэггүй бүхэл тоог хэрэглэдэг.

[www.cdeq.mn/hw200]

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

Set on Less Than ImmediateЭнд операнд регистрийг шууд утгатай харьцуулах хоёр командыг үзүүлжээ. Slti нь хоёртын гүйцээлт ашиглах болно.

sltiu нь тэмдэггүй бүхэл тоог хэрэглэдэг.

[www.cdeq.mn/hw200]

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

Температурын тестерОдоо температурын тестерийн удирдлагын програмыг бичье. Температурийн хязгаар нь цельсийн 30 – 55 градус байх ба температурийн мэдрүүрийн төхөөрөмж нь температурыг регистр $2 – т орох болно.

Тус програм нь регистр $2 дох тэмдэггүй бүхэл

тоог тус хязгаарт байгааг шалгах ба хэрвээ хязгаарт

байвал регистр $3 – т 1 – ийг тавина, харин эсрэг

тохиолдолд 0 – ыг тавина.

[www.cdeq.mn/hw200]

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

Програмын эхлэл

[www.cdeq.mn/hw200]

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

Програмын эхлэлSet командад хэрэглэгдэх шууд операнд нь “55 – тай тэнцүү эсвэл бага” бол 56 болж өөрчлөгдөх болно.

[www.cdeq.mn/hw200]

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

Complete Program

[www.cdeq.mn/hw200]

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

Delay Slot BugПрограм дахь операндгүй команд нь эхний delay slot – ыг нөхөж байгаа.

Дараагийн операндгүй команд нь чухал бөгөөд хэрвээ байхгүй бол дараагийн команд болох ori нь 0 төлвийг тавих болно.

[www.cdeq.mn/hw200]

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

Давталтын тоолуурПрограмын давталтын ерөнхий хэлбэр нь эхний утгаас эхлэн хязгаарын утга хүртэл тоолон удирдагдах болно. Үүнийг давталтын тоолуур гэж нэрлэх бөгөөд тоолуурын утга нь давталтын удирдлагын хувьсагч байх болно. Давталт нь нөхцөл шалгах, үсрэх зэрэг командуудаар хийгдэнэ.

Давталт нь 3 хэсгээс бүрдэнэ : Counter инициализаци хийгдэнэ Давталтын төгсгөлийг шалгана Counter нэгээр нэмэгдэнэ

[www.cdeq.mn/hw200]

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

Ассемблер хэлний давталт

[www.cdeq.mn/hw200]

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

Complete LoopЭнд давталтыг delay slot – той хамт хэрэглэсэн. endLp нь delay slot биш бөгөөд SPIM – дахь програмын ажиллагааг эвтэйхэн болгодог.

[www.cdeq.mn/hw200]

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

Summing Program

[www.cdeq.mn/hw200]