1 / 24

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

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

morela
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Өргөтгөсөн Ассемблер • Үндсэн ассемблер хэл нь машин кодоос нэг түвшин илүүтэйгээр процессорын харагдацыг бий болгоно. Машин үйлдэл, регистр, хаягуудыг тодорхойлохдоо машин код нь бит төлөвүүдийг ашиглана. Үндсэн ассемблерт эдгээрийг тодорхойлоход симболуудыг мөн ашигладаг. Үндсэн ассемблерийн команд бүр нэг машин командтай шууд зохицдог.Өргөтгөсөн ассемблер нь энгийн MIPS процессороос илүү олон тооны командуудтай абстракт маши үйлдлийг хэрэгжүүлдэг.Эдгээр үйлдлүүдийн олонх нь хэд хэдэн машин командтай зохицдог. Бүлгийн сэдвүүд : • Регистрийн mnemonic нэрс. • Псевдо (хуурамч) командууд ба псевдо компьютер. • move  псевдо команд. • liпсевдо команд. • la   псевдо команд. • lwпсевдо команд. • swпсевдо команд. • nopпсевдо команд. [www.cdeq.mn/hw200]

  3. Mnemonic регистрүүд • Регистрүүдийг “ерөнхий зориулалтын” гэж нэрлэнэ. Энэ нь програм хангамжийн хувьд олон янзын зорилго бүхий регистрүүдийг тодорхойлоход тохирмжтой юм.Ингэж нэрлэх нь программистуудад будлихаас сэргийлж хоорондоо тохиролцоо бий болгоход дөхөм байдаг юм.Өргөтгөсөн ассемблер нь регистрүүдэд mnenomicнэрс ашиглаж тэдгээр нь хэрхэн ашиглагддагыг үзүүлдэг. • Жишээ нь, регистр $8-аас $15 хүртэл регистрүүд түр зуурын утга хадгалах зориулалттай.Эдгээрийн регистрийн mnemonic нэрс нь $t0-аас $t7 хүртэл байна. [www.cdeq.mn/hw200]

  4. Mnemonic регистрүүд • Зөвхөн регистр $0-ээс $31 хүртэлх нь өөр байдаг ($0 нь үргэлж тэгээр дүүрэн харин $31 буцах хаягыг автоматаар хадгалах үүрэгтэй). Үлдсэн регистрүүд нь үндсэндээ ижил. [www.cdeq.mn/hw200]

  5. Өргөтгөсөн Ассемблер • Өргөтгөсөн ассемблер нь регистрийн дугааруудын оронд mnemonic нэрс ашиглах боломж олгоно. Ингэснээр тухайн регистрээр юу хийж байгааг мөрдөхөд тус болдог. • Өргөтгөсөн ассемблерийг ашигласнаар MIPS-д байхгүй нэмэлт боломжуудыг SPIM хэрэгжүүлдэг. Өргөтгөсөн ассемлбер нь өргөтгөл бүхий эх кодуудыг хүлээн авдаг.Эх код дах өргөтгөлүүд нь үндсэн ассемблер хэлэнд орлуулагдах ба дараа нь машин код руу хөрвүүлэгдэнэ. [www.cdeq.mn/hw200]

  6. Өргөтгөсөн Ассемблер • Өргөтгөсөн ассемблер хэл хэрхэн үндсэн ассемблер хэл рүү хөрвүүлэгдэж байгааг зурган дээр үзүүлэв. Дараа нь үндсэн ассемблер код машин код руу хөрвүүлэгдэнэ. [www.cdeq.mn/hw200]

  7. Өргөтгөсөн Ассемблер [www.cdeq.mn/hw200]

  8. Регистер дэх түр зуурын утга • Ихэнх ассемблер програмууд нь дээд түвшний програмчлалын хэлний адил subroutine-н цуглуулга байдаг. • Subroutine нь дотоод хувьсагчдыг (local variables) ашиглах ба эдгээр хувьсагчид нь зөвхөн subroutine-д өөрт нь ашиглагдана. Түр зуурынрегистрүүд болон  $t0-$t7,$t8, ба  $t9 мөнхадгалагдсанрегистрүүд болох $s0-$s7 нь дотоод хувьсагчдад ашиглагдана. [www.cdeq.mn/hw200]

  9. Регистер дэх түр зуурын утга • Програм бичих явцад түр зуурын болон хадгалагдсан регистрүүдийг хэдийд ч ашиглах боломжтой байдаг. Харин subroutineдуудах үед түр зуурын регистрүүд өөрчлөгдөж болзошгүй.Хадгалагдсан регистрүүдийн хувьд ямар ч subroutine дуудалтын үед утгаа өөрчлөхгүй.Жишээ програмыг үзүүлэв: [www.cdeq.mn/hw200]

  10. Регистер дэх түр зуурын утга • ori $t0,$0,32 # load 32 into a temp register • ori$s0,$0,13 # load 13 into a saved register • jalsubrout# subroutine call (don't worry about # the details of this, now). • sll$0,$0,0 # delay slot • back: addu $s0,$s0,$t0 # return from subroutine; • # temp register $t0 may have changed. • # saved register $s0 has not changed. [www.cdeq.mn/hw200]

  11. Регистер дэх түр зуурын утга • backдээрх илэрхийлэл нь алдаатай илэрхийлэл юм. Энэ тохиолдолд түр зуурын регистр $t0 нь subroutнэртэй subroutineдуудалтаар өөрчлөгдөж болзошгүй юм. [www.cdeq.mn/hw200]

  12. Бусад регистрүүд • Регистрүүд нь хувьсагчид болон аргументуудад, мөн бусад зориулалтаар ашиглагдах хэлбэрээрээ групп болж хуваагсдан байдаг.($0, $v0-$v1, $a0-$a3, $t0-$t9, $s0-$s7). • Үйлдлийн системийн хамгийн тулгуур хэсэг ньkernelбайдаг. Үйлдлийн системийн бусад хэсгүүд нь kernel-ийн функцуудаар биелэгддэг. $k0 ба $k1 регистрүүд нь kernel-д зориулагдан нөөцлөгдсөн байдаг. Хэрэглээний програмууд эдгээрийг оролдох шаадлагагүй юм. • SPIM нь үйлдлийн системтэй цуг ирдэггүй боловч хэрэв хүсэлт гарвал $k0 ба $k1 ийн ашиглагдаг trap handler-г ачаалдаг. • Регистр $gp, $sp, ба $fpууд нь үндсэн регистр хэлбэрээр ашиглагдаж санах ойн хэсгүүд рүү хандалт хийдэг. [www.cdeq.mn/hw200]

  13. Псевдо командууд • adduкоманд нь бит төлөвийг регистрүүдийн хооронд хуулна. Үүнийг ихэвчлэн moveбуюу шилжүүлэх үйлдэл гэж нэрлэдэг бөгөөд энэ үйлдэл нь эх регистрийн утга өөрчилдөггүй. • Псевдо команд ньнэг болон түүнээс олон үндсэн ассемблер командын оронд хэрэглэгдэх өргөтгөсөн ассемблерийн команд юм. [www.cdeq.mn/hw200]

  14. Псевдо командууд • Өргөтгөсөн ассемблер нь хэд хэдэн псевдо команд хэрэгжүүлдэг. move псевдо командын жишээ: move d,s # эх регистр s-н утгыг зорьсон регистр d-д шилжүүлнэ. • dба s регистрүүд mnemonic нэрээр тодорхойлогдож болно( $t5 эсвэл $zero г.м). Эсвэл регистрийн дугаараар тодорхойлогдоно( $13 эсвэл $0). [www.cdeq.mn/hw200]

  15. “Дамжуулах Илэрхийлэл" • moveкоманд нь дээд түвшний хэлэн дэх дамжуулах илэрхийлэлтэй адил уншигдана: j = val; val–н утгыг j хувьсагчид хуулна. move $s1,$t3 • $t3-ын утгыг регистр $s1 руу хуулна. [www.cdeq.mn/hw200]

  16. Шуурхай ачаалах • Дээр үзүүлсэн oriкоманд нь бит төлөвийг командаас регистр рүү хуулна. (16 битийн тэг өргөтгөлтэй шуурхай операндыг 32 бит рүү дуудна.) Энэ үйлдлийг ихэвчлэншуурхай ачаалахүйлдэл гэж нэрлэдэг. Энэ нь шуурхай боломжтой утга агуулсан регистрийг ачаалдаг. (санах ой руу зөөлгүйгээр) • Энэ үйлдлийн ассемблер хэл дэх mnemonic нэр нь liюм. Ассемблер энэ псевдо командыг тохирох үндсэн команд руу хөрвүүлдэг lid,value# Регистр $d-г value утгатай ачаална (Утга нь 16 эсвэл 32 бит байж болно) [www.cdeq.mn/hw200]

  17. Хэд хэдэн хөрвүүлэлт • Шуурхай ачаалах псевдо команд нь бүхэл тоон утгатай регистрийг ачаалахад хэрэглэгддэг.Өөр нэг жишээ: • li $t2,-156 Дээрх команд нь -15610-ийн 2-тын гүйцээлтийг регистр $t2 руу оруулна.Энэ үйлдлийг oriкомандаар хийж болох боловч тухайн командын шуурхай талбар нь 16 битийн тэгээс их бүхэл тоо байх учиртай юм. li-ийн шуурхай утга нь хасахба ялгаатай хөрвүүлэлтийг ашиглана: [www.cdeq.mn/hw200]

  18. Хэд хэдэн хөрвүүлэлт • li $v2,-156   ==   addiu $v2,$0,-156 (addiuкоманд нь нэмэгдэхүүний үйлдэл хийхээс өмнө шуурхай операндаа тэмдэгтэн өргөтгөл хийнэ.addiuкоманд нь хасах утгатай бүхэл тоотой хамт ашиглагдаж болно.Өргөтгөсөн ассемлбер нь liкомандыг шуурхай утгын тэмдэгээс хамаарч ялгаатай үндсэн команд руу хөрвүүлнэ. [www.cdeq.mn/hw200]

  19. Хоёр үндсэн команд • Шуурхай операндууд нь үргэлж 16 бит хэмжээтэй байна. Хоёр машин командуудыг 32 битийн регистрийг 32 битийн бүхэл тоотой ачаалах боломжтой: • li $v2,0x12345678    ==   lui $v2,0x1234   ori $v2,$v2,0x5678 [www.cdeq.mn/hw200]

  20. Хоёр үндсэн команд • Энд liнь хоёр үндсэн команд руу хөрвүүлэгдсэн байна.Эхнийх нь $v2-ийн дээд хагас (top half)-г ачаална. Хоёр дах нь oriүйлдэл ашиглан доод хагасыг (bottom half) ачаална. Үүнийг нэмэх, хасах дурын бүхэл тооны хувьд хийж болно: [www.cdeq.mn/hw200]

  21. Хоёр үндсэн команд • lid,value# Регистр $d-г нэмэх эсвэл хасах утга "value“-тай ачаална. Утга нь 32 бит хүртэл дурын бүхэл тоо байна. • Өргөтгөсөн ассемблер нь автоматаар энэхүү псевдокомандыг бодит командын хамгийн ашигтай дараалал руу хөрвүүлнэ. [www.cdeq.mn/hw200]

  22. Жишээ програм • Шуурхай ачаалах үйлдлийг ашигласан жишээ програмыг үзүүллээ. [www.cdeq.mn/hw200]

  23. Жишээ програм • ## liEg.asm • ## • .text • .globl main • main: li $t0,43 # first value • li$t1,-96 # second value • li$t7,-16772555 # third value • addu$t0,$t0,$t1 # add the values • addu$t0,$t0,$t7 # leave result in $t0 • ## end of liEg.asm [www.cdeq.mn/hw200]

  24. Жишээ програм • liкоманд бүр ялгаатай үндсэн командууд руу хөрвүүлэгдэнэ. SPIM дээр програмыг ажиллуулахад эхлээд settings цэсийг харна. "allow pseudo instructions" хэсгийг чагтлаад "bare machine“ хэсгээс чагтыг авна. [www.cdeq.mn/hw200]

More Related