1 / 54

Асемблерски језик и програмирање процесора MIPS (2)

Асемблерски језик и програмирање процесора MIPS (2). Инструкције за управљање током програма Подршка процедурама Рад са знаковима Рад са непосредним операндима Адресирање код гранања и скокова Адресни начини рада. Инструкције за управљање током програма.

gotzon
Download Presentation

Асемблерски језик и програмирање процесора MIPS (2)

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. Асемблерски језик и програмирање процесора MIPS (2) Инструкције за управљање током програма Подршка процедурама Рад са знаковима Рад са непосредним операндима Адресирање код гранања и скокова Адресни начини рада

  2. Инструкције за управљање током програма • Инструкције за управљање током програма могу бити • Условна гранања, • Безусловна гранања и скокови. • Уз то, постоје инструкције које омогућава-ју испитивање неког услова.

  3. Инструкције за управљање током програма • Пример инструкције условног гранања је beq reg1, reg2, L1 Ова инструкција значи да се врши скок на инструкцију са лабелом L1 ако су садржаји регистара reg1 и reg2једнаки. • Мнемоник beq значи branch if equal(гранај се ако је једнако).

  4. Инструкције за управљање током програма • Слично, инструкција bne reg1, reg2, L1 значи да се врши скок на инструкцију са лабелом L1 ако су садржаји регистара reg1 и reg2различити. • Мнемоник bne значи branch if not equal(гранај се ако није једнако).

  5. Инструкције за управљање током програма • Још једна врста гранања, безусловни скок, реализује се инструкцијом jumpчија је синтакса ј Lab

  6. Инструкције за управљање током програма • Тест једнакости или неједнакости се често јавља у програмима! • Често корисно и утврдити да ли је вредност неке променљиве мања од неке ненулте вредност!!!

  7. Инструкције за управљање током програма • Такав тест се може обавити помоћу инструкције set on less than slt $t0,$s3,$s4 која поставља вредност регистра $t0 на 1 ако је вредност у регистру $s3 мања од вредности у регистру $s4; иначе се $t0 поставља на 0.

  8. Инструкције за управљање током програма • MIPS не користи гранање на услов “мање од”, јер таква инструкција компликује хардвер. Једноставније је употребити две брже инструкције као што су sltи bne.

  9. Инструкције за управљање током програма Пример Какав код треба написати да се тестирада ли је променљива a,која је у регистру $s0, мања од променљиве b, која је у регистру$s1, и изврши гранање на лабелу Manje ако услов важи. Одговор slt $t0,$s0,$s1 bne $t0,$zero,Manje

  10. Инструкције за управљање током програма • Већина програмских језика поседује исказе типа caseили switchкоји омогућавају да се на основу неке вредности одабере једна од више понуђених алтернатива. • Један од начина да се имплементира овакав исказ је помоћу секвенце if-then-elseисказа, односно низа условних гранања.

  11. Инструкције за управљање током програма • Међутим, ово се ефикасније може кодирати ако се користи табела адреса секвенци инструкција које се извршавају за одговарајуће алтернативе а која се назива табела адреса скока (jump address table). • Ова табела је у ствари низ који садржи адресе које одговарају лабелама у коду.

  12. Инструкције за управљање током програма • За подршку оваквој ситуацији MIPS има на располагању инструкцију jump register (jr), која представља безусловни скок на адресу специфицирану у регистру. jr reg

  13. Инструкције за управљање током програма

  14. Подршка процедурама • Приликом извршавања процедуре програм мора да обави следећих шест акција: • Смештање параметара на место где процедура може да им приступи. • Пренос управљања процедури. • Захтевање меморијских ресурса потребних процедури.

  15. Подршка процедурама • Обављање жељеног задатка. • Смештање резултујуће вредности на место где позивајући програм може да им приступи. • Повратак управљања позивајућем програму од инструкције која следи иза позива потпрограма.

  16. Подршка процедурама • Како су регистри најбржи меморијски медијум, користићемо их што је више могуће. • Од 32 регистра MIPS за позив процедура користи следеће: • $a0-$a3: четири аргумент регистра за пренос параметара потпрограма. • $v0-$v1: два регистра за повратне вредности. • $ra: један регистар за адресу повратка.

  17. Подршка процедурама • MIPS има и посебну инструкцију за позив поцедуре која врши скок на почетну адресу потпрограма и смешта адресу наредне инструкције у $ra. • Ова инструкција је jump-and-link (jal) и има облик jal AdresaProcedure

  18. Подршка процедурама • Адреса која се смешта у $ra назива се адреса повратка.

  19. Подршка процедурама • Инструкција jalзаправо смешта PC+4 у $ra а повратак из потпрограма се обавља инструкцијом jr $ra

  20. Подршка процедурама • Уколико је за процедуру потребно више од четири аргумент регистра и два регистра за повратне вредности, онда морамо да водимо рачуна о томе да сваки употребљени регистар мора да има исте вредности по повратку као и у моменту позива.

  21. Подршка процедурама • Ово је ситуација када ћемо садржаје неких од регистара слати у меморију и касније их обнављати.

  22. Подршка процедурама • Магацин је погодна структура података за ову намену. • Регистар $sp (stack pointer) представља указатељ магацина. • Магацин, по конвенцији “расте” ка нижим адресама!

  23. Подршка процедурама • MIPS регистре дели у две категорије: • $t0-$t9: 10 привремених регистара чије се вредности не чувају од стране позваног потпрограма. • $s0-$s7: 8 регистара чије се вредности морају очувати приликом позива процедуре.

  24. Подршка процедурама • Магацин се такође користи за смештање локланих променљивих процедуре које не могу да стану регистре, као што су локални низови или друге структуре података. • Део магацина који садржи запамћене садржаје регистара и локалне променљиве назива се оквир процедуре или активациони запис.

  25. Подршка процедурама • MIPS користи указатељ оквира$fp који показује на прву реч оквира процедуре.

  26. Више адресе $fp $fp $fp Запамћени аргумент регистри (ако их има) $sp $sp Адреса повратка Запамћени s регистри (ако их има) Локални низови и структуре (ако их има) $sp Ниже адресе Сл. 1. Магацин пре, за време и после позива процедуре. Подршка процедурама

  27. Подршка процедурама • Променљива у језику C може бити статичка или аутоматска. • Аутоматске променљиве су локалне променљиве процедура и њихов досег је само у оквиру процедуре у којој су декларисане.

  28. Подршка процедурама • Променљиве декларисане ван свих процедура или оне које су декларисане помоћу static декларације су статичке. • За олакшавање приступа статичким променљивама MIPS користи глобални указатељ ($gp).

  29. Инструкције за управљање током програма

  30. Рад са знаковима • У програмима се често манипулише алфанумеричким подацима који су обима 1 бајт, па MIPS има инструкције за учитавање и смештање бајта. lb $t0,0($sp)#procitaj bajt iz izvora sb $t0,0($gp)#upisi bajt u odrediste

  31. Рад са знаковима • Знаци се обично комбинују у стрингове који имају променљив број елемената.

  32. Рад са знаковима • Постоје три могућности да се представи стринг: • Прва позиција у стрингу резервисана је за дужину стринга. • Постоји променљива која садржи дужину стринга и са самим стрингом чини структуру. • Последња позиција у стрингу садржи неки специјални знак који означава крај стринга.

  33. Рад са знаковима • У језику C користи се трећи приступ и стринг се завршава бајтом са вредношћу 0 (Nullу ASCII табели, тј. ‘\0’). • У новије време јавља се и UNICODE који је 16-битни код. МIPS има и инструкције које могу да раде са полуречима (тј. 16-битним речима). • Језик Java користи UNICODE.

  34. Рад са непосредним операндима • Код великог браја наредби у програму користе се константе. • Константе су садржане у самој инструкцији. • Формат инструкције је исти као и код гранања (I-формат у ствари потиче од immediate – непосредни).

  35. op rs rt immediate 8 29 29 4 Рад са непосредним операндима • Инструкција сабирања са непосредним операндом назива се add immidiateили addi. addi $sp,$sp,4# $sp = $sp + 4 • Формат ове инструкције је

  36. Рад са непосредним операндима Принцип пројектовања Оно што се често јавља направите брзим. • Како се константе често јављају боље је учинити их делом инструкције него их учитавати из меморије.

  37. Рад са непосредним операндима • Иако су константе често мале и могу да стану у 16-битно поље, понекад је потребно користити и 32-битне константне вредности. • У ту сврху користи се инструкција load upper immediate(lui).

  38. Рад са непосредним операндима Пример Какав је асемблерски код процесора MIPS за пуњење 32-битне константе 0000 0000 0011 1101 0000 1001 0000 0000 у регистар $s0? Одговор lui $s0,61 addi $s0,$s0,2304

  39. Рад са непосредним вредностима • Опрез, addiврши знаковно проширење! • Стога се користе друге инструкције са непосредним oперандом, као што је ori.

  40. op 26-битна адреса Адресирање код гранања и скокова • Најједноставније адрсирање је код инструкције скока. • Формат ове инструкције је Ј-формат

  41. 2 10000 Адресирање код гранања и скокова • За инструкцију ј 10000 # go to 10000 формат је

  42. 51617 Izlaz Адресирање код гранања и скокова • Насупрот инструкцији скока, инструкција условног гранања мора да, поред адресе гранања, специфицира два операнда • Тако се инструкција bne$s0,$s1,Izlaz #if $s0 != $s1 goto Izlaz асемблира у

  43. Адресирање код гранања и скокова • Ако би адресе у програму ограничили на 16 битова то би значило да ниједан програм не може бити већи од 216 што је мало за реалне програме. • Алтернатива је да специфицирамо регистар чији садржај би се додавао адреси гранања. • Питање је који регистар употребити?

  44. Адресирање код гранања и скокова • Већина гранања односи се на циљну инструкцију која није далеко од инструкције гранања (if структуре, петље и слично). • Пошто програмски бројач PC садржи адресу текуће инструкције, онда ако њега изаберемо, можемо се гранати на инстгрукције које су на 215 удаљене од те позиције.

  45. Адресирање код гранања и скокова • Овај облик адресирања назива се PC релативно адресирање. • У ствари, хардверу више одговара да PC указује на наредну инструкцију, тако да је овај облик адресирања релативан на (PC+4) ако је PC адреса текуће инструкције.

  46. Адресирање код гранања и скокова • Са друге стране, инструкција jal позива процедуре које не морају да буду близу инструкције позива, па се користи адресирање Ј-типа.

  47. Адресирање код гранања и скокова • Обзиром да су све MIPS инструкције дуге 4 бајта, офсет код PC-релативног адресирања се односи на речиа не на бајтове! • Из тог разлога, прави офсет у односу на садржај PC-a се множи са четири.

  48. Адресни начини рада • Различити начини адресирања, тј. израчунавања ефективне адресе називају се адресни начини рада.

  49. Адресни начини рада • Постоји 5 адресних начина рада код процесора MIPS: • Регистарско адресирање. • Базно адресирање са размештајем. • Непосредно адресирање. • PC-релативно адресирање. • Псеудодиректно адресирање.

  50. Адресни начини рада

More Related