Гэр / Аватар / Өгөгдлийн формат ба ассемблер хэлний зааврын бүтэц. Хураангуй: Төлөвлөгөө: Өмнөх үг. Ассемблей хэл ба зааврын бүтэц. Exe файлын бүтэц (семантик задлан шинжлэх) Ассемблер хэлний командын бүтцэд агуулагддаг

Өгөгдлийн формат ба ассемблер хэлний зааврын бүтэц. Хураангуй: Төлөвлөгөө: Өмнөх үг. Ассемблей хэл ба зааврын бүтэц. Exe файлын бүтэц (семантик задлан шинжлэх) Ассемблер хэлний командын бүтцэд агуулагддаг

Сэдэв 1.4 Ассемблерийн мнемоник. Тушаалын бүтэц, формат. Хаягжуулалтын төрлүүд. Микропроцессорын зааврын багц

Төлөвлөгөө:

1 Ассемблей хэл. Үндсэн ойлголтууд

2 Ассемблей хэлний тэмдэг

3 Ассемблер хэллэгийн төрлүүд

4 Ассемблейн удирдамж

5 Процессорын зааврын багц

1 Iассемблер хэл. Үндсэн ойлголтууд

ассемблер хэлмашин хэлний бэлгэдлийн дүрслэл юм. Техник хангамжийн хамгийн доод түвшинд байгаа машин дахь бүх процессууд нь зөвхөн машины хэлний командууд (зааврууд) -аар удирддаг. Эндээс харахад нийтлэг нэртэй хэдий ч төрөл бүрийн компьютерийн ассемблер хэл нь өөр өөр байдаг.

Ассемблер хэлний программ гэдэг нь санах ойн блокуудын цуглуулга юм санах ойн сегментүүд.Програм нь эдгээр блок сегментүүдийн нэг буюу хэд хэдэн хэсгээс бүрдэж болно. Сегмент бүр нь хэлний өгүүлбэрүүдийн цуглуулгатай бөгөөд тус бүр нь програмын кодын тусдаа мөрийг эзэлдэг.

Чуулганы мэдэгдэл нь дөрвөн төрөлтэй:

1) тушаал эсвэл заавар Эдгээр нь машины командуудын бэлгэдлийн аналог юм. Орчуулах явцад угсралтын зааврыг микропроцессорын зааврын багцын харгалзах командууд болгон хувиргадаг;

2) макро -нэвтрүүлгийн явцад тодорхой хэлбэрээр албан ёсоор бичигдсэн нэвтрүүлгийн текстийн өгүүлбэрийг өөр өгүүлбэрээр солих;

3) заавар,Эдгээр нь ассемблер орчуулагчийн зарим үйлдлийг гүйцэтгэх заавар юм. Удирдамжууд нь машины дүрслэлд ижил төстэй байдаггүй;

4) тайлбар мөрүүд , ямар ч тэмдэгт, түүний дотор орос цагаан толгойн үсгийг агуулсан. Орчуулагч тайлбарыг үл тоомсорлодог.

­ Ассемблей программын бүтэц. ассемблерийн синтакс.

Хөтөлбөрийг бүрдүүлдэг өгүүлбэрүүд нь команд, макро, заавар, тайлбарт тохирох синтаксийн бүтэц байж болно. Ассемблер орчуулагч тэдгээрийг танихын тулд тэдгээрийг тодорхой синтакс дүрмийн дагуу бүрдүүлэх ёстой. Үүнийг хийхийн тулд дүрмийн дүрэм шиг хэлний синтаксийн албан ёсны тайлбарыг ашиглах нь хамгийн сайн арга юм. Энэ мэт програмчлалын хэлийг дүрслэх хамгийн түгээмэл аргууд - синтакс диаграммуудболон Backus-Naur-ийн өргөтгөсөн хэлбэрүүд.Учир нь практик хэрэглээилүү тухтай синтакс диаграммууд.Жишээлбэл, ассемблер хэлний хэллэгүүдийн синтаксийг дараах 10, 11, 12-р зурагт үзүүлсэн синтакс диаграммыг ашиглан дүрсэлж болно.

Зураг 10 - Ассемблей өгүүлбэрийн хэлбэр


­ Зураг 11 - Удирдамжийн формат

­ Зураг 12 - Команд болон макросын формат

Эдгээр зураг дээр:

­ шошгоны нэр- тодорхойлогч, утга нь програмын эх кодын өгүүлбэрийн эхний байтны хаяг бөгөөд үүнийг тэмдэглэдэг;

­ нэр -энэ удирдамжийг ижил нэртэй бусад удирдамжаас ялгах таних тэмдэг. Ассемблер тодорхой удирдамжийг боловсруулсны үр дүнд энэ нэрэнд тодорхой шинж чанаруудыг өгч болно;

­ үйл ажиллагааны код (COP) ба удирдамж - Эдгээр нь харгалзах машины заавар, макро заавар эсвэл хөрвүүлэгчийн удирдамжийн мнемоник тэмдэг юм;

­ операндууд -командын хэсэг, макро эсвэл ассемблерийн удирдамж, үйлдлүүд хийгдэж буй объектуудыг илэрхийлдэг. Ассемблер операндуудыг тоон болон текстийн тогтмолууд, хувьсагчийн шошго, таних тэмдэг бүхий илэрхийлэл, үйлдлийн тэмдэг болон зарим нөөцлөгдсөн үгсээр тайлбарладаг.

Синтакс диаграммуудТуслаач олж, дараа нь диаграмын оролтоос (зүүн) гаралт (баруун) хүртэлх замыг туулна. Хэрэв ийм зам байгаа бол өгүүлбэр, бүтэц нь синтаксийн хувьд зөв болно. Хэрэв ийм зам байхгүй бол хөрвүүлэгч энэ бүтцийг хүлээж авахгүй.

­ 2 Ассемблей хэлний тэмдэг

Програмын текстийг бичихдээ зөвшөөрөгдсөн тэмдэгтүүд нь:

1) бүх латин үсэг: А-З,а-з. Энэ тохиолдолд том ба жижиг үсгийг тэнцүү гэж үзнэ;

2) тоонууд 0 өмнө 9 ;

3) тэмдэг ? , @ , $ , _ , & ;

4) тусгаарлагч , . () < > { } + / * % ! " " ? = # ^ .

Ассемблер өгүүлбэр нь -аас үүсдэг жетон, эдгээр нь орчуулагчийн хувьд утга учиртай хүчин төгөлдөр хэлний тэмдэгтүүдийн синтаксийн хувьд салшгүй дараалал юм.

жетоннь:

1) таних тэмдэг - Үйлдлийн код, хувьсагчийн нэр, шошгоны нэр зэрэг програмын объектуудыг тодорхойлоход ашигладаг хүчинтэй тэмдэгтүүдийн дараалал. Тодорхойлогчийг бичих дүрэм нь дараах байдалтай байна: танигч нь нэг буюу хэд хэдэн тэмдэгтээс бүрдэж болно;

2) тэмдэгт мөрүүд - дан эсвэл давхар хашилтанд орсон тэмдэгтүүдийн дараалал;

3) дараах тооллын системийн аль нэг дэх бүхэл тоо : хоёртын, аравтын, арван зургаатын. Ассемблер программд бичихдээ тоонуудыг тодорхойлох нь тодорхой дүрмийн дагуу явагддаг.

4) аравтын бутархай тоонуудыг танихад нэмэлт тэмдэг шаардлагагүй, жишээлбэл, 25 эсвэл 139. Програмын эх кодыг тодорхойлоход хоёртын тооТэдний найрлагад орсон тэг, нэгийг бичсэний дараа латин үсгээр бичих шаардлагатай. б”, жишээ нь 10010101 б.

5) арван зургаатын тоонуудын тэмдэглэгээнд илүү олон конвенци байдаг:

Нэгдүгээрт, тэдгээр нь тоонуудаас бүрддэг. 0...9 , Латин цагаан толгойн жижиг, том үсэг а,б, в,г,д,еэсвэл А,Б,C,Д,Э,Ф.

Хоёрдугаарт, орчуулагч дангаараа 0...9 цифрээс бүрдэх (жишээ нь 190845) эсвэл латин цагаан толгойн үсгээр эхэлдэг (жишээлбэл, ef15). Өгөгдсөн лексем нь аравтын бутархай, тодорхойлогч биш гэдгийг орчуулагчдад "тайлбарлах" тулд програмист арван арван бутархай тоог тусгайлан хуваарилах ёстой. Үүнийг хийхийн тулд 16-тын тоог бүрдүүлдэг 16-тын цифрүүдийн дарааллын төгсгөлд латин үсгийг бичнэ үү. h". Энэ бол урьдчилсан нөхцөл юм. Хэрэв арван арван тоот тоо үсгээр эхэлсэн бол түүний өмнө тэргүүлэгч тэг байна: 0 ef15 h.

Бараг бүх өгүүлбэрт ямар нэгэн үйлдэл хийж байгаа объектын тайлбарыг агуулдаг. Эдгээр объектуудыг нэрлэдэг операндууд. Тэдгээрийг дараах байдлаар тодорхойлж болно. операндууд- эдгээр нь заавар эсвэл зааврын нөлөөнд автдаг объектууд (зарим утгууд, регистрүүд эсвэл санах ойн нүднүүд) эсвэл эдгээр нь заавар эсвэл зааврын үйлдлийг тодорхойлох эсвэл сайжруулах объектууд юм.

Дараахь операндуудын ангиллыг хийх боломжтой.

­ тогтмол буюу шууд операндууд;

­ хаягийн операндууд;

­ зөөгдсөн операндууд;

хаягийн тоолуур;

­ операндыг бүртгэх;

­ суурь ба индекс операндууд;

­ бүтцийн операндууд;

бичлэгүүд.

Операндууд нь машины зааварчилгааны нэг хэсэг болох үндсэн бүрэлдэхүүн хэсгүүд бөгөөд үйл ажиллагаа явуулж буй объектуудыг илэрхийлдэг. Илүү ерөнхий тохиолдолд операндууд гэж нэрлэгддэг илүү төвөгтэй формацуудад бүрэлдэхүүн хэсэг болгон оруулж болно илэрхийллүүд.

Илэрхийлэл нь операнд ба операторуудын нэгдэл юм. Илэрхийллийн үнэлгээний үр дүн нь зарим санах ойн эсийн хаяг эсвэл зарим тогтмол (үнэмлэхүй) утга байж болно.

­ 3 Ассемблер хэллэгийн төрлүүд

Боломжит төрлүүдийг жагсаацгаая ассемблерийн мэдэгдэлассемблер илэрхийлэл үүсгэх синтакс дүрмүүд:

­ арифметик операторууд;

­ ээлжийн операторууд;

­ харьцуулах операторууд;

­ логик операторууд;

­ индекс оператор;

­ төрлийг дарах оператор;

­ сегментийг дахин тодорхойлох оператор;

