1 / 26

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

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

ranit
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-2:Үл мэдэгдэх хаяг

  2. Үлмэдэгдэх хаяг • Програм нь хэд хэдэн объект модуль, сангийн (library) модуль болон ассемблер эх файлуудыг ашиглан бүтсэн байдаг.Эдгээр модулиуд нь симбол хаягаар өөр хоорондоо холбогдсон байдаг. Бодит хаяг нь бүх модулиуд хоорондоо холбогдож санах ой руу ачаалагдах үед системийн програм хангамжаар тодорхойлогдоно. [www.cdeq.mn/hw200]

  3. Үлмэдэгдэх хаяг • Процесс явагдаж дуусах хүртэл хаяг нь мэдэгдэхгүй байсан ч ассемблер нь програмистуудад тухайн хаягыг симболоор тодорхойлох боломж олгодог. Ассемблер ба дэд програм хангамжууд(linker ба loader) нь хаяг илрэх хүртэл симбол хаягаар нь мөрдлөг хийдэг. Ингээд програм ажиллахаас өмнө бүх зүйл тодорхой болно.Энэ үед машин хэлний програм ба өгөгдөл нь санах ой руу ачаалагдаж програмын ажиллагаа явагдана. [www.cdeq.mn/hw200]

  4. Үлмэдэгдэх хаяг [www.cdeq.mn/hw200]

  5. Хаяг болон Хаягын агуулга • Санах ой дах үгийн (word) агуулга нь 32 бит төлөвтэй байна.Хаяг нь мөн 32 бит төлөвтэй байдаг.Хоёр өгөгдөл хоёул 32 бит регистр тохирно. • Хэрэв 0x00000002 утгыг ачаалах бол үүнийг lwкомандаар гүйцэтгэнэ.Зургыг харна уу. Ачаалах гэж буй утга нь санах ой дах 0x10000008 хаяг дээр байрласан байна. [www.cdeq.mn/hw200]

  6. Хаяг болон Хаягын агуулга • lwd,exp# Регистр $d рүү "exp“ дээрх утгыг ачаална. "exp" нь симбол хаяг юм. • Хэрэв 0x10000008 хаягыг ачаалахыг хүсвэл үүнийг laкомандаар гүйцэтгэнэ. [www.cdeq.mn/hw200]

  7. Хаяг болон Хаягын агуулга • la d,exp# Регтистр $d-г хаяг “exp“-тэй ачаална. [www.cdeq.mn/hw200]

  8. Хаягтай регистрүүд • Хаяг агуулсан үндсэн регистрүүд нь: • main: # Load the address of val2 into the base register • lui$10,0x1000 # top half • ori$10,$10,0x0008 # bottom half • lw$11,0($10) # Load contents of memory at the address . . . • .data • val0: .word 0 • val1: .word 1 • val2: .word 2 # base register $10 points at "2" • val3: .word 3 • val4: .word 4 • val5: .word 5 [www.cdeq.mn/hw200]

  9. Псевдо командын хаяг ачаалах • Симбол хаяг болон системийн програм хангамж нь хаягыг мэдэх шаардлагагүй болгодог. Энэ нь la гэсэн mnemonic нэр ашиглахад тохиолдоно. Энэ mnemonic нь дан машин командад хариу өгдөггүй байна. Энэ нь псевдо команд бөгөөд ассемблер нь үүнийг хэд хэдэн машин команд руу хувиргадаг. [www.cdeq.mn/hw200]

  10. Псевдо командын хаяг ачаалах • la d,exp# Регистр $d-рүү "exp" илэрхийллийг ачаална. "exp" нь симбол хаяг. • Энэ псевдо командын хувьд expнь санах ойн хаягыг үнэлэх илэрхийлэл юм. laпсевдо команд нь exp-ээс хамаарч ялгаатай машин код команд руу хөрвүүлэлт хийнэ. [www.cdeq.mn/hw200]

  11. la Жишээ • Програм ажиллах үед laнь шаардлагтай хаягнаас зорьсон регистр рүү ачаалах нэг эсвэл хэд хэдэн машин команд руу хөрвүүлэлт хийнэ.Санах ойн хандалт хийгдэхгүй. • la ашигласан өмнөх жишээ код: [www.cdeq.mn/hw200]

  12. la Жишээ • main: # Load memory address: • la $10,val2 # load a 32-bit address into $10 • lw$11,0($10) # Load contents of memory at the address into $11 . . . • .data • val0: .word 0 • val1: .word 1 • val2: .word 2 # base register $10 points at "2" • val3: .word 3 • val4: .word 4 • val5: .word 5 [www.cdeq.mn/hw200]

  13. SPIM Жишээ • la ашигласан SPIM жишээг үзүүлэв. Програмыг ажиллуулж F10 товчоор командын алхамуудыг ажиглана уу . $t0 регистр val2-ын хаягыг авах ба үүнийг дэлгэцэн дээрээс харах боломжтой юм. Одоо $t1 ба $t2-г ачаалах үндсэн регистр хэлбэрээр ашиглагдана. [www.cdeq.mn/hw200]

  14. SPIM Жишээ • ## addEm.asm • ## program to add two integers ## • .text • .globl main • main: la $t0,val2 # put a 32-bit address into $t0 • lw$t1,0($t0) # load first value, 2 • lw$t2,4($t0) # load second value, 3 • sll$0,$0,0 # load delay slot • addu$t1,$t1,$t2 # calc. sum • .data • val0: .word 0 • val1: .word 1 • val2: .word 2 • val3: .word 3 • val4: .word 4 • val5: .word 5 • ## end of addEm.asm [www.cdeq.mn/hw200]

  15. SPIM ажиллуулах • SPIM жагсаалтад la псевдо командад ашиглагдаж байгаа хоёр машин командыг үзүүлэв. • la-д ашиглагдаж байгаа хоёр командыг анхааралтай ажиглана уу. Хоёул регистр $1-г ашиглаж байна [www.cdeq.mn/hw200]

  16. Ассемблерын Түр зуурын регистр • Ассемблерийн түр зуурын регистр нь машин команд ашиглахаар зориулагдаж нөөцлөгдсөн байдаг.Энд la хэрхэн хувиргалт хийгдсэнийг харуулсан жишээ байна: la $t0,val2 == lui $1,4097 ori $8,$1,8 • Зарим тохиолдолд псевдо команд нь үндсэн ассемблерийн командтай ижил mnemonic нэртэй байна.Жишээ нь,lw (load word) нь үндсэн ассемблерийн команд юм. Ашиглах хувилбар нь: lw$t1,8($t0) # $t0+8хаяг дах үгийг ачаална [www.cdeq.mn/hw200]

  17. Ассемблерын Түр зуурын регистр • Энд хаягын шилжилт (энэ тохиолдолд 8)-ийг үндсэн регистер дээр ($t0) нэмжхаягыг тодорхойлно.Үндсэн ассемблер командад үүнээс өөр аргаар тодорхойлох боломжгүй. Харин өргөтгөсөн ассемблер дээр дараах псевдо командаар тодорхойлж болно: lw$t1,exp # Хаяг exp-дэх утгыг ачаалнаМашин командlwнь үндсэн регистрийг ашиглан хаягыг бүрдүүлнэ.Псевдокомандlwнь үндсэн регистр ашиглаж болохуйцаар хувиргалт хийгдэх ёстой. [www.cdeq.mn/hw200]

  18. Үг Ачаалах (псевдо команд) • lwпсевдо команд нь санах ойгоос үгийг хуулж регистр рүү хийнэ: lwd,exp# Регистр $d-руу exp хаяг дах утгыг хийнэ. Энд псевдо командlw-ийн боломжит хувиргалтыг харуулав. Өгөгдөл0x10000004 хаяг дээр байна гэж санавал: • lw $t0,data == lui $1,0x1000 lw $8,4($1) [www.cdeq.mn/hw200]

  19. Үг Ачаалах (псевдо команд) • luiкоманд ажилласны дараах $1 регистр дэх үндсэн хаяг нь0x10000000.lwкоманд нь 4-ийг энэ хаяг руу нэмнэ. • Өргөтгөсөн ассемблер ба түүний псевдо командууд нь програмистуудыг псевдо компьютер дээр ажиллаж байгаа мэт сэтгэгдлийг төрүүлэх юм.Псевдо компьютер нь ердийн техник хангамжаас илүү баялаг боломжуудтай, програмчлахад илүү тохиромжтой нэг төрлийн компьютерийн систем юм ("virtual computer“ гэж ихэвчлэн нэрлэдэг). • Мөн псевдо компьютер нь абстракт давхарга гэж нэрлэгддэг. [www.cdeq.mn/hw200]

  20. Үг Ачаалах (псевдо команд) [www.cdeq.mn/hw200]

  21. Үг Хадгалах (псевдо команд) • nopпсевдо команд нь sll$0,$0,0 руу хувиргалт хийнэ. • nop# no operation # нэг машин циклийн хувьд ямар ч үйлдэл хийгдэхгүй [www.cdeq.mn/hw200]

  22. Үг Хадгалах (псевдо команд) • swкоманд нь үндсэн болон өргөтгөсөн командад хоёуланд нь ашиглагдана. Псевдо командын хувьд регистрийн утгыг санах ойд нэг командад биелүүлнэ. swd,exp# Регистр $d-н утгыгхаяг exp-т ачаална. Энэ үйлдэл нь хэд хэдэн үндсэн командуудаар хэрэгжинэ. [www.cdeq.mn/hw200]

  23. Жишээ програм • lwбаswкоманд ашигласан жишээ програмыг үзүүлэв. Програм эхлэхдээ өгөгдлийг хэд хэдэн регистр рүү ачаална. • amfloэсвэл mfhi команд эхэлсний дараагаар multкоманд ажиллах ба энэ дүрмийн биелэлтэд nop (no-operation) командыг ашиглана. [www.cdeq.mn/hw200]

  24. Жишээ програм • ## pseudoPoly.asm • ## evaluate the polynomial ax2 + bx + c ## • .text • .globl main • main: lw $t3,x # get x • lw$t0,a # get a • lw$t1,bb # get bb • lw$t2,c # get c • mult$t3,$t3 # x2mflo $t4 # $t4 = x2nopnop • mult$t4,$t0 # low = ax2mflo $t4 # $t4 = ax2nopnop [www.cdeq.mn/hw200]

  25. Жишээ програм • mult $t1,$t3 # low = bx • mflo$t5 # $t5 = bx • addu$t5,$t4,$t5 # $t5 = ax2 + bx • addu$t5,$t5,$t2 # $t5 = ax2 + bx + c • sw$t5,value # value = polynomial • .data • x: .word 4 • value: .word 1 • a: .word 20 • bb: .word -2 # the SPIM assembler does not allow the label "b" • c: .word 5 • ## end of pseudoPoly.asm [www.cdeq.mn/hw200]

  26. Бүлгийн төгсгөл • Регистрийн mnemonic нэрс • Ассемблер түр зуурын регистр • Үйлдлийн системийн kernel • Системийн програм хангамж ба симбол хаягууд • Псевдо команд ба псевдо компьютер • moveпсевдо команд • laпсевдо команд • lwпсевдо команд • swпсевдо команд • nopпсевдо команд [www.cdeq.mn/hw200]

More Related