Transcript HW200_4

Монгол Улсын Шинжлэх Ухаан Технологийн Их
Сургууль
Компьютерийн зохион
байгуулалт, ассемблер
хэл
Код : CS200
Улирал : Хавар 2009
Багш : С. Байгалтөгс /проф, доктор/
SPIM програм





Энэ сэдвийн хүрээнд SPIM програмыг хэрхэн яаж ашиглах
талаар зөвлөгөө өгөх болно. MIPS програмыг жишээнд
үзүүлсэн шиг ажлуулна.
Агуулга :
SPIM програмыг эхлүүлэх
SPIM програмын хэрэглэгчийн интерфейс
Ассемблер хэлдээр програмаа бичих
Програмыг ачаалах
Програмаа ажлуулах
MUST
2
SPIM програмыг эхлүүлэх
MIPS процессор нь 32 битийн, 32 ширхэг ерөнхий
зориулалтын регистртэй. Эдгээр нь дотроо тодорхой
регистрүүдэд хуваагддаг. Эхний жишээ болох SPIM програм
нь бүхэл тоог (integer) дүрслэхдээ 2 регистрт битүүдийн
төлвөөр дүрсэх ба дараа нь тэр 2 – ыгоо нэмэх болно. Энэ
жишээ нь MS Win ME болон бүх windows үйлдлийн системд
ажиллах ба харин UNIX болон LINUX – д хаагдан
ажиллахгүй болно.
SPIM програмыг Start
товчиндээр даран зурагт
үзүүлсэн шиг ажлуулна.
MUST
3
SPIM програмын цонх
Програмыг ажлуулахад доор үзүүлсэн шиг цонх нээгдэх ба
дотроо 4 – н хэсэгт хуваагдана.
MUST
4
SPIM програмын цонх
1.
2.
3.
4.
Register Display : Энэ хэсэгт бүх 32 ерөнхий зориулалтын
регистр (16 – таар бичигдсэн), хөвөгч цэгтэй регистрүүд
байрлана.
Text Display : Энд ассемблер хэл дээрх програмын эх код
байрлах ба машины хэл дээр (16 - таар) хөрвүүлэгдсэн
командууд болон санах байрлалын хаягууд зэрэг харагдана.
Data and Stack Display : Энд програмын өгөгдөл болон
стекрүү хийсэн өгөгдөл зэрэг MIPS – ын санах ойн хэсгийг
үзүүлдэг.
SPIM Messages : Энд симуляторын мэдээллийг харуулах ба
ихэнхдээ алдааны мэдээллийг харуулдаг.
Симуляци хийгдсэн програмын үрдүн SPIM – ын консолд
гарч ирэх болно.
MUST
5
Ассемблер хэл дээр програм бичих
Ассемблер хэлдээр бичигдсэн програм ажиллаж байх явцад
консолд симуляцийн мэдээлэл бичигдэж байдаг. Үүнтэй
ижлээр MIPS компьютер дээр энэ програмыг ажлуулахад
консол дээрх үрдүнтэй ижил үрдүн дэлгэцэнд харагдах
болно. Симулятороос өгч буй мэдээлэл нь хэрэглэгчид
хандсан байх ба эдгээр нь алдааны мэдээлэл, сануулга зэрэг
байна. Мөн симуляцийг эхлүүлэхийн тулд ассемблер хэлдээр
бичсэн програмаа ачаалах шаардлагатай. Симуляторын
тохиргоонуудаас хамаарч тодорхой машин командууд нь
санах ойд байрласан байдаг. Эдгээр командууд нь тухайн
програм ажиллахад оролцдог. Симуляторын цэснээс
симуляцийг эхлүүлэх үед бичсэн кодын дагуу програм ажлах
ба хязгааргүй давталттайгаар ажиллана. Зогсоохдоо
симуляторын Break дээр дарах болно.
MUST
6
Ассемблер хэл дээр програм бичих
Эх файл (source file – ассемблер хэлдээрх болон бусад
програмчлалын хэлдээр бичигдсэн) нь програмистүүдээр
хөгжүүлэгдсэн, програмчлалын хэлдээр бичигдсэн кодыг
агуулсан текст файл юм. Програм бичих эдитор нь
жишээлбэл Notepad байж болно.
MUST
7
2 + 3 програм
Процессор нь эх файлыг шууд ажлуулж чадахгүй харин 2тын
тоололд хөрвүүлэгдсэн кодыг ажлуулдаг. Эдитор дээр
бичсэн програмаа addup.asm гэж хадгалан дуудаж ачаална.
## програмын эхлэл
.text
.globl main
main :
ori $8, $0, 0x2
# 8 регистрт 2 – ыг хийж байна
ori $9, $0, 0x3
# 9 регистрт 3 – ыг хийж байна
addu $10, $8, $9
# 8 болон 9 регистрдэх утгыг нэмж байна.
үрдүн нь 10 регистрт хадгалагдана.
## төгсгөл
MUST
8
2 + 3 програм
# тэмдэг нь бичлэгийн эхэнд байрлах ба энэ нь тайлбарыг
эхлүүлэх болно.
# тэмдгээр эхэлсэн мөр болгоныг симулятор тайлбар гэж
үзээд хэрэгсэхгүй орхих болно.
Харин main – ыг зааж буй 3 мөр нь машин командыг
эхлүүлж байна.
MUST
9
SPIM – ын тохиргоог хийх
MIPS процессорын команд бүр 32 бит (4 байт) – ийн урттай
байдаг. Өмнөх програмд main бичлэгийн дараах 3 мөр нь 3 –
н машин командыг дуудаж байгаа. Харин үлдсэн мөрөнд
ассемблерийн мэдээлэл, тайлбарыг багтааж байгаа. Энэ
эхний жишээ програмыг ажлуулахад SPIM – д хэдэн
сонголтыг хийх хэрэгтэй. Menu bar – аас Simulator – ыг
сонгож Settings дээр даран харилцах цонхыг нээх хэрэгтэй.
Доор үзүүлсэн сонголтыг хийнэ.
MUST
10
Эх файлыг ачаалах
Орчин үеийн компьютерүүдийн бүүт (boot) нь хэрэглэгчдэд
ойлгомжтой болсон. Энэ нь тодорхой хаягийн орон зайд
байрлах firmware програм (үйлдвэрлэгчдийн зохиосон
EEPROM – д шарагдсан өөрчлөгдөхгүй тогтмол машин
кодууд) юм. Энэ нь тэжээл залган, үйлдлийн систем ачаалж
эхлэснээр ажиллаж эхэлдэг. SPIM нь үндсэн firmware – ыг
симуляци хийж болдог.
File цэсээс Open командыг сонгож файлаа сонгон SPIM
симуляторт програмаа ачаалдаг.
Хэрвээ алдаатай бичигдсэн
програм бол SPIM нь алдааны
мэдээллийг үзүүлдэг.
MUST
11
Эх файлыг ачаалах
1.
2.
Эх файлаа SPIM – д ачаалах явцад 2 зүйл хийгддэг.
Ассемблер хэлдээрх файл нь машиний командруу
хөрвүүлэгддэг.
Командууд нь SPIM – ын санах ойд ачаалагддаг.
доор зурагт үзүүлвэл :
MUST
12
PC (Program counter) тохиргоо
Program counter нь процессорт ажиллаж буй командын 4
байтын хэмжээтэй хаягийг агуулж байдаг. Register Display
хэсгээс Program counter – ыг 0 – ээс эхлэдгийг харж болно.
Үүнийг нь 0x00400000 – ээр солих хэрэгтэй ба энэ нь эхний
командын хаяг юм. Ингэхдээ Simulator цэсний Set Value
командыг сонгох хэрэгтэй.
Харилцах цонх гарч
ирэхэд PC болон
0x00400000 гэж
оруулаад OK даран өөрчлөнө.
MUST
13
Програмыг ажлуулах
F10 товчийг дарж командаа алхам алхамаар ажлуулна.
Эхний команд биелэгдэхэд 8 регистрт 2 гэсэн утга орсон
байх болно. Дараагийн команд биелэгдэхэд PC нь
0x00400004 гэсэн утгатай болно.
MUST
14
Програмын үрдүн
F10 товчийг
програм дууссаны
дараа дахин дарвал
PC нь санах ойн
өөр хаягийг авах ба
бодит процессор
байсан бол гацалт
үүсэх болно.
MUST
15
Програмын тайлбар
Бодит процессор дээр үйлдлийн системийн удирдлагын дор
програмын биелэх явц ялгаатай байдаг. Харин энэ
тохиолдолд үйлдлийн системгүй командаа нэг нэгээр нь
ажлуулж байгаа.
.text – програмд шаардлагатай ассемблер хэлний директив.
.globl main – энэ нь эх файлын main функцыг тодорхойлж
байна гэж ойлгож болно.
main : санах ойдох эх кодын байрлалыг тодорхойлдог. Энэ
жишээ програмд main нь эхний командын хаягийг
илэрхийлж байна.
MUST
16
MIPS процессорын програмчлалын загвар