­ бүтцийн төрлийг нэрлэх оператор;

­ илэрхийллийн хаягийн сегментийн бүрэлдэхүүнийг авах оператор;

­ илэрхийллийн офсет авах оператор.

1 Чуулганы удирдамж

­ Ассемблерийн заавар нь:

1) Сегментчлэлийн удирдамж. Өмнөх хэлэлцүүлгийн явцад бид ассемблер хэлний программ дээр заавар, операнд бичих бүх үндсэн дүрмийг олж мэдсэн. Орчуулагч тэдгээрийг боловсруулж, микропроцессор гүйцэтгэх боломжтой байхын тулд командын дарааллыг хэрхэн зөв форматлах вэ гэсэн асуулт нээлттэй хэвээр байна.

Микропроцессорын архитектурыг авч үзэхэд энэ нь нэгэн зэрэг ажиллах боломжтой зургаан сегментийн бүртгэлтэй болохыг олж мэдсэн.

­ нэг кодын сегменттэй;

­ нэг стек сегменттэй;

­ нэг өгөгдлийн сегменттэй;

­ гурван нэмэлт өгөгдлийн сегменттэй.

Физикийн хувьд сегмент нь тушаалууд ба (эсвэл) өгөгдлүүдийг эзэлдэг санах ойн хэсэг бөгөөд хаягийг нь харгалзах сегментийн бүртгэлийн утгатай харьцуулан тооцдог. Ассемблер дахь сегментийн синтаксийн тайлбар нь Зураг 13-т үзүүлсэн бүтэц юм.


­ Зураг 13 - Ассемблер дахь сегментийн синтаксийн тайлбар

Сегментийн үйл ажиллагаа нь програмыг код, өгөгдөл, стекийн блок болгон хуваахаас арай илүү өргөн хүрээтэй гэдгийг анхаарах нь чухал юм. Сегментчлэл нь холбоотой илүү ерөнхий механизмын нэг хэсэг юм модульчлагдсан програмчлалын тухай ойлголт.Энэ нь хөрвүүлэгчийн бүтээсэн объектын модулиудын дизайныг нэгтгэх, түүний дотор өөр өөр програмчлалын хэлнүүдийг багтаасан болно. Энэ нь өөр өөр хэл дээр бичигдсэн програмуудыг нэгтгэх боломжийг олгодог. Ийм нэгдлийн янз бүрийн хувилбаруудыг хэрэгжүүлэхэд SEGMENT зааврын операндууд зориулагдсан болно.

2) Жагсаалтын хяналтын удирдамж. Жагсаалтын хяналтын удирдамжийг дараах бүлгүүдэд хуваана.

­ жагсаалтын хяналтын ерөнхий удирдамж;

­ файлын жагсаалтыг оруулах гаралтын удирдамж;

­ нөхцөлт угсралтын блокуудын гаралтын удирдамж;

­ макро жагсаалтын гаралтын удирдамж;

­ жагсаалт дахь хөндлөн лавлагааны талаархи мэдээллийг харуулах заавар;

­ жагсаалтын форматыг өөрчлөх заавар.

2 Процессорын зааврын багц

Процессорын зааврын багцыг Зураг 14-т үзүүлэв.

Үндсэн бүлгүүдийн командуудыг авч үзье.

­ Зураг 14 - Угсралтын зааврын ангилал

Командууд нь:

1 Өгөгдөл дамжуулах командууд. Эдгээр заавар нь аливаа процессорын зааврын багцад маш чухал байр суурийг эзэлдэг. Тэд дараахь чухал үүргийг гүйцэтгэдэг.

­ процессорын дотоод регистрүүдийн агуулгыг санах ойд хадгалах;

­ санах ойн нэг хэсгээс нөгөө рүү агуулгыг хуулах;

­ оролт гаралтын төхөөрөмжид бичих, оролт гаралтын төхөөрөмжөөс унших.

Зарим процессоруудад эдгээр бүх функцийг нэг заавраар гүйцэтгэдэг MOV (байт шилжүүлгийн хувьд - MOVB ) гэхдээ операндуудыг хаяглах өөр аргуудтай.

Заавараас гадна бусад процессоруудад MOV жагсаасан функцүүдийг гүйцэтгэх хэд хэдэн тушаалууд байна. Мэдээлэл дамжуулах командууд нь мэдээлэл солилцох командуудыг агуулдаг (тэдгээрийн тэмдэглэгээ нь үг дээр суурилдагСолилцоо ). Нэг регистрийн хоёр хагасын хооронд дотоод бүртгэлийн хооронд мэдээлэл солилцох боломжтой байж болно ( SWAP ) эсвэл бүртгэл болон санах ойн байршлын хооронд.

2 Арифметик команд. Арифметик заавар нь операнд кодыг тоон хоёртын буюу BCD код гэж үздэг. Эдгээр тушаалуудыг таван үндсэн бүлэгт хувааж болно:

­ тогтмол цэгтэй үйлдлийн командууд (нэмэх, хасах, үржүүлэх, хуваах);

­ хөвөгч цэгийн заавар (нэмэх, хасах, үржүүлэх, хуваах);

­ цэвэрлэх командууд;

­ нэмэгдүүлэх, багасгах командууд;

­ харьцуулах команд.

3 Тогтмол цэгийн заавар нь ердийн хоёртын кодтой адил процессорын регистр эсвэл санах ой дахь кодууд дээр ажилладаг. Хөвөгч цэг (цэг) заавар нь экспонент болон мантиса бүхий тоог дүрслэх форматыг ашигладаг (ихэвчлэн эдгээр тоонууд нь дараалсан хоёр санах ойн байрлалыг эзэлдэг). Орчин үед хүчирхэг процессоруудХөвөгч цэгийн зааврын багц нь зөвхөн дөрвөн арифметик үйлдлээр хязгаарлагдахгүй, жишээлбэл, тригонометрийн функц, логарифмын функцийг тооцоолох, түүнчлэн дуу, дүрс боловсруулахад шаардлагатай нарийн төвөгтэй функцуудыг багтаасан өөр олон нарийн төвөгтэй заавруудыг агуулдаг.

4 Clear командууд нь регистр эсвэл санах ойн нүдэнд тэг код бичих зориулалттай. Эдгээр командуудыг тэг кодтой дамжуулах зааварчилгаагаар сольж болох боловч тусгай тодорхой зааврууд нь дамжуулах заавраас илүү хурдан байдаг.

5 Өсгөх (нэгээр нэмэгдүүлэх) болон бууруулах командууд

(нэгээр бууруулах) бас маш тохиромжтой. Тэдгээрийг зарчмын хувьд нэг нэмэх эсвэл нэг хасах заавраар сольж болох боловч нэмэх, хасах нь нэмэх, хасахаас хурдан байдаг. Эдгээр заавар нь гаралтын операнд болох нэг оролтын операндыг шаарддаг.

6 Харьцуулах заавар нь хоёр оролтын операндыг харьцуулах зориулалттай. Үнэн хэрэгтээ энэ хоёр операндын зөрүүг тооцдог боловч гаралтын операнд үүсгэдэггүй, зөвхөн энэ хасалтын үр дүнд үндэслэн процессорын статусын бүртгэлийн битүүдийг өөрчилдөг. Харьцуулах зааврын дараах заавар (ихэвчлэн үсрэх заавар) нь процессорын статусын бүртгэл дэх битүүдийг задлан шинжилж, тэдгээрийн утгуудад тулгуурлан үйлдлүүдийг хийнэ. Зарим процессорууд санах ой дахь операндын хоёр дарааллыг гинжин хэлхээнд харьцуулах зааврыг өгдөг.

7 логик команд. Логик заавар нь операндууд дээр логик (битийн) үйлдлүүдийг гүйцэтгэдэг, өөрөөр хэлбэл операндын кодуудыг нэг тоо биш, харин бие даасан битүүдийн багц гэж үздэг. Үүгээрээ тэд арифметик командуудаас ялгаатай. Логик командууд нь дараах үндсэн үйлдлүүдийг гүйцэтгэдэг.

­ логик AND, логик OR, модуль 2 нэмэх (XOR);

­ логик, арифметик, мөчлөгийн шилжилт;

­ бит ба операндуудыг шалгах;

­ процессорын статусын бүртгэлийн битүүдийг (тугуудыг) тохируулах, цэвэрлэх ( PSW).

Багууд логик үйлдлүүдхоёр оролтын операндоос үндсэн логик функцуудыг битээр тооцоолох боломжийг олгоно. Түүнчлэн, AND үйлдлийг өгөгдсөн битүүдийг албадан цэвэрлэхэд ашигладаг (операндуудын нэг нь маск код бөгөөд цэвэрлэх шаардлагатай битүүдийг тэг болгож тохируулсан). OR үйлдлийг тохируулсан битүүдийг хүчээр шахахад ашигладаг (операндуудын аль нэгийн хувьд нэгийг тохируулах шаардлагатай битүүд нь нэгтэй тэнцүү байх маск кодыг ашигладаг). XOR үйлдлийг өгөгдсөн битүүдийг урвуулахад ашигладаг (операндуудын аль нэгийн хувьд хувиргах битүүдийг нэг болгож тохируулах маск кодыг ашигладаг). Заавар нь хоёр оролтын операнд шаарддаг бөгөөд нэг гаралтын операнд үүсгэдэг.

8 Шилжүүлэх командууд нь операндын кодыг битээр баруун тийш (доод битүүд рүү) эсвэл зүүн тийш (дээд битүүд рүү) шилжүүлэх боломжийг олгодог. Шилжилтийн төрөл (бүлийн, арифметик эсвэл цикл) нь хамгийн чухал бит (баруун тийш шилжих үед) эсвэл хамгийн бага ач холбогдолтой битийн (зүүн шилжих үед) шинэ утга ямар байхыг тодорхойлохоос гадна хамгийн чухал битийн хуучин утга нь юу болохыг тодорхойлдог. бит нь хаа нэгтээ (зүүн тийш шилжих үед) эсвэл хамгийн бага ач холбогдолтой бит (баруун тийш шилжих үед) хадгалагдана. Эргэлтийн шилжилт нь операндын кодын битүүдийг тойрог хэлбэрээр (баруун тийш шилжүүлэх үед цагийн зүүний дагуу эсвэл зүүн тийш шилжих үед цагийн зүүний эсрэг) шилжүүлэх боломжийг олгодог. Энэ тохиолдолд ээлжийн цагираг нь зөөвөрлөх далбааг агуулсан байж болно. Зөөврийн тугны бит (хэрэв ашигласан бол) зүүн тийш эргүүлэхэд хамгийн чухал бит, баруун тийш эргүүлэхэд хамгийн бага ач холбогдолтой битээр тохируулагдсан. Үүний дагуу зөөвөрлөх тугийн битийн утгыг зүүн мөчлөгийн шилжилтийн үед хамгийн бага ач холбогдол бүхий бит, баруун мөчлөгийн шилжилтийн үед хамгийн чухал бит хүртэл дахин бичнэ.

