1 / 70

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

Асемблерски језик и програмирање процесора MIPS. Увод Регистри процесора Инструкције језика Операнди Формат инструкција. Увод. Рачунар разуме инструкције на машинском језику , тј. низове бинарних цифара.

eric-grimes
Download Presentation

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

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. Увод • Рачунар разуме инструкције на машинском језику, тј. низове бинарних цифара. • Са друге стране, људима тај облик није подесан за писање и разумевање програма. Људи много лакше пишу и разумевају симболе уместо дугих низова цифара.

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

  4. Увод • Симболи означавају одређене шаблоне битова као што су кодови операција или спецификације регистара.

  5. Увод • Уз то, асемблерски језик омогућава коришћење лабела. • Лабеле су симболичка имена појединих меморијских локација било да оне садрже инструкције програма или податке.

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

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

  8. Изворни фајл Објектни фајл Асемблер Изворни фајл Објектни фајл Извршни фајл Асемблер Линкер Изворни фајл Објектни фајл Асемблер Библиотеке програма Сл. 1. Процес настанка извршне датотеке. Увод

  9. Увод • Асемблер чита поједине изворне фајлове и производи објектне фајлове који садрже машинске инструкције и информације које помажу комбиновању неколико објектних фајлова у програм. • Већина програма састоји се од неколико датотека или модула које се пишу и преводе независно.

  10. Увод • Модул обично садржи референце на потпрограме и податке дефинисане у другим модулима и библиотекама. • Код у модулу се не може извршити када постоје неразрешене рефе-ренце на лабелу у другим објектним датотекама или модулима.

  11. Увод • Још једно средство, линкер, комбинује колекцију објектних и библиотечких фајлова у извршни фајл који се може извршити на рачунару.

  12. Увод 00100111101111011111111111100000 10101111101111110000000000010100 10101111101001000000000000100000 10101111101001010000000000100100 10101111101000000000000000011000 10101111101000000000000000011100 10001111101011100000000000011100 10001111101110000000000000011000 00000001110011100000000000011001 00100101110010000000000000000001 00101001000000010000000001100101 10101111101010000000000000011100 00000000000000000111100000010010 00000011000011111100100000100001 00010100001000001111111111110111 10101111101110010000000000011000 00111100000001000001000000000000 10001111101001010000000000011000 00001100000100000000000011101100 00100100100001000000010000110000 10001111101111110000000000010100 00100111101111010000000000100000 00000011111000000000000000001000 00000000000000000001000000100001 Сл. 2. Машински код процесора MIPS за израчунавање суме квадрата целих бројева од 0 до 100.

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

  14. Увод addiu $29, $29, -32 sw $31, 20($29) sw $4, 32($29) sw$5, 36($29) sw $0, 24($29) sw $0, 28($29) lw $14, 28($29) lw $24, 24($29) multu $14, $14 addiu $8, $14, 1 slti $1, $8, 101 sw $8, 28($29) mflo $15 addu $25, $24, $15 bne $1, $0, -9 sw $25, 24($29) lui $4, 4096 lw $5, 24($29) jal 1048812 addiu $4, $4, 1072 lw $31, 20($29) addiu $29, $29, 32 jr $31 move $2, $0 Сл. 3. Исти код на асемблерском језику али без означених регистара, меморијских локација и коментара.

  15. Увод • Међутим, много је јасније када се уведу симболичка имена за регистре и меморијске локације. • Имена која почињу тачком (.data, .globl, и др.) представљају асемблерске директиве које казују асемблеру како да преведе програм али не производе машинске инструкције.

  16. Увод • Имена праћена двотачком представљају лабеле или имена меморијских локација.

  17. Увод .text .align 2 .globl main main: subu $sp, $sp, 32 sw $ra, 20($sp) sd $a0, 32($sp) sw $0, 24($sp) sw $0, 28($sp) loop: lw $t6, 28($sp) mul $t7, $t6, $t6 lw $t8, 24($sp) addu $t9, $t8, $t7 sw $t9, 24($sp) addu $t0, $t6, 1 sw $t0, 28($sp) ble $t0, 100, loop la $a0, str lw $a1, 24($sp) jal printf move $v0, $0 lw $ra, 20($sp) addu $sp, $sp, 32 jr $ra .data .align 0 str: .asciiz "The sum from 0 .. 100 is %d\n" Сл. 4. Исти код на асемблерском језику али са ознакама регистара и меморијских локација али без коментара.

  18. Увод • Насупрот томе, исти код на вишем програмском језику, као што је C, је концизнији и јаснији.

  19. Увод #include <stdio.h> int main (int argc, char *argv[]) { int i; int sum = 0; for (i = 0; i <= 100; i = i + 1) sum = sum + i * i; printf ("The sum from 0 .. 100 is %d\n", sum); } Сл. 5. Исти код на програмском језику C.

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

  21. Увод • Друга улога је да представља језик на коме се пишу програми. • Ова улога је некада била доминантна! • Данас то није случај, али се асемблерски језик користи тамо где је брзина рада или величина програма критична за искоришћење хардверских средстава, а при томе не постоји одговарајући аналогон у вишем програмском језику.

  22. Увод • Зашто користимо асемблерски језик? • Брзина и величина програма могу да буду од критичне важности, као у уграђеним рачунарима (embedded computer). • У програмима где су поједни делови критични у погледу времена извршења користи се хибридни приступ.

  23. Увод • Компилатори су обично бољи од програмера, али програмери боље разумеју алгоритме и понашање програма и, за разлику од компилатора, могу да имају у виду више процедура када пишу код за једну од њих. Додуше, у будућности ће програмери мање бити у стању да овај посао обављају боље од компилатора.

  24. Увод • Још једна битна предност асемблерског језика је у могућности да се користе специјализоване инструк-ције. • Најзад, тамо где нема расположивог вишег програмског језика остаје нам само да користимо асемблерски језик.

  25. Увод • Недостаци асмеблерских језика: • Машини оријентисани језици. • Изворни код је много дужи него код виших програмских језика што смањује продуктивност. • Дужи програми су тежи за читање и разумевање и могу да имају много више багова.

  26. Регистри процесора

  27. Регистри процесора

  28. Инструкције језика • Да би могли да управљамо хардвером рачунара, морамо да “говоримо” његовим језиком! • Речи језика машине називају се инструкцијама. • “Речник” овог језика назива се скупом инструкција.

  29. Инструкције језика • Сваки рачунар мора да буде у стању да извршава аритметичке операције. • Једна од инструкција асемблерског језика процесора MIPS add a, b, c налаже да се саберу променљиве bи c а резултат смести у a.

  30. Инструкције језика • Свака инструкција мора да обавља само једну операцију. • Инструкција има највише три аргумента утврђеног редоследа: најпре одредишни а потом два изворна!

  31. Инструкције језика • Следећа секвенца сабира четири променљиве add a, b, c #suma b i c smesta se u a add a, a, d #suma b, c i d je sada u a add a, a, e #suma b, c, d, i e je u a где речи десно од симбола # представљају коментар.

  32. Инструкције језика • Свака линија садржи једну инструкцију. • Коментар се завршава крајем линије.

  33. Инструкције језика Принцип пројектовања: Једноставност захтева регуларност.

  34. Инструкције језика Пример. Програмски сегмент на језику C a = b + c; d = a – e; превести у одговарајући асемблер-ски код процесора MIPS.

  35. Инструкције језика Одговор. add a, b, c sub d, a, e

  36. Инструкције језика

  37. Инструкције језика Пример. Нешто сложенији исказ на језику C садржи пет променљивих f = (g+h) – (i+j); Какав код ће произвести компилатор?

  38. Инструкције језика Одговор. add t0,g,h # privremena promenljiva t0 # sadrzi g+h add t1,i,j # privremena promenljiva t1 # sadrzi i+j sub f, t0, t1 # f dobija vrednost t0-t1 # tj. (g+h) – (i+j)

  39. Операнди • Насупрот вишим програмским језицима, овде операнди не могу бити произвољне променљиве! • Операнди се налазе у регистрима! • Величина регистара код процесора MIPS је 32 бита. • Група од 32 бита назива се реч. • Постоје 32 регистра.

  40. Операнди Принцип пројектовања: Мање је брже.

  41. Операнди • Већи број регистара повећава тактни период, јер је потребно више времена сигналу да пређе одговарајући пут. • Додуше, не значи да 31 регистар ради брже од 32.

  42. Операнди • Мада се у инструкцијама може једноставно наводити број регистра (од 0 до 31), по конвенцији се користе два знака испред којих је знак $. • Обично ћемо регистре $s0, $s1, … користити за променљиве а $t0, $t1, … за привремене вредности приликом израчунавања.

  43. Операнди Пример. Посао компилатора је да променљивама придружи регистре. Ако се за исказ језику C из претходног примера f = (g+h) – (i+j); променљиве f, g, h, i и j држе у регистрима $s0, $s1, $s2, $s3 и $s4, респективно, какав код ће произвести компилатор?

  44. Операнди Одговор. add $t0,$s1,$s2 # registar $t0 sadrzi g+h add $t1,$s3,$s4 # registar $t1 sadrzi i+j sub $s0,$t0,$t1 # f dobija vrednost $t0 - $t1 # tj. (g+h) – (i+j)

  45. Операнди • Програмски језици имају једностав-не променљиве које садрже по један податак, као у претходним примерима. • Међутим они могу да имају сложеније структуре података, ако што су поља. • Како представити те структуре и како им приступати?

  46. Управљање Улаз Меморија Стаза података Излаз Процесор У/И Операнди

  47. Операнди • Процесор може да саржи само мали износизнос података у регистрима, док меморија рачунара може да садржи на милионе података. • Према томе, структуре података налазе се у меморији. • Аритметичке операције обављају се само над операндима који су у регистрима.

  48. Операнди • Скуп инструкција мора да садржи инструкције које обављају пренос података између меморије и регистара. • Такве инструкције се називају инструкције за пренос података. • За приступ речи у меморији потребно је одредити њену адресу.

  49. Операнди • Меморија је дугачак линеаран низ меморијских локација. • Адресе заправо представљају индексе у том низу. • Адресна резолуција је један бајт.

  50. Адресе 0 8 битова 1 8 битова 2 8 битова 3 8 битова 4 8 битова 5 8 битова 6 8 битова ... Меморија Операнди • Могуће је адресирати 232бајтаса адресама од 0 до 232-1. ...

More Related