Энэ сэдвийн хүрээнд MIPS процессорын програмчлалын
загварын талаар судлах болно. Програмчлалын загвар гэдэг
нь процессорын хийсвэр ойлголт бөгөөд оновчтой
програмчлал юм.
Үндсэн MIPS програмчлалын загвар
Санах ой
Регистрүүд
Машин цикл
Удирдлагын урсгал
MUST
17
Санах ой
Орчин үеийн компьютерийн системд кеш ой болон хийсвэр
ой үргэлж хэрэглэгдэх болсон. Харин санах ойн хийсвэр
ойлголтонд эдгээр нь хамаарахгүй. Хийсвэр ойн үндсэн
зорилго нь нийт боломжит хаяглалын орон зайг ашиглах
явдал юм. Кеш ойн зорилго нь үндсэн санах ойд хурдтай
хандах явдал юм. Тиймээс програмчлалын загварт кеш ой
хамаарахгүй бөгөөд санах ойг тайлбарлавал:
Өгөгдөл :
MIPS процессор нь 232 байт хэмжээтэй массив хэлбэрийн
байх ба байт тус бүрийн хаяглалын орон зай нь 32 бит юм.
Байт бүр 8 битийн төлвийг авах ба боломжит 256 утгын нэг
байна. MIPS процессорын үндсэн санах ойн хаяглалын орон
зай нь 0x00000000 – ээс 0xFFFFFFFF хүртэл юм.
MUST
18
Санах ой
Хэрэглэгчийн ашиглаж буй програмууд болон өгөгдөл нь 231
байтаар хязгаарлагддаг бол үлдсэн хаягийн орон зайг
үйлдлийн систем хэрэглэх болон тусгай зориулалтаар
ашигладаг.
Үйлдлүүд :
Микропроцессор нь дотроо битийн
төлвийг хадгалах электрон компонент
буюу регистрүүдийг агуулдаг.
Мөн санах ой болон регистрүүдийн
хооронд мэдээлэл дамжуулах зэрэг
санах ойтой хамтарч ажилладаг.
MUST
19
Санах ой