9 үсрэх команд. Jump командууд нь бүх төрлийн гогцоо, салбар, дэд программын дуудлага гэх мэтийг зохион байгуулах зориулалттай бөгөөд өөрөөр хэлбэл програмын дараалсан урсгалыг тасалдуулж өгдөг. Эдгээр зааврууд нь зааврын тоолуурын бүртгэлд шинэ утгыг бичиж, улмаар процессорыг дарааллаар нь дараагийн заавар руу биш, харин програмын санах ой дахь бусад заавар руу шилжихэд хүргэдэг. Зарим үсрэлт команд нь үсрэлт хийсэн цэг рүү буцаж очих боломжийг олгодог бол зарим нь тийм биш юм. Хэрэв буцаалтыг өгсөн бол процессорын одоогийн параметрүүдийг стек дээр хадгална. Хэрэв өгөөж өгөхгүй бол одоогийн процессорын параметрүүдийг хадгалахгүй.

Буцахгүйгээр үсрэх командуудыг хоёр бүлэгт хуваадаг.

­ болзолгүй үсрэх тушаалууд;

­ нөхцөлт үсрэлт заавар.

Эдгээр тушаалууд нь үгсийг ашигладагСалбар (салбар) ба Үсрэх (үсрэх).

Болзолгүй үсрэх заавар нь юу ч байсан шинэ хаяг руу үсрэх шалтгаан болдог. Эдгээр нь заасан офсет утга руу (урагш эсвэл арагшаа) эсвэл заасан санах ойн хаяг руу үсрэлт үүсгэж болно. Офсет утга буюу шинэ хаягийн утгыг оролтын операнд гэж зааж өгсөн.

Нөхцөлт үсрэлтийн командууд нь үргэлж үсрэлт үүсгэдэггүй, зөвхөн заасан нөхцөл хангагдсан үед л. Ийм нөхцөл нь ихэвчлэн процессорын статусын бүртгэл дэх тугуудын утгууд юм ( PSW ). Өөрөөр хэлбэл, шилжилтийн нөхцөл нь тугуудын утгыг өөрчилсөн өмнөх үйлдлийн үр дүн юм. Нийтдээ 4-16 ийм үсрэлтийн нөхцөл байж болно. Нөхцөлт үсрэлт командын зарим жишээ:

­ тэгтэй тэнцүү бол үсрэх;

­ тэг биш бол үсрэх;

­ халих үед үсрэх;

­ халихгүй бол үсрэх;

­ тэгээс их бол үсрэх;

­ тэгээс бага эсвэл тэнцүү бол үсрэх.

Хэрэв шилжилтийн нөхцөл хангагдсан бол зааврын тоолуурын бүртгэлд шинэ утгыг ачаална. Хэрэв үсрэх нөхцөл хангагдаагүй бол зааврын тоолуурыг зүгээр л өсгөх ба процессор дараагийн командыг дарааллаар нь сонгон гүйцэтгэнэ.

Салбарын нөхцөлийг шалгахын тулд нөхцөлт үсрэлтийн заавар (эсвэл бүр хэд хэдэн нөхцөлт үсрэлтийн заавар) -ын өмнө байдаг харьцуулах зааврыг (CMP) ашигладаг. Гэхдээ тугуудыг өгөгдөл дамжуулах команд, арифметик эсвэл логик команд гэх мэт өөр ямар ч тушаалаар тохируулж болно. Үсрэх командууд нь тугуудыг өөрчилдөггүйг анхаарна уу, энэ нь хэд хэдэн үсрэх командыг ар араас нь оруулах боломжийг олгодог.

Буцах командуудын дунд таслах командууд онцгой байр эзэлдэг. Эдгээр заавар нь оролтын операнд болгон тасалдлын дугаар (вектор хаяг) шаарддаг.

Дүгнэлт:

Ассемблей хэл нь машины хэлний бэлгэдлийн илэрхийлэл юм. Компьютерийн төрөл бүрийн ассемблер хэл нь өөр өөр байдаг. Ассемблер хэлний програм нь санах ойн сегмент гэж нэрлэгддэг санах ойн блокуудын цуглуулга юм. Сегмент бүр нь хэлний өгүүлбэрүүдийн цуглуулгатай бөгөөд тус бүр нь програмын кодын тусдаа мөрийг эзэлдэг. Ассемблей мэдэгдэл нь команд эсвэл заавар, макро, заавар, тайлбар мөр гэсэн дөрвөн төрөлтэй.

Програмын текстийг бичихдээ хүчинтэй тэмдэгтүүд нь бүгд латин үсэг юм. А-З,а-з. Энэ тохиолдолд том ба жижиг үсгийг тэнцүү гэж үзнэ; -аас авсан тоонууд 0 өмнө 9 ; тэмдэг ? , @ , $ , _ , & ; тусгаарлагч , . () < > { } + / * % ! " " ? = # ^ .

Ассемблерийн илэрхийлэл үүсгэх дараах төрлийн ассемблер хэллэгүүд болон синтакс дүрмүүд хамаарна. арифметик операторууд, ээлжийн операторууд, харьцуулах операторууд, логик операторууд, индексийн операторууд, төрлийг дахин тодорхойлох операторууд, сегментийг дахин тодорхойлох операторууд, бүтцийн төрлийг нэрлэх операторууд, илэрхийллийн хаягийн сегментийн бүрэлдэхүүнийг авах операторууд, илэрхийлэлийн офсет авах операторууд.

Командын системийг 8 үндсэн бүлэгт хуваадаг.

­ Туршилтын асуултууд:

1 Ассемблер хэл гэж юу вэ?

2 Ассемблер дээр команд бичихэд ямар тэмдэг ашиглаж болох вэ?

3 Шошго гэж юу вэ, тэдгээрийн зорилго юу вэ?

4 Угсрах зааврын бүтцийг тайлбарлана уу.

5 4 төрлийн ассемблер хэллэгийг жагсаа.

Машин нь техник хангамжийн түвшинд хүний ​​​​командуудыг гүйцэтгэхийн тулд "тэг ба нэг" хэлээр үйлдлүүдийн тодорхой дарааллыг тохируулах шаардлагатай. Ассемблер энэ асуудалд туслах болно. Энэ бол командуудыг машины хэл рүү хөрвүүлэхэд зориулагдсан хэрэгсэл юм. Гэсэн хэдий ч програм бичих нь маш их цаг хугацаа шаардсан, нарийн төвөгтэй үйл явц юм. Энэ хэл нь гэрэл үүсгэх зорилготой биш юм энгийн үйлдлүүд. Дээр Энэ мөчТаны ашигладаг аливаа програмчлалын хэл (Assembler маш сайн ажилладаг) нь техник хангамжийн ажилд ихээхэн нөлөөлдөг тусгай үр дүнтэй ажлуудыг бичих боломжийг олгодог. Гол зорилго нь бичил заавар, жижиг код үүсгэх явдал юм. Энэ хэл нь жишээлбэл Паскаль эсвэл С хэлээс илүү олон боломжуудыг өгдөг.

Ассемблер хэлний товч тайлбар

Бүх програмчлалын хэлийг доод ба өндөр гэсэн түвшинд хуваадаг. Ассемблерийн "гэр бүлийн" синтаксийн системүүдийн аль нь ч хамгийн түгээмэл ба зарим давуу талуудыг нэг дор нэгтгэдэгээрээ ялгаатай байдаг. орчин үеийн хэлнүүд. Тэд компьютерийн системийг бүрэн ашиглаж чаддагаараа бусадтай холбоотой байдаг.

Хөрвүүлэгчийн нэг онцлог шинж чанар нь ашиглахад хялбар байдал юм. Энэ нь зөвхөн өндөр түвшинд ажилладаг хүмүүсээс ялгаатай. Хэрэв ийм програмчлалын хэлийг анхаарч үзвэл Assembler хоёр дахин хурдан бөгөөд илүү сайн ажилладаг. Үүнд бичихийн тулд хөнгөн програмтийм ч их хугацаа шаардахгүй.

Хэлний бүтцийн талаар товчхон

Хэрэв бид хэлний үйл ажиллагаа, бүтцийн талаар ерөнхийд нь ярих юм бол түүний командууд нь процессорын тушаалуудтай бүрэн нийцэж байгаа гэдгийг баттай хэлж чадна. Өөрөөр хэлбэл ассемблер нь хүн бичихэд хамгийн тохиромжтой мнемоник кодуудыг ашигладаг.

Бусад програмчлалын хэлээс ялгаатай нь Assembler нь санах ойн нүдийг бичихдээ хаягийн оронд тусгай шошго ашигладаг. Тэдгээрийг кодын гүйцэтгэх процессын хамт удирдамж гэж нэрлэгддэг зүйл рүү хөрвүүлдэг. Эдгээр нь процессорын үйл ажиллагаанд нөлөөлдөггүй харьцангуй хаягууд (тэдгээрийг машин хэл рүү хөрвүүлээгүй), гэхдээ програмчлалын орчин өөрөө танихад шаардлагатай байдаг.

Процессорын мөр бүр өөрийн гэсэн онцлогтой. Энэ тохиолдолд аливаа процесс, түүний дотор орчуулагдсан процесс зөв байх болно.

Ассемблей хэл нь хэд хэдэн синтакстай байдаг бөгөөд үүнийг нийтлэлд авч үзэх болно.

Хэлний давуу тал

Ассемблер хэлний хамгийн чухал бөгөөд тохиромжтой дасан зохицох зүйл бол процессорын хувьд ямар ч програм бичихэд ашиглаж болох бөгөөд энэ нь маш авсаархан байх болно. Хэрэв код нь асар том бол зарим процессыг дахин чиглүүлдэг RAM. Үүний зэрэгцээ, мэдээжийн хэрэг мэргэшсэн програмист хяналтгүй бол тэд бүгд маш хурдан бөгөөд алдаагүй ажилладаг.

Драйвер, үйлдлийн систем, BIOS, хөрвүүлэгч, орчуулагч гэх мэт бүгд ассемблер хэлний программ юм.

Машинаас машин руу хөрвүүлдэг дизассемблерийг ашиглахдаа энэ эсвэл тэр системийн даалгавар хэрхэн ажилладаг талаар ямар ч тайлбар байхгүй байсан ч хялбархан ойлгож чадна. Гэсэн хэдий ч, энэ нь зөвхөн програмууд нь хөнгөн тохиолдолд л боломжтой юм. Харамсалтай нь энгийн бус кодуудыг ойлгоход хэцүү байдаг.

Хэлний сул тал

Харамсалтай нь шинэхэн програмистуудад (мөн ихэвчлэн мэргэжлийн хүмүүст) хэлийг ойлгоход хэцүү байдаг. Ассемблер шаарддаг Дэлгэрэнгүй тодорхойлолтшаардлагатай тушаал. Машины зааврыг ашиглах шаардлагатай байгаа тул алдаатай үйлдэл хийх магадлал, гүйцэтгэлийн нарийн төвөгтэй байдал нэмэгддэг.

Хамгийн ихийг ч бичихийн тулд энгийн програм, програмист нь мэргэшсэн байх ёстой бөгөөд түүний мэдлэгийн түвшин хангалттай өндөр байна. Дундаж мэргэжилтэн харамсалтай нь ихэвчлэн муу код бичдэг.

Хэрэв програмыг үүсгэж байгаа платформ шинэчлэгдсэн бол бүх тушаалуудыг гараар дахин бичих шаардлагатай - энэ нь хэл өөрөө шаарддаг. Ассемблер нь процессын эрүүл мэндийг автоматаар зохицуулах, аливаа элементийг солих функцийг дэмждэггүй.

Хэлний командууд

Дээр дурдсанчлан процессор бүр өөрийн гэсэн заавартай байдаг. Ямар ч төрлөөр хүлээн зөвшөөрөгдсөн хамгийн энгийн элементүүд нь дараах кодууд юм.


Удирдамжийг ашиглах

Хамгийн доод түвшний микроконтроллеруудыг хэлээр програмчлах (Assembler үүнийг зөвшөөрдөг бөгөөд маш сайн ажилладаг) ихэнх тохиолдолд амжилттай дуусдаг. Хязгаарлагдмал нөөцтэй процессоруудыг ашиглах нь хамгийн сайн арга юм. 32 битийн технологийн хувьд өгөгдсөн хэлгайхалтай таарч байна. Та ихэвчлэн кодын удирдамжийг харж болно. Энэ юу вэ? Тэгээд юунд ашигладаг вэ?

Эхлэхийн тулд зааврыг машины хэл рүү орчуулдаггүй гэдгийг онцлон тэмдэглэх нь зүйтэй. Тэд хөрвүүлэгч хэрхэн ажиллахыг удирддаг. Командуудаас ялгаатай нь эдгээр параметрүүд нь байдаг янз бүрийн функцууд, өөр өөр процессороос биш өөр орчуулагчаас шалтгаалж ялгаатай. Үндсэн зааварт дараахь зүйлс орно.


нэрний гарал үүсэл

Хэлний нэр - "Ассемблер" гэж юу вэ? Бид өгөгдлийг шифрлэдэг орчуулагч, хөрвүүлэгчийн тухай ярьж байна. Англи хэлнээс Assembler гэдэг нь ассемблерээс өөр зүйл биш гэсэн үг. Програмыг гараар эмхэтгээгүй, автомат бүтэц ашигласан. Түүнээс гадна, одоогоор хэрэглэгчид болон мэргэжилтнүүд нэр томъёоны ялгааг аль хэдийн арилгасан байна. Ассемблерыг ихэвчлэн програмчлалын хэл гэж нэрлэдэг боловч энэ нь зүгээр л хэрэглүүр юм.

Нийтээр хүлээн зөвшөөрөгдсөн хамтын нэрийн улмаас зарим хүмүүс нэг доод түвшний хэл (эсвэл түүнд зориулсан стандарт хэм хэмжээ) байдаг гэсэн алдаатай таамаглалтай байдаг. Ингэснээр програмист ямар бүтэцтэй болохыг ойлгох болно асуултанд нь, энэ эсвэл энэ ассемблер хэлийг аль платформд ашиглахыг зааж өгөх шаардлагатай.

макро хэрэгслүүд

Харьцангуй саяхан гарч ирсэн ассемблер хэлүүд макро байгууламжтай. Тэд програм бичих, ажиллуулахад хялбар болгодог. Тэдний байгаа байдлаас шалтгаалан орчуулагч бичсэн кодыг хэд дахин хурдан гүйцэтгэдэг. Нөхцөлт сонголт үүсгэх үед та асар том блок команд бичиж болно, гэхдээ макро ашиглах нь илүү хялбар байдаг. Эдгээр нь нөхцөл хангагдсан эсвэл хангагдаагүй тохиолдолд үйлдлүүдийн хооронд хурдан шилжих боломжийг танд олгоно.

Макро хэлний удирдамжийг ашиглах үед программист Ассемблерийн макро хүлээн авдаг. Заримдаа үүнийг өргөнөөр ашиглаж болно, заримдаа түүний функциональ шинж чанарууднэг баг хүртэл. Код дотор байгаа нь түүнтэй ажиллахад хялбар болгож, илүү ойлгомжтой, харагдахуйц болгодог. Гэсэн хэдий ч та болгоомжтой байх хэрэгтэй - зарим тохиолдолд макро нь эсрэгээрээ нөхцөл байдлыг улам дордуулдаг.

Оршил.

Анхны программ бичигдсэн хэлийг нэрлэнэ оролтхэл, түүнийг процессор гүйцэтгэхээр орчуулсан хэл - амралтын өдөрхэл. Оролтын хэлийг гаралтын хэл рүү хөрвүүлэх үйл явцыг гэнэ нэвтрүүлэг.Процессорууд нь программчлалд ашиглагддаггүй хоёртын машин хэлээр программуудыг гүйцэтгэх чадвартай тул бүх эх программыг орчуулах шаардлагатай. мэдэгдэж байна хоёр арга заморчуулга: эмхэтгэл, тайлбар.

At эмхэтгэлэх программыг эхлээд зорилтот хэл дээрх дүйцэхүйц программ болгон бүрэн хөрвүүлдэг обьектпрограмыг суулгаад дараа нь гүйцэтгэнэ. Энэ процессыг тусгай хэрэгсэл ашиглан гүйцэтгэдэг хөтөлбөрүүд,дуудсан хөрвүүлэгч.Оролтын хэл нь хоёртын кодын машины (гаралтын) хэлний бэлгэдлийн дүрслэл болох хөрвүүлэгчийг гэнэ. угсрагч.

At тайлбаруудэх программын текстийн мөр бүрийг задлан шинжилж (тайлбарласан) түүнд заасан тушаалыг шууд гүйцэтгэнэ. Энэ аргын хэрэгжилт нь оршино орчуулагч програм.Тайлбар хийхэд удаан хугацаа шаардагддаг. Үр ашгийг нэмэгдүүлэхийн тулд орчуулагч мөр бүрийг боловсруулахын оронд бүгдийг нь урьдчилан хөрвүүлдэг тушаалтэмдэгтүүдийн мөр (

). Үүсгэсэн тэмдэгтүүдийн дараалал нь анхны программд өгөгдсөн функцуудыг гүйцэтгэхэд ашиглагддаг.

Доор авч үзсэн ассемблер хэлийг эмхэтгэл ашиглан хэрэгжүүлдэг.

Хэлний онцлог.

Ассемблерийн үндсэн шинж чанарууд:

● хоёртын кодын оронд хэл нь бэлгэдлийн нэрийг ашигладаг - мнемоник.Жишээлбэл, нэмэх командын хувьд (

) мнемоник ашигладаг