Ачаалах : санах ойн тодорхойлогдсон нэг хаягнаас өгөгдөл
процессорын регистрт хуулагдахыг хэлнэ
Хадгалах : процессорын регистрээс санах ойн тодорхой нэг
хаягруу өгөгдөл хуулагдахыг хэлнэ
Санах ой болон процессорын хооронд 1,2,4 эсвэл 8 байтын
өгөгдөл хуулагддаг. Эдгээр нь үйлдлийг заах болон хаягийг
тодорхойлсон байтууд байдаг.
MUST
20
Санах ойн байршилт
Ачаалах болон хадгалах үйлдлүүд нь өгөгдлийг анхны
байрлалаас заасан байрлалд хуулдаг. Энэ санах ойн эсвэл
регистрийн анхны байрлал нь өөрчлөгддөггүй.
Харин мэдээж заасан байрлалаас анхны байрлалруугаа
өгөгдөл буцаж хуулагдаж болдог.
Санах ой нь команд болон өгөгдлийг тодорхойлсон
битүүдийн төлвийг хадгалах бөгөөд тухайн техник
хангамжаас хамаарч санах ойн хаана ч хадгалагдаж болдог.
Команд болон өгөгдөл тусдаа байрласнаар санах ойг зохион
байгуулах системийн програм болон програмчлахад
тохиромжтой.
MUST
21
Санах ойн байршилт
Санах ойн хаягийн орон зай нь 32 бит бөгөөд 0x80000000
хаягаас 0xFFFFFFFF хүртэлх орон
зай нь хэрэглэгчийн програмд
ашиглагддаггүй. Энэ нь үйлдлийн
систем болон ROM – д хэрэглэгддэг.
Энэ хаягийн орон зайд байрлах
ROM – д удирдлагын програм
байршдаг.
Text Segment : энд хэрэглэгчийн
програмын машин хэл байршдаг.
MUST
22
Санах ойн байршилт
Data Segment : энд програмын үйлдэлд хэрэглэгдэх өгөгдөл
байршина. Энэ өгөгдөл нь статик буюу програмын
гүйцэтгэлээр байршсан хэмжээ нь өөрчлөгддөггүй өгөгдөл
юм. Өөрөөр хэлбэл програмын биелэлтийн турш байт
хэмжээ нь өөрчлөгдөхгүй. Динамик өгөгдөл нь үүний эсрэг
байх болно.
Stack Segment : стек нь хэрэглэгчийн хаягийн орон зай гэж
хэлж болно. Дээд түвшний програмчлалын хэлэнд локаль
хувьсагч болон параметрүүдийг процедур шиг стек рүү хийж
мөн стекээс авч ашигладаг.
MUST
23
Регистрүүд



Өгөгдөл нь байтуудаас бүтдэг. Компьютер үйлдвэрлэгчид
бүр 1 байтаас их хэмжээтэй багцлаж ашиглах өөрсдийн
дүрмийг тогтоож өгдөг. MIPS чипийн хувьд :
Byte – 8 бит
Word – 4 байт буюу 32 бит
Double word – 8 байт буюу 64 бит
Санах ойн нэг хэсэг нь хаягийн эхний байтад хамаатай.
Ихэнх MIPS командууд нь тогтмол тооны байтуудыг
агуулдаг.
Регистр гэдэг нь битийн төлвийг агуулах процессорын нэг
бүрэлдэхүүн хэсэг юм. MIPS процессорын хувьд нэг регистр
нь 32 битээс бүрддэг.
MUST
24
Регистрүүд
Регистрүүд нь ассемблер хэлэнд ашиглагдах ба процессорын
үйлдлүүд биелэгдэх явцад хэрэглэгддэг.
Ерөнхий зориулалтын болон хөвөгч цэгтэй регистрүүд нь
ассемблер програмд ашиглагдах ба 32 ширхэг ерөнхий
зориулалтын регистртэй.
Ерөнхий зориулалтын регистр бүр 32 битийн утга авах ба
ассемблер хэлэнд $0, $1, $2, ... , $31 гэж тэмдэглэн
ашигладаг. Эдгээр нь 32 хөвөгч цэгтэй регистр юм.
MUST
25
Регистрүүд ба ALU
1.
2.
3.
4.
Процессорын арифметик логик байгууламж (ALU) нь бүхэл
тоон арифметик болон логик үйлдлүүдийг гүйцэтгэдэг.
Жишээ болгож 2 бүхэл тоо нэмэхийг авч үзье. Энд, үйлдэлд
орж байгаа өгөгдлийг операнд гэх болно. ALU – д орж
байгаа операнд нь регистрт хадгалагдах болно. Үр дүн нь
эргээд ерөнхий зориулалтын регистрт хадгалагдах болно.
ALU – ийн хийх 4 үйлдлийг тодорхойлвол :
Үйлдлийг тодорхойлж биелүүлэх
Эхний операндыг авах
Дараагийн операндыг авах
Үр дүнг регистрт хадгалах
MUST
26
Регистрүүд ба ALU
Зурагт 32 битийн нэмэх үйлдлийг харуулж байна.
Операндууд нь регистр $8
болон $9 – өөс орж ирэх бөгөөд
үр дүн нь регистр $10 – т
хадгалагдаж байна.
Энэ үйлдлийг ассемблер
хэлдээр бичвэл :
addu $10, $8, $9
MUST
27
Машин код
Процессорын ALU нь өгөгдлөө үндсэн санах ойгоос авч
үйлдлээ хийдэг. Ингэж үйлдлээ хийхдээ нэмэлт өгөгдөл,
удирдлагын логик болон хурдтай гүйцэтгэлийг шаарддаг.
MIPS процессорын хувьд ALU – д хэрэглэгдэх операндууд
болон үр дүн нь регистрт байрлана.
Нэмэх үйлдлийн команд нь ассемблер хэлний бичлэгээр
addu $10, $8, $9
Үүнийгээ машин кодонд хөрвүүлвэл
0x01095021
Харин 2 – тын тоололд
0000 0001 0000 1001 0101 0000 0010 0001
MUST
28
Машин код
2 – тын тоололд бичигдсэн код нь 4 – өөрөө багцлагдаж
бичигдэх ба багц бүр машин командыг илтгэнэ. Команд бүр
тодорхой функцыг агуулна.
ямар команд байгааг шалгахдаа : (1) үйлдэл, (2) операнд, (3)
операнд, (4) үр дүнг хадгалах газар
Команд нь үйлдлийг тодорхойлох талбар болон өгөгдлийн
талбарыг агуулдаг. Addu үйлдэл нь 12 битээс тогтох ба 2
багцад хуваагдана. Энэ 2 багцыгаа опкод (opcode) гэж
нэрлэнэ. Мөн регистрийн тоо нь 2 – тын бичлэгээсээ
хамаарна.
MUST
29
Регистрийн ажиллагаа
Ассемблер хэлдээрх програмд ерөнхий зориулалтын
регистрүүд нь бусад
заагч регистрүүдтэй
зохицож ажилладаг.
Ерөнхий зориулалтын
регистрүүд нь $0 – оос $31
хүртэл дугаарлагддаг ба
зохицож ажиллахдаа регистр
бүр ялгаатай үүрэгтэй
байдаг. $0 – оос $31
хүртэл дугаарлагдсан регистр бүр мнемоник нэртэй бөгөөд
жишээ нь $0 регистрийн мнемоник нэр нь тэг (zero) байх
MUST
30
жишээтэй.
Регистрийн ажиллагаа
$0 – оос $31 регистрүүд нь хоорондоо ялгаатай ажиллах ба
регистр $0 нь тогтмол 0 – ын битээр хэрэглэгддэг. Харин
регистр $31 нь дэд програм командруу үсрэх хаягийг агуулж
байдаг.
Энэ нь хэрвээ цээжлэхэд хүнд санагдвал санаа зовох
хэрэггүй харин ч програм бичих явцад аяндаа цээжлэгдэх
болно.
MUST
31
Машин цикл
MIPS процессорын ассемблер програмын хувьд машин
циклийг агуулдаг. MIPS нь үндсэн 3 – н алхам бүхий
төгсгөлгүй циклүүдээс бүрддэг. Цикл бүр нэг машин
командыг биелүүлнэ. Ямар ч процессор машины
үйлдлийн дарааллын дагуу ажилладаг. Тиймээс
ямарч програм сая сая машин циклээс тогтдог.
Програмын тоолуур (PC) нь дараагийн биелэх
командыг авах замаар командын дарааллын дагуу
гүйцэтгэл явагддаг.
Дараагийн командыг барих (Fetch the Instruction) :
програмын тоолуур нь дараагийн биелэх машин командын
хаягийг агуулах ба санах ойгоос командаа барих болно.
MUST
32
Машин цикл
Програмын тоолуур нэмэгдэх (Increment the PC) : програмын
тоолуурын хаяг нь 4 – өөр нэмэгддэг.
Командыг биелүүлэх (Execute the Instruction) : програмын
үйлдэл дэх командыг биелүүлнэ.
MUST
33
Дараалсан гүйцэтгэл
MIPS процессорын командууд бүгд 32 бит (4 байт) – ийн
өргөнтэй. Командууд нь програмын эхний команд
биелэгдэхэд дараагийн команд биелэгдэх гэх мэт дараалсан
замаар ажилладаг. Гүйцэтгэлийн дараалал нь машин
командын үсрэлт болон салаалалтаас болж өөрчлөгдөж
болдог.
зурагт 0x00400000, 0x00400004, болон 0x00400008
хаягууддах командууд нь дарааллын дагуу биелэгдэх болно.
MUST
34
Удирдлага
Командууд нь машин циклд хөрвүүлэгдэхдээ 2 – тын тоон
дараалалд бичигдэнэ. Энэ бичлэгдэх битүүд нь ямар үйлдэл
гүйцэтгэх болон ямар өгөгдөл хэрэглэх зэрэг электроник
зангилааг илэрхийлдэг. Хэрвээ битүүд нь командыг илтгэж
чадахгүй бол машин цикл нь тасалдалд орно. Програмын энэ
шалтгаан нь мөргөлдөөн юм. Ялангуяа командын
хөрвүүлэгдсэн код нь биелэгддэг. Биелэгдэж буй програмын
удирдлагын цэг нь гүйцэтгэгдэж байгаа командын санах ойн
хаяг юм. Команд ажиллаж байх үед програмын тоолуур нь
удирдлагын цэгийн дараах командын хаягийг барьж авдаг.
Удирдлагын цэг нь командын дарааллын дагуу шилждэг.
MIPS процессорын хувьд санах ойн 4 байтын алхамтайгаар
шилждэг. Удирдлагын цэг буюу удирдлагын урсгал нь санах
ойд удирдлагын цэг яаж шилжихийг илэрхийлнэ.
MUST
35
Multitasking
Микрософт компанийн DOS – ын програмуудын удирдлага
төгсгөл хүртэл ажиллах ба эргэж DOS – д удирдлага
шилждэг. Тиймээс тодорхой нэг хугацаанд зөвхөн нэг л
апликэшн програм ажиллаж байдаг.
Орчин үеийн компьютерийн систем нь биелэгдэж буй
програмын удирдлагын хувьд тасалдлыг зөвшөөрөх болсон.
Тасалдал үүссэн үед үйлдлийн систем нь өөр апликешн
програмын удирдлагыг өгөх болно. Үүнийг компьютерийн
систем нь олон програмыг нэгэн зэрэг гүйцэтгэж байна гэж
хэлэх буюу мультитаск гэж нэрлэнэ. 1960 оны үеээс
майнфрем (mainframe) компьютерүүдэд энэ аргыг хэрэглэх
болсон ба 1978 онд микрокомпьютерүүдэд, 1995 оноос
windows
компьютерүүдэд
хэрэглэх
болсон.
MIPS
процессорын хувьд мультитаскыг маш сайн хэрэгжүүлдэг.
MUST
36