Хасах (

үржүүлэх (

Хэсэгүүд (

гэх мэт. Мөн санах ойн нүдийг хаяглахад бэлгэдлийн нэрийг ашигладаг. Хоёртын код, хаягийн оронд ассемблер хэлээр програмчлахын тулд ассемблерийн орчуулдаг симбол нэрсийг л мэдэх хэрэгтэй. хоёртын кодууд;

мэдэгдэл бүр тохирч байна нэг машины команд(код), өөрөөр хэлбэл ассемблер хэлний программ дахь машины заавар ба операторуудын хооронд нэг нэгээр нь захидал харилцаа байдаг;

● хэл нь хандах боломжийг олгодог бүх объект рууба багууд. Хэлнүүд өндөр түвшинтийм чадвар байхгүй. Жишээлбэл, ассемблер хэл нь туг бүртгэлийн бит болон өндөр түвшний хэлийг шалгах боломжийг олгодог (жишээлбэл,

) ийм боломж байхгүй. Системийн програмчлалын хэлүүд (жишээлбэл, C) ихэвчлэн завсрын байр суурийг эзэлдэг гэдгийг анхаарна уу. Хүртээмжтэй байдлын хувьд тэд ассемблер хэлтэй ойр боловч дээд түвшний хэлний синтакстай;

● ассемблер хэл бүх нийтийн хэл биш.Микропроцессорын тодорхой бүлэг бүр өөрийн ассемблертэй байдаг. Өндөр түвшний хэлүүдэд ийм сул тал байдаггүй.

Дээд түвшний хэлнээс ялгаатай нь ассемблер хэлний программ бичих, дибаг хийх нь маш их цаг зарцуулдаг. Гэсэн хэдий ч ассемблер хэл болжээ өргөн хэрэглээдараах нөхцөл байдлын улмаас:

● Ассемблер хэл дээр бичигдсэн програм нь чухал ач холбогдолтой жижиг хэмжээтэйбөгөөд өндөр түвшний хэл дээр бичигдсэн программаас хамаагүй хурдан юм. Зарим хэрэглээний хувьд эдгээр үзүүлэлтүүд нь үндсэн үүрэг гүйцэтгэдэг, жишээлбэл, олон системийн програмууд (үүнд эмхэтгэгчид), зээлийн карт, гар утас, төхөөрөмжийн драйверууд гэх мэт програмууд;

● Зарим процедур нь техник хангамжид бүрэн хандахыг шаарддаг бөгөөд энэ нь ихэвчлэн өндөр түвшний хэл дээр боломжгүй байдаг. Энэ тохиолдолд тасалдал болон тасалдлыг зохицуулагч орно үйлдлийн системүүд, түүнчлэн бодит цаг хугацаанд ажилладаг суулгагдсан систем дэх төхөөрөмжийн хянагч.

Ихэнх программуудад нийт кодын багахан хувь нь программын гүйцэтгэлийн ихэнх хувийг хариуцдаг. Ерөнхийдөө програмын 1% нь гүйцэтгэлийн 50%, 10% нь гүйцэтгэлийн 90% -ийг хариуцдаг. Тиймээс бичих тодорхой хөтөлбөрбодит нөхцөлд ассемблер болон өндөр түвшний хэлнүүдийн аль нэгийг ашигладаг.

Ассемблер хэл дээрх операторын формат.

Ассемблер хэлний программ нь командын жагсаалт (мэйл, өгүүлбэр) бөгөөд тус бүр нь тусдаа мөрийг эзэлдэг бөгөөд шошгоны талбар, үйлдлийн талбар, операндын талбар, тайлбарын талбар гэсэн дөрвөн талбараас бүрдэнэ. Талбар бүр тусдаа баганатай.

Шошгоны талбар.

1-р багана нь шошгоны талбарт зориулагдсан. Шошго нь бэлгэдлийн нэр буюу танигч, хаягуудсанах ой. Үүнийг хийхийн тулд дараахь зүйлийг хийх шаардлагатай.

● команд руу нөхцөлт буюу болзолгүй шилжилт хийх;

● өгөгдөл хадгалагдаж буй газар руу нэвтрэх.

Ийм мэдэгдлүүд шошготой байдаг. Нэрийг тодорхойлохын тулд англи цагаан толгойн (том) үсэг, тоонуудыг ашигладаг. Нэр нь үсгээр эхэлж, хоёр цэгээр төгсөх ёстой. Хоёр цэгийн шошгыг тусдаа мөрөнд бичиж болох ба opcode-ийг 2-р баганын дараагийн мөрөнд бичиж болох нь хөрвүүлэгчийн ажлыг хөнгөвчилдөг. Хоёр цэг байхгүй нь шошго болон үйлдлийн кодыг тусдаа мөрөнд байгаа бол ялгах боломжгүй болгодог.

Ассемблер хэлний зарим хувилбаруудад өгөгдлийн шошгоны дараа биш зөвхөн зааврын шошгоны дараа хоёр цэг тавьдаг бөгөөд шошгоны уртыг 6 эсвэл 8 тэмдэгтээр хязгаарлаж болно.

Шошго нь тушаалын хаягтай холбоотой тул шошгоны талбарт ижил нэр байх ёсгүй. Хэрэв програмыг ажиллуулах явцад санах ойноос тушаал эсвэл өгөгдөл дуудах шаардлагагүй бол шошгоны талбар хоосон хэвээр байна.

Гүйлгээний кодын талбар.

Энэ талбар нь mnemonic эсвэл псевдо-командыг агуулдаг (доороос харна уу). Командын мнемоник кодыг хэлний зохион бүтээгчид сонгодог. Ассемблер хэлээр

регистрийг санах ойноос ачаалахаар сонгосон мнемоник

), мөн бүртгэлийн агуулгыг санах ойд хадгалахын тулд - мнемоник

). Ассемблер хэл дээр

Та хоёр үйлдэлд ижил нэрийг ашиглаж болно

Хэрэв санах ойн нэрийг дур зоргоороо сонгох боломжтой бол хоёр машины зааврыг ашиглах хэрэгцээ нь процессорын архитектуртай холбоотой юм.

Бүртгүүлэх мнемоник нь ассемблерийн хувилбараас хамаарна (Хүснэгт 5.2.1).

Операнд талбар.

Энд байрладаг Нэмэлт мэдээлэлүйл ажиллагааг гүйцэтгэхэд шаардлагатай. Үсрэх командын операндуудын талбарт таны үсрэхийг хүссэн хаяг, мөн машины командын операнд болох хаяг, регистрүүдийг зааж өгсөн болно. Жишээлбэл, 8 битийн процессоруудад ашиглаж болох операндуудыг энд оруулав

● тоон өгөгдөл,

онд танилцуулсан янз бүрийн системүүдтооцоо. Тооны системийг ашиглахын тулд тогтмолын араас латин үсгүүдийн аль нэгийг бичнэ: B,

Үүний дагуу хоёртын, наймтын, арван зургаатын, аравтын тооллын систем (

бүртгэхгүй байж болно). 16-тын тооны эхний орон нь A, B, C бол,

Дараа нь урд талд нь ач холбогдолгүй 0 (тэг) нэмнэ;

● микропроцессорын дотоод регистр ба санах ойн эсийн кодууд

M (мэдээллийн эх сурвалж эсвэл хүлээн авагч) A, B, C үсэг хэлбэрээр,

Ямар ч тооны систем дэх M эсвэл тэдгээрийн хаягууд (жишээлбэл, 10V - бүртгэлийн хаяг

хоёртын системд);

● танигч,

бүртгэгдсэн хос нисэх онгоцны хувьд,

Эхний үсэг Б

H; хос аккумлятор ба функцийн бүртгэлийн хувьд -

; програмын тоолуурын хувьд -

; стек заагчийн хувьд -

● операндуудын хаягийг заасан шошго эсвэл нөхцөлт дараагийн зааварчилгаа

(нөхцөл хангагдсан үед) ба болзолгүй шилжилтүүд.Жишээлбэл, команд дахь M1 ​​операнд

шошгоны талбарт хаягийг M1 танигчаар тэмдэглэсэн тушаалд болзолгүйгээр шилжих хэрэгцээг хэлнэ;

● илэрхийлэл,

Эдгээр нь арифметик болон логик операторуудыг ашиглан дээр дурдсан өгөгдлийг холбох замаар бүтээгдсэн. Өгөгдлийн зайг хэрхэн яаж нөөцлөх нь тухайн хэлний хувилбараас хамаарна гэдгийг анхаарна уу. Ассемблей хэл хөгжүүлэгчид

Тодорхойлолт үг), дараа нь танилцуулсан Альтернатив сонголт.

Энэ нь анхнаасаа процессоруудын хэл дээр байсан

Хэлний хувилбар дээр

ашигласан

тогтмолыг тодорхойлох).

Процессорууд өөр өөр урттай операндуудыг боловсруулдаг. Үүнийг тодорхойлохын тулд ассемблер хөгжүүлэгчид өөр өөр шийдвэр гаргасан, жишээлбэл:

Янз бүрийн урттай II регистрүүд өөр өөр нэртэй байдаг: EAX - 32 битийн операндуудыг байрлуулахад зориулагдсан (төрөл)

); AX - 16 битийн хувьд (төрөл

ба AN - 8 битийн хувьд (төрөл

● процессоруудад зориулсан

opcode бүрт дагавар нэмэгдэнэ: дагавар

Төрөл бүрийн хувьд

; төрөлд ".B" дагавар залгана

өөр өөр урттай операндуудын хувьд өөр өөр опкодуудыг ашигладаг, жишээлбэл, байт, хагас үг (

) болон 64 битийн регистр дэх үгс нь опкодыг ашигладаг

тус тус.

Сэтгэгдлийн талбар.

Энэ талбар нь хөтөлбөрийн үйл ажиллагааны талаархи тайлбарыг өгдөг. Сэтгэгдэл нь програмын үйл ажиллагаанд нөлөөлөхгүй бөгөөд тухайн хүнд зориулагдсан болно. Тэд ийм тайлбаргүйгээр туршлагатай програмистуудад ч бүрэн ойлгомжгүй байж болох програмыг өөрчлөхөд шаардлагатай байж магадгүй юм. Тайлбар нь тэмдэгтээс эхэлдэг бөгөөд програмыг тайлбарлах, баримтжуулахад ашиглагддаг. Сэтгэгдлийн эхлэлийн тэмдэгт нь дараахь байж болно.

● компанийн процессоруудад зориулсан хэлээр цэг таслал (;).

Анхаарлын тэмдэг(!) хэлээр

Сэтгэгдэл бичихэд зориулагдсан тусдаа мөр бүрийн өмнө эхлэл тэмдэгт байна.

Псевдо командууд (заавар).

Ассемблер хэл дээр хоёр үндсэн төрлийн командыг ялгаж болно.

үндсэнпроцессорын машины кодтой дүйцэх заавар. Эдгээр командууд нь програмын өгсөн бүх боловсруулалтыг гүйцэтгэдэг;

псевдо-командуудэсвэл заавар,программыг кодын хослолын хэл рүү хөрвүүлэх үйл явцад үйлчлэх зорилготой. Жишээ нь, Хүснэгтэнд. 5.2.2 нь ассемблерийн зарим псевдо командуудыг харуулж байна

гэр бүлийн хувьд

.

Програмчлалын үед алгоритмын дагуу нэг тушаалын гинж олон удаа давтагдах нөхцөл байдал байдаг. Энэ нөхцөл байдлаас гарахын тулд та дараахь зүйлийг хийх боломжтой.

● Хүссэн тушаалуудын дарааллыг тохиолдох бүрт бичнэ үү. Энэ арга нь хөтөлбөрийн хэмжээг нэмэгдүүлэхэд хүргэдэг;

● энэ дарааллыг процедур (дэд програм) болгон зохион байгуулж, шаардлагатай бол дуудна. Ийм гарц нь сул талуудтай: та тусгай процедурын дуудлагын заавар, буцах зааварыг гүйцэтгэх бүртээ богино бөгөөд байнга хэрэглэгддэг дарааллаар програмын хурдыг ихээхэн бууруулдаг.

Хамгийн энгийн ба үр дүнтэй аргатушаалын гинжин хэлхээг дахин давтах нь ашиглах явдал юм макро,Энэ нь программд байнга тааралддаг бүлэг командуудыг дахин орчуулахад зориулагдсан псевдо команд гэж үзэж болно.

Макро буюу макро заавар нь макро тодорхойлолт, макро хувиргах, макро өргөтгөл гэсэн гурван зүйлээр тодорхойлогддог.

макро тодорхойлолт

Энэ нь програмын текст дэх лавлагаанд ашиглагддаг програмын командуудын олон дахин давтагдах дарааллын тэмдэглэгээ юм.

Макро нь дараах бүтэцтэй.

Илэрхийллийн жагсаалт; макро тодорхойлолт

Дээрх макро тодорхойлолтын бүтцэд гурван хэсэг байдаг:

● толгой хэсэг

нэрийг агуулсан макро

Псевдокоманд

ба параметрийн багц;

● тасархай биемакро;

● баг

төгсөлт

макро тодорхойлолтууд.

Макро параметрийн багц нь сонгосон зааврын бүлгийн операнд талбарт өгөгдсөн бүх параметрүүдийн жагсаалтыг агуулна. Хэрэв эдгээр параметрүүдийг програмын өмнө өгсөн бол тэдгээрийг макро тодорхойлолтын толгой хэсэгт орхиж болно.

Сонгосон бүлгийн зааврыг дахин угсрахдаа нэрээс бүрдсэн дуудлагыг ашиглана

макро болон бусад утгуудын хамт параметрийн жагсаалт.

Ассемблер эмхэтгэлийн явцад макро тодорхойлолттой тулгарах үед үүнийг макро тодорхойлолтын хүснэгтэд хадгалдаг. Нэрийн хөтөлбөрт дараагийн гарч ирснээр (

) макроны хувьд ассемблер үүнийг макрогийн их биеээр солино.

Макро нэрийг opcode болгон ашиглахыг нэрлэдэг макро урвуу(макро дуудлага) ба түүнийг макро биетээр солих - макро өргөтгөл.

Хэрэв програмыг тэмдэгтүүдийн дараалал (үсэг, тоо, хоосон зай, цэг таслал, тэрэг буцах) хэлбэрээр төлөөлвөл шинэ мөр), дараа нь макро тэлэлт нь энэ дарааллын зарим гинжийг бусад гинжээр солихоос бүрдэнэ.

Макро өргөтгөл нь програмыг гүйцэтгэх явцад биш угсрах явцад тохиолддог. Тэмдэгтүүдийн мөрийг удирдах арга замыг зааж өгсөн макро хэрэгслүүд.

Угсрах үйл явц явагдаж байна хоёр дамжлагад:

● Эхний дамжуулалт дээр бүх макро тодорхойлолтууд хадгалагдаж, макро дуудлагууд өргөжинө. Энэ тохиолдолд эх программыг уншиж, бүх макро тодорхойлолтыг устгасан програм болгон хувиргаж, макро дуудлага бүрийг макро биетээр солино;

● Хоёр дахь дамжуулалт нь хүлээн авсан програмыг макрогүйгээр боловсруулдаг.

Параметр бүхий макронууд.

Параметрүүд нь өөр өөр утгыг авах боломжтой давтагдах тушаалуудын дараалалтай ажиллахын тулд макро тодорхойлолтуудыг өгсөн болно.

● хамт бодитмакро дуудлагын операнд талбарт байрлуулсан параметрүүд;

● хамт албан ёсныпараметрүүд. Макро өргөтгөлийн үед макроны үндсэн хэсэгт гарч ирэх албан ёсны параметр бүрийг харгалзах бодит параметрээр солино.

параметр бүхий макро ашиглах.

Програм 1 нь ижил төстэй хоёр тушаалын дарааллыг харуулсан бөгөөд тэдгээрийн эхнийх нь P ба хоёрыг сольдогоороо ялгаатай.

Мөн хоёр дахь нь

Програм 2 нь P1 ба P2 хоёр албан ёсны параметр бүхий макро агуулдаг. Макро өргөтгөлийн үед макро биеийн доторх P1 тэмдэгт бүрийг эхний бодит параметрээр (P,

), P2 тэмдэг нь хоёр дахь бодит параметрээр солигдоно (

) програмын дугаараас 1. Макро дуудлагад

програм 2 тэмдэглэгдсэн байна: P,

Эхний бодит параметр,

Хоёр дахь бодит параметр.

Хөтөлбөр 1

Хөтөлбөр 2

MOV EBX,Q MOV EAX,Pl

MOV Q,EAX MOV EBX,P2

MOV P,EBX MOV P2,EAX

Өргөтгөсөн боломжууд.

Хэлний зарим дэвшилтэт шинж чанаруудыг авч үзье

Нөхцөлт салбар заавар болон үсрэх шошгыг агуулсан макро хоёр ба түүнээс дээш удаа дуудвал шошго давхардах (шошгоны давхардлын асуудал) алдаа гарна. Тиймээс дуудлага бүрийг (программист) параметр болгон тусдаа шошготой болгодог. Хэлээр

шошгыг орон нутгийн гэж зарласан (

) болон дэвшилтэт боломжуудын ачаар макро өргөтгөх бүрт ассемблер автоматаар өөр шошго үүсгэдэг.

бусад макро доторх макро тодорхойлох боломжийг танд олгоно. Энэхүү дэвшилтэт функц нь нөхцөлт програмын холболттой хослуулсан тохиолдолд маш их хэрэгтэй байдаг. Санаж үз

IF WORDSIZE GT 16 М2 МАКРО

Макро М2-ийг мэдэгдлийн хоёр хэсэгт тодорхойлж болно

Гэсэн хэдий ч тодорхойлолт нь уг программыг 16 бит эсвэл 32 битийн процессор дээр угсарч байгаа эсэхээс хамаарна. Хэрэв M1 дуудагдахгүй бол M2 макро огт тодорхойлогдоогүй болно.

Өөр нэг дэвшилтэт онцлог нь макро бусад макро, түүний дотор өөрсдийгөө дуудаж болно. рекурсивзалгах. Сүүлчийн тохиолдолд хязгааргүй давталтаас зайлсхийхийн тулд макро нь өргөтгөл бүрээр өөрчлөгддөг параметрийг өөртөө дамжуулах ёстой. шалгахэнэ параметр ба параметр нь тодорхой утгад хүрэх үед рекурсийг дуусгана.

Ассемблерт макро ашиглах тухай.

Макро ашиглах үед ассемблер нь хоёр функцийг гүйцэтгэх чадвартай байх ёстой. макро тодорхойлолтыг хадгалахболон макро дуудлагыг өргөжүүлэх.

Макро тодорхойлолтыг хадгалах.

Бүх макро нэрийг хүснэгтэд хадгална. Нэр бүрийг харгалзах макро руу заагч дагалддаг тул шаардлагатай бол дуудаж болно. Зарим ассемблерууд нь макро нэрсийн тусдаа хүснэгттэй байдаг бол зарим нь макро нэрстэй хамт машины бүх команд, удирдамжийг агуулсан нийтлэг хүснэгттэй байдаг.

Угсрах явцад макротой тулгарах үед үүсгэсэн:

шинэ элементширээмакроны нэр, параметрийн тоо, макро биеийг хадгалах өөр макро тодорхойлолтын хүснэгтийн заагчтай;

● жагсаалт албан ёсныпараметрүүд.

Зүгээр л тэмдэгтүүдийн мөр болох макроны үндсэн хэсгийг уншиж, макро тодорхойлолтын хүснэгтэд хадгална. Гогцооны биед тохиолдох албан ёсны параметрүүдийг тэмдэглэв онцгой дүр.

Макрогийн дотоод төлөөлөл

2-р програмын дээрх жишээнээс (х. 244) дараах байдалтай байна.

MOV EAX, MOV EBX, MOV MOV &

Энд цэг таслалыг тэрэгний буцах тэмдэгт, & тэмдэгтийг албан ёсны параметрийн тэмдэг болгон ашигладаг.

Макро дуудлагын өргөтгөл.

Угсрах явцад макро тодорхойлолт тааралдвал макро хүснэгтэд хадгалагдана. Макро дуудах үед ассемблер оролтын төхөөрөмжөөс оролтын өгөгдлийг уншихыг түр зогсоож, хадгалсан макро биеийг уншиж эхэлдэг. Макро биетээс гаргаж авсан албан ёсны параметрүүдийг бодит параметрүүдээр сольж, дуудлагаар өгдөг. Параметрүүдийн урд & тэмдэг нь ассемблерт тэдгээрийг таних боломжийг олгодог.

Хэдийгээр ассемблерийн олон хувилбарууд байдаг ч угсралтын процессууд нийтлэг шинж чанартай бөгөөд олон талаараа төстэй байдаг. Хоёр дамжлагатай ассемблерийн ажлыг доор авч үзнэ.

Хоёр дамжлагатай угсрагч.

Хөтөлбөр нь хэд хэдэн мэдэгдлээс бүрдэнэ. Тиймээс угсралтын явцад дараахь дарааллыг ашиглаж болно.

● үүнийг машины хэл рүү хөрвүүлэх;

● хүлээн авсан машины кодыг файл руу, жагсаалтын харгалзах хэсгийг өөр файл руу шилжүүлэх;

● Хөтөлбөрийг бүхэлд нь цацах хүртэл дээрх процедурыг давтана.

Гэсэн хэдий ч энэ арга нь үр дүнтэй биш юм. Жишээ нь асуудал гэж нэрлэгддэг асуудал юм тэргүүлэх холбоос.Хэрэв эхний өгүүлбэр нь програмын төгсгөлд байгаа P хэллэг рүү үсрэх юм бол ассемблер үүнийг орчуулж чадахгүй. Тэр эхлээд P операторын хаягийг тодорхойлох ёстой бөгөөд үүний тулд програмыг бүхэлд нь унших шаардлагатай. Анхны програмыг бүрэн унших бүрийг дууддаг гарц.Хоёр дамжуулалтыг ашиглан урагшлах лавлагааны асуудлыг хэрхэн шийдэж болохыг харуулъя:

эхний дамжуулалт дээр цуглуулахмөн бүх тэмдэгтийн тодорхойлолтыг (шошго зэргийг оруулаад) хүснэгтэд хадгалж, хоёр дахь дамжуулалт дээр оператор бүрийг уншиж, угсарна. Энэ арга нь харьцангуй энгийн боловч анхны програмаар дамжуулан хоёр дахь удаагаа нэвтрүүлэхэд нэмэлт оролт гаралтын хугацаа шаардагдана;

● эхний дамжуулалт дээр, хөрвүүлэхпрограмыг завсрын хэлбэрт оруулж, хүснэгтэд хадгалах ба хоёр дахь дамжуулалтыг анхны програмын дагуу биш, харин хүснэгтийн дагуу гүйцэтгэнэ. Хоёрдахь дамжуулалт дээр оролт гаралтын үйлдэл хийгддэггүй тул угсрах энэ арга нь цаг хэмнэдэг.

Эхний дамжуулалт.

Эхний дамжуулалтын зорилго- тэмдгийн хүснэгтийг бүтээх. Дээр дурдсанчлан, эхний дамжуулалтын өөр нэг зорилго бол бүх макро тодорхойлолтыг хадгалах, дуудлагыг харагдах байдлаар нь өргөжүүлэх явдал юм. Тиймээс тэмдэгтийн тодорхойлолт болон макро өргөтгөл хоёулаа нэг дамжуулалтад тохиолддог. Энэ тэмдэг нь аль аль нь байж болно шошго,эсвэл утга,-you удирдамжийг ашиглан тодорхой нэр өгсөн:

;Утга - буферийн хэмжээ

Ассемблер нь зааврын шошгон дээрх бэлгэдлийн нэрсийн утгыг өгснөөр үндсэндээ программыг гүйцэтгэх явцад заавар бүр байх хаягуудыг тохируулдаг. Үүнийг хийхийн тулд угсралтын явцад ассемблер хадгалдаг заавар хаягийн тоолуур(

) тусгай хувьсагч болгон. Эхний дамжуулалтын эхэнд тусгай хувьсагчийн утгыг 0 болгож, тухайн командын уртаар боловсруулсан команд бүрийн дараа нэмэгдэнэ. Жишээ нь, Хүснэгтэнд. 5.2.3-т командын урт ба тоолуурын утгыг харуулсан програмын фрагментийг харуулав. Эхний дамжуулалтын явцад хүснэгтүүд үүсдэг тэмдэг нэр, зааварболон үйлдлийн кодууд,шаардлагатай бол шууд утгаарширээ. Литерал гэдэг нь ассемблер санах ойг автоматаар нөөцлөх тогтмол утга юм. Орчин үеийн процессорууд нь шууд хаягтай зааврыг агуулдаг тул тэдгээрийн ассемблер нь шууд утгыг дэмждэггүй гэдгийг бид даруй тэмдэглэж байна.

Тэмдгийн хүснэгт

нэр бүрт нэг элемент агуулна (Хүснэгт 5.2.4). Тэмдгийн хүснэгтийн элемент бүр нь нэр (эсвэл түүнд заагч), түүний тоон утга, заримдаа нэмэлт мэдээллийг агуулдаг бөгөөд үүнд:

● тэмдэгтэй холбоотой мэдээллийн талбарын урт;

● санах ойг дахин тохируулах битүүд (хэрэв уг программыг ассемблерийн төлөвлөснөөс өөр хаягаар ачаалвал тэмдэгтийн утга өөрчлөгдөх эсэхийг харуулдаг);

● тэмдэгтэд процедурын гаднаас хандах боломжтой эсэх тухай мэдээлэл.

Симбол нэр нь шошго юм. Тэдгээрийг оператор ашиглан тодорхойлж болно (жишээлбэл,

Захирамжийн хүснэгт.

Энэ хүснэгтэд програмыг угсрах үед гарах бүх удирдамж буюу псевдо командуудыг жагсаасан болно.

Үйлдлийн кодын хүснэгт.

Үйлдлийн код бүрийн хувьд хүснэгт нь тусдаа баганатай байна: үйлдлийн кодын тэмдэглэгээ, операнд 1, операнд 2, опкодын арван зургаатын тоо, зааврын урт, зааварчилгааны төрөл (Хүснэгт 5.2.5). Үйлдлийн кодыг операндуудын тоо, төрлөөс хамааран бүлэгт хуваадаг. Тушаалын төрөл нь бүлгийн дугаарыг тодорхойлж, тухайн бүлгийн бүх командыг боловсруулахад дуудагдах процедурыг зааж өгдөг.

Хоёр дахь дамжуулалт.

Хоёр дахь дамжуулалтын зорилго- объектын програм үүсгэх, шаардлагатай бол угсралтын протоколыг хэвлэх; Өөр өөр цаг үед угсарсан процедуруудыг нэг гүйцэтгэгдэх файл болгон холбохын тулд холбогчдод шаардлагатай гаралтын мэдээлэл.

Хоёрдахь дамжуулалтад (эхнийх шиг) мэдэгдлүүдийг агуулсан мөрүүдийг дараалан уншиж, боловсруулдаг. Анхны оператор ба түүнээс аравтын тоогоор гаргаж авсан гаралт обьекткодыг хэвлэх эсвэл дараа нь хэвлэхийн тулд буфер хийж болно. Командын хаягийн тоолуурыг дахин тохируулсны дараа дараагийн мэдэгдлийг дуудна.

Анхны програм нь алдаа агуулж болно, жишээлбэл:

өгөгдсөн тэмдэг нь нэгээс олон удаа тодорхойлогдоогүй буюу тодорхойлогдоогүй;

● Опкод нь буруу нэрээр (үсгийн алдааны улмаас), хангалттай операндоор хангагдаагүй эсвэл хэт олон операндтай;

● оператор байхгүй

Зарим ассемблерууд тодорхойгүй тэмдэгтийг илрүүлж, түүнийг сольж болно. Гэсэн хэдий ч ихэнх тохиолдолд алдаатай мэдэгдэл олдох үед ассемблер дэлгэц дээр алдааны мэдэгдлийг харуулж, угсрах процессыг үргэлжлүүлэхийг оролддог.

Ассемблер хэлэнд зориулсан нийтлэлүүд.

Ассемблер хэлний тухай ерөнхий мэдээлэл

Симболын ассемблер хэл нь машины хэлний програмчлалын дутагдлыг арилгах боломжийг олгодог.

Үүний гол давуу тал нь ассемблер хэл дээр програмын бүх элементүүдийг симбол хэлбэрээр дүрсэлсэн байдаг. Симбол командын нэрийг хоёртын код болгон хувиргах нь хариуцах үүрэгтэй тусгай хөтөлбөр- Ассемблер нь програмистыг хүнд хөдөлмөрөөс чөлөөлж, зайлшгүй алдааг арилгадаг.

Ассемблер хэлээр програмчлахдаа нэвтрүүлсэн бэлгэдлийн нэрс нь дүрмээр бол програмын семантик, командын товчлолыг тусгадаг - тэдгээрийн үндсэн үүрэг. Жишээ нь: PARAM - параметр, TABLE - хүснэгт, MASK - маск, ADD - нэмэх, SUB - хасах гэх мэт. n Ийм нэрсийг программист амархан санадаг.

Ассемблер хэлээр програмчлахын тулд машины хэл дээр программчлахаас илүү нарийн төвөгтэй хэрэгслүүдтэй байх шаардлагатай: танд микрокомпьютер дээр суурилсан компьютерийн систем эсвэл багц бүхий компьютер хэрэгтэй. захын төхөөрөмж(үсэг, тоон гар, тэмдэгтийн дэлгэц, уян диск ба принтер), түүнчлэн шаардлагатай төрлийн микропроцессоруудад зориулсан суурин эсвэл хөндлөн програмчлалын системүүд. Ассемблей хэл нь машины хэлнээс (1 - 4 КБ хүртэл) илүү төвөгтэй програмуудыг үр дүнтэй бичих, дибаг хийх боломжийг олгодог.

Ассемблей хэлүүд нь машинд чиглэсэн, өөрөөр хэлбэл микропроцессорын заавар бүрт тодорхой бэлгэдлийн нэр өгдөг тул харгалзах микропроцессорын машины хэл, бүтцээс хамаардаг.

Ассемблей хэл нь програмистуудын бүтээмжийг машины хэлтэй харьцуулахад мэдэгдэхүйц нэмэгдүүлэхийн зэрэгцээ микропроцессорын бүх програм хангамжийн техник хангамжийн нөөцийг ашиглах чадварыг хадгалдаг. Энэ нь чадварлаг програмистуудад өндөр түвшний хэл дээр бичигдсэн программуудаас богино хугацаанд ажиллах, бага санах ой эзэлдэг программ бичих боломжийг олгодог.

Үүнтэй холбогдуулан бараг бүх I / O төхөөрөмжийн хяналтын програмууд (драйверууд) нь нэлээд өргөн хүрээний өндөр түвшний хэлүүд байгаа хэдий ч ассемблер хэл дээр бичигдсэн байдаг.

Ассемблер хэлийг ашиглан программист дараах параметрүүдийг тохируулж болно.

микропроцессорын машины хэлний команд бүрийн мнемоник (тэмдэгт нэр);

ассемблерт тодорхойлсон програмын мөрүүдийн стандарт формат;

тодорхойлох формат янз бүрийн арга замуудхаяглах болон командын сонголтууд;

төрөл бүрийн тооллын систем дэх бүхэл төрлийн тогтмол ба тэмдэгтүүдийг тодорхойлох формат;

програмыг угсрах (орчуулах) үйл явцыг хянадаг псевдо командууд.

Ассемблер хэл дээр програмыг мөр мөрөөр бичдэг, өөрөөр хэлбэл заавар бүрт нэг мөр хуваарилдаг.

Хамгийн түгээмэл төрлийн микропроцессорын үндсэн дээр бүтээгдсэн микрокомпьютеруудын хувьд ассемблер хэлний хэд хэдэн хувилбар байж болох ч нэг нь ихэвчлэн нэг практик түгээлттэй байдаг - энэ нь стандарт ассемблер хэл гэж нэрлэгддэг хэл юм.

Машины зааврын түвшинд програмчлах нь програмчлах боломжтой доод түвшин юм. Машины зааврын систем нь компьютерийн техник хангамжид заавар өгөх замаар шаардлагатай үйлдлүүдийг хэрэгжүүлэхэд хангалттай байх ёстой.

Машины заавар бүр хоёр хэсгээс бүрдэнэ.

үйл ажиллагаа явуулах - "юу хийх" -ийг тодорхойлох;

· операнд - боловсруулах объектуудыг тодорхойлох, "юу хийх вэ".

Ассемблер хэлээр бичигдсэн микропроцессорын машины заавар нь дараах синтакс хэлбэртэй нэг мөр байна.

шошгоны команд/захиргааны операнд(ууд) ; тайлбар

Энэ тохиолдолд мөрөнд заавал байх ёстой талбар нь тушаал эсвэл заавар юм.

Шошго, тушаал/захирамж, операндууд (хэрэв байгаа бол) дор хаяж нэг хоосон зай эсвэл таб тэмдэгтээр тусгаарлагдсан байна.

Хэрэв тушаал эсвэл зааврыг дараагийн мөрөнд үргэлжлүүлэх шаардлагатай бол урвуу зураасыг ашиглана: \.

Анхдагч байдлаар, ассемблер хэл нь тушаал эсвэл удирдамжийн том, жижиг үсгийг ялгадаггүй.

Шууд хаяглалт: Үр дүнтэй хаяг нь 8, 16, 32 бит хэмжээтэй байж болох машины зааврын офсет талбараар шууд тодорхойлогддог.

mov eax, нийлбэр; eax = нийлбэр

Ассемблер нь нийлбэрийг өгөгдлийн сегментэд хадгалагдсан харгалзах хаягаар (анхдагчаар, ds регистрээр хаяглагдсан) орлуулж, sum хаягийн нийлбэр дээр хадгалагдсан утгыг регистрийн eax-д байрлуулдаг.

шууд бус хаяглалтэргээд дараахь төрлүүдтэй.

Шууд бус үндсэн (регистр) хаяглалт;

Шууд бус үндсэн (регистр) хаягжилтыг офсет;

· шууд бус индекс хаяглалт;

· шууд бус суурь индекс хаяглалт.

Шууд бус үндсэн (регистр) хаяглалт.Энэхүү хаяглалтын тусламжтайгаар операндын үр дүнтэй хаяг нь sp / esp ба bp / ebp-ээс бусад ерөнхий зориулалтын аль ч регистрд байж болно (эдгээр нь стек сегменттэй ажиллах тусгай регистрүүд юм). Зааварт синтаксийн хувьд энэ хаяглалтын горимыг регистрийн нэрийг дөрвөлжин хаалтанд оруулах замаар илэрхийлдэг.

mov eax, ; eax = *esi; * esi хаяг дээрх esi утга

Ассемблер хэл дээрх бүтэц

Бидний дээр авч үзсэн массивууд нь ижил төрлийн элементүүдийн цуглуулга юм. Гэхдээ ихэвчлэн програмуудад тодорхой багц өгөгдлийг авч үзэх шаардлагатай байдаг өөр төрөлзарим нэг төрлийн.

Энэ нь жишээлбэл, янз бүрийн төрлийн мэдээллийн цуглуулгыг нэг объекттой холбох шаардлагатай мэдээллийн сангийн програмуудад маш их хамааралтай юм.

Жишээлбэл, бид өмнө нь гурван байт элементийн массивтай ажилладаг Жагсаалт 4-ийг үзсэн. Элемент бүр нь эргээд өөр өөр төрлийн хоёр элемент байсан: нэг байт тоологч талбар ба хадгалах, боловсруулахад шаардлагатай зарим мэдээллийг агуулсан хоёр байт талбар. Хэрэв уншигч өндөр түвшний хэлнүүдийн аль нэгийг мэддэг бол ийм объектыг ихэвчлэн тусгай өгөгдлийн төрлийг ашиглан дүрсэлдэг гэдгийг мэддэг. бүтэц.

Ассемблер хэлний хэрэглээг сайжруулахын тулд энэ төрлийн өгөгдлийн төрлийг мөн нэвтрүүлсэн.

Тодорхойлолтоор бүтэц янз бүрийн төрлийн тогтмол тооны элементүүдээс бүрдэх өгөгдлийн төрөл юм.

Програмд ​​бүтцийг ашиглахын тулд та гурван зүйлийг хийх хэрэгтэй.

    Асуу бүтцийн загвар .

    Үндсэндээ энэ нь шинэ өгөгдлийн төрлийг тодорхойлох гэсэн үг бөгөөд дараа нь энэ төрлийн хувьсагчдыг тодорхойлоход ашиглаж болно.

    Тодорхойлох бүтцийн жишээ .

    Энэ үе шат нь урьдчилан тодорхойлсон (загвар ашиглан) бүтэцтэй тодорхой хувьсагчийг эхлүүлэх явдал юм.

    Зохион байгуулах бүтцийн гишүүдэд хандах .

Энэ нь юугаараа ялгаатай болохыг эхнээс нь ойлгох нь маш чухал юм тайлбархөтөлбөр дэх бүтэц, түүний тодорхойлолт.

дүрслэх програмын бүтэц гэдэг нь зөвхөн түүний схем, хэв маягийг зааж өгөхийг хэлнэ; санах ой хуваарилагдаагүй байна.

Энэ загварыг зөвхөн орчуулагчийн талбаруудын байршил, тэдгээрийн үндсэн утгын талаархи мэдээлэл гэж үзэж болно.

Тодорхойлох бүтэц гэдэг нь орчуулагчийг санах ойг хуваарилж, энэ санах ойн талбарт бэлгэдлийн нэр өгөхийг заах гэсэн үг юм.

Та програмын бүтцийг зөвхөн нэг удаа тодорхойлж, хэдэн ч удаа тодорхойлж болно.

Бүтцийн загварын тайлбар

Бүтцийн загварын мэдэгдэл нь дараах синтакстай байна:

бүтцийн_нэр STRUC

бүтцийн_нэр ENDS

Энд нь өгөгдлийн тайлбарын зааврын дараалал юм db, dw, dd, dqболон dt.

Тэдний операндууд нь талбаруудын хэмжээ болон сонголтоор анхны утгыг тодорхойлдог. Эдгээр утгууд нь бүтцийг тодорхойлсон үед харгалзах талбаруудыг эхлүүлэх боломжтой.

Загварыг тайлбарлахдаа бид аль хэдийн дурьдсанчлан санах ойг хуваарилдаггүй, учир нь энэ нь орчуулагчийн мэдээлэл юм.

БайршилПрограмын загвар нь дур зоргоороо байж болох боловч нэг дамжуулалттай орчуулагчийн логикийн дагуу энэ бүтцийн төрөл бүхий хувьсагчийг тодорхойлсон газрын өмнө байрлах ёстой. Өөрөөр хэлбэл, өгөгдлийн сегмент дэх зарим бүтцийн төрөл бүхий хувьсагчийг тайлбарлахдаа түүний загварыг өгөгдлийн сегментийн эхэнд эсвэл түүний өмнө байрлуулах ёстой.

Тодорхой хэлтсийн ажилчдын мэдээллийн санг загварчлах жишээг ашиглан бүтэцтэй ажиллах талаар бодож үзээрэй.

Энгийнээр хэлэхэд, оруулах явцад мэдээлэл хувиргах асуудлаас ангижрахын тулд бүх талбарууд нь бэлгэдлийн шинж чанартай гэдгийг бид хүлээн зөвшөөрөх болно.

Энэ мэдээллийн сангийн бичлэгийн бүтцийг дараах загвараар тодорхойлъё.

Бүтцийн төрлөөр өгөгдлийг тодорхойлох

Загварын тусламжтайгаар тайлбарласан бүтцийг программд ашиглахын тулд энэ бүтцийн төрөлтэй хувьсагчийг тодорхойлох шаардлагатай. Үүний тулд дараах синтаксийг ашигладаг.

[хувьсагчийн нэр] бүтцийн_нэр

    хувьсагчийн нэр- өгөгдсөн бүтцийн төрлийн хувьсагчийн тодорхойлогч.

    Хувьсагчийн нэрийг зааж өгөх нь сонголттой. Хэрэв үүнийг заагаагүй бол бүтцийн бүх элементийн уртын нийлбэрийн хэмжээтэй санах ойн талбайг зүгээр л хуваарилах болно.

    үнэт зүйлсийн жагсаалт- өнцгийн хаалтанд хавсаргасан бүтцийн элементүүдийн анхны утгуудын таслалаар тусгаарлагдсан жагсаалт.

    Түүний даалгавар бас сонголттой.

    Хэрэв жагсаалт бүрэн бус байвал өгөгдсөн хувьсагчийн бүтцийн бүх талбарыг загвараас авсан утгуудаар эхлүүлнэ.

    Тусдаа талбаруудыг эхлүүлэхийг зөвшөөрдөг боловч энэ тохиолдолд дутуу талбаруудыг таслалаар тусгаарлах ёстой. Алга болсон талбаруудыг бүтцийн загвараас авсан утгуудаар эхлүүлнэ. Хэрэв энэ бүтцийн төрөлтэй шинэ хувьсагчийг тодорхойлохдоо бид түүний загвар дахь талбарын бүх утгыг хүлээн зөвшөөрч байвал (өөрөөр хэлбэл анхдагчаар тохируулсан) бол та зүгээр л өнцгийн хаалт бичих хэрэгтэй.

    Жишээлбэл: Виктор ажилчин.

Жишээлбэл, дээр дурдсан бүтцийн төрлөөр хэд хэдэн хувьсагчийг тодорхойлъё.

Бүтцийн аргууд

Аливаа програмчлалын хэлэнд бүтцийн төрлийг нэвтрүүлэх санаа нь өөр өөр төрлийн хувьсагчдыг нэг объект болгон нэгтгэх явдал юм.

Хэл нь тухайн бүтцийн жишээ дотор эдгээр хувьсагчдад хандах хэрэгслийг өгөх ёстой. Зарим бүтцийн талбарт командыг оруулахын тулд тусгай операторыг ашигладаг - тэмдэг ". "(цэг). Энэ нь дараах синтакс дээр хэрэглэгддэг.

    хаягийн_илэрхийлэл- зарим бүтцийн төрлийн хувьсагчийн тодорхойлогч эсвэл доор заасан синтаксийн дүрмийн дагуу хаалтанд оруулсан илэрхийлэл (Зураг 1);

    бүтцийн_талбайн_нэр- бүтцийн загвараас талбарын нэр.

    Энэ нь үнэн хэрэгтээ энэ нь бас хаяг, эс тэгвээс бүтцийн эхэн үеэс талбайн офсет юм.

Тиймээс оператор " . " (цэг) илэрхийллийг үнэлдэг

Цагаан будаа. 5. Бүтцийн талбарын хандалтын оператор дахь хаягийн илэрхийллийн синтакс

Бидний тодорхойлсон бүтцийн жишээн дээр үзүүлье ажилчин бүтэцтэй ажиллах зарим техник.

Жишээлбэл, задлах сүхнас ахих тусам талбайн утгууд. Энэ тэмдэгтийн талбарын агуулгыг бүртгэлд оруулсны дараа хөдөлмөрийн чадвартай хүний ​​нас 99-өөс дээш байх магадлал багатай тул сүхкомандын тусламжтайгаар хоёртын дүрслэл рүү хөрвүүлэхэд тохиромжтой байх болно ад.

Мэдээлэл хадгалах зарчмын улмаас болгоомжтой байгаарай "Бага хаягаар бага байт"насны хамгийн өндөр цифрийг оруулна аль, хамгийн залуу нь Аа.

Үүнийг засахын тулд командыг ашиглана уу ххг ал, аа:

mov ax,word ptr sotr1.age ;at al age sotr1

мөн ийм байж болно:

Массив бүтэцтэй цаашдын ажлыг нэг хэмжээст массивтай ижил аргаар гүйцэтгэдэг. Эндээс хэд хэдэн асуулт гарч ирнэ:

Хэмжээтэй хэрхэн харьцах, массивын элементүүдийн индексжүүлэлтийг хэрхэн зохион байгуулах вэ?

Хөтөлбөрт тодорхойлсон бусад таниулбаруудын нэгэн адил орчуулагч нь бүтцийн төрлийн нэр болон хувьсагчийн нэрийг бүтцийн төрөлд төрөл шинж чанартайгаар оноодог. Энэ атрибутын утга нь энэ бүтцийн талбаруудын эзэлдэг байтуудын хэмжээ юм. Та энэ утгыг оператор ашиглан гаргаж авах боломжтой төрөл.

Бүтцийн жишээний хэмжээ тодорхой болмогц олон бүтэцтэй индексжүүлэлтийг зохион байгуулах нь тийм ч хэцүү биш юм.

Жишээлбэл:

Талбарыг нэг бүтцээс нөгөө бүтцийн харгалзах талбар руу хэрхэн хуулах вэ? Эсвэл бүтцийг бүхэлд нь хэрхэн хуулбарлах вэ? Талбарыг хуулж авцгаая намсалбарын гурав дахь ажилтан намтав дахь ажилтан:

mas_sotr ажилчин 10 dup()

mov bx,офсет mas_sotr

mov si,(төрөл ажилчин)*2 ;si=77*2

mov di,(төрөл ажилчин)*4 ;si=77*4

Програмист хүний ​​ур чадвар эрт орой хэзээ нэгэн цагт хүнийг сайн гэрийн эзэгтэй мэт харагдуулдаг юм шиг санагддаг. Тэр түүн шиг хаана ямар нэгэн зүйл хадгалах, багасгах, хамгийн бага хоол хүнсээр гайхалтай оройн хоол хийх талаар байнга хайж байдаг. Хэрэв энэ нь амжилтанд хүрвэл ёс суртахууны сэтгэл ханамж нь гэрийн эзэгтэйн дээр хийсэн гайхалтай оройн хоолноос багагүй, магадгүй илүү их байх болно. Энэ сэтгэл ханамжийн түвшин нь мэргэжлээ хайрлах хайраас шалтгаална гэж би боддог.

Нөгөөтэйгүүр, программ хангамж, техник хангамжийн хөгжил дэвшил нь программистыг бага зэрэг тайвшруулдаг бөгөөд ялаа, зааны тухай алдартай зүйр үгтэй төстэй нөхцөл байдал ихэвчлэн тохиолддог - зарим жижиг асуудлыг шийдэхийн тулд хүнд жинтэй хэрэгслүүд байдаг. оролцдог бөгөөд ерөнхийдөө харьцангуй том төслүүдийг хэрэгжүүлэхэд л үр нөлөө нь чухал байдаг.

Дараах хоёр төрлийн өгөгдлийн хэл дээр байгаа нь "эзэгтэй" хоол бэлтгэх эсвэл бүтээгдэхүүн байрлуулахдаа ширээний ажлын хэсгийг (RAM) аль болох үр ашигтай ашиглахыг хүссэнтэй холбоотой байж магадгүй юм (хөтөлбөрийн өгөгдөл). ).