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

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

Ассемблей хэлний зааврын бүтэц Машины зааврын түвшний програмчлал нь компьютерийн программчлал хийх боломжтой доод түвшин юм. Машины зааврын систем нь машины техник хангамжид зааварчилгаа өгөх замаар шаардлагатай үйлдлүүдийг хэрэгжүүлэхэд хангалттай байх ёстой. Машины заавар бүр нь "юу хийх" гэсэн хоёр хэсгээс бүрддэг: "юу хийх" -ийг тодорхойлсон үйлдлийн хэсэг, боловсруулах объектыг тодорхойлсон операнд, өөрөөр хэлбэл "юу хийх". Ассемблей хэлээр бичигдсэн микропроцессорын машины заавар нь нэг мөр бөгөөд дараах хэлбэртэй байна: шошгоны заавар/директив операнд(ууд) ; тайлбар Шошго, команд/заавр, операндыг дор хаяж нэг хоосон зай эсвэл таб тэмдэгтээр тусгаарлана. Зааврын операндуудыг таслалаар тусгаарлана.

Ассемблер хэлний зааврын бүтэц Ассемблер хэлний заавар нь микропроцессор ямар үйлдэл хийхийг хөрвүүлэгчид хэлж өгдөг. Ассемблей удирдамж нь угсралтын процесс эсвэл гаралтын файлын шинж чанарт нөлөөлдөг програмын текстэд заасан параметрүүд юм. Операнд нь өгөгдлийн анхны утгыг (өгөгдлийн сегмент дэх) эсвэл зааварчилгааны дагуу ажиллах элементүүдийг (кодын сегмент) зааж өгдөг. Заавар нь нэг эсвэл хоёр операндтай байж болно, эсвэл операндгүй байж болно. Операндуудын тоог зааврын кодоор тодорхой зааж өгсөн байдаг. Хэрэв тушаал эсвэл зааврыг дараагийн мөрөнд үргэлжлүүлэх шаардлагатай бол урвуу зураасыг ашиглана: "" . Анхдагч байдлаар, ассемблер команд болон удирдамжийн том, жижиг үсгийг ялгадаггүй. Заавар болон тушаалын жишээ Count db 1 ; Нэр, удирдамж, нэг операнд mov eax, 0 ; Тушаал, хоёр операнд

Тодорхойлогч нь хувьсагчийн нэр болон шошгоны нэрийг тодорхойлоход хэрэглэгддэг хүчинтэй тэмдэгтүүдийн дараалал юм. Тодорхойлогч нь дараах тэмдэгтүүдийн нэг буюу түүнээс дээш байж болно: Латин цагаан толгойн бүх үсэг; 0-ээс 9 хүртэлх тоо; тусгай тэмдэгтүүд: _, @, $, ? . Цэгийг шошгоны эхний тэмдэгт болгон ашиглаж болно. Нөөцлөгдсөн ассемблерийн нэрийг (захирамж, оператор, тушаалын нэр) танигч болгон ашиглах боломжгүй. Тодорхойлогчийн эхний тэмдэгт нь үсэг эсвэл тусгай тэмдэгт байх ёстой. Танигчийн хамгийн их урт нь 255 тэмдэгт боловч орчуулагч эхний 32 тэмдэгтийг хүлээн авч, үлдсэнийг нь үл тоомсорлодог. Ассемблерийн удирдамж агуулаагүй мөрөнд бичигдсэн бүх шошго ":" хоёр цэгээр төгсөх ёстой. Шошго, тушаал (заавар), операнд нь мөрийн аль нэг байрлалаас эхлэх шаардлагагүй. Хөтөлбөрийг уншихад хялбар болгохын тулд тэдгээрийг баганад бичихийг зөвлөж байна.

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

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

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

Санах ойн загварууд Сегментүүдийг зарлахаасаа өмнө санах ойн загварыг удирдамж ашиглан зааж өгөх ёстой. ЗАГВАР өөрчлөгч санах ойн_загвар, дуудлагын_конвенц, үйлдлийн_төрөл, стек_параметр Ассемблер хэлний санах ойн үндсэн загварууд: Санах ойн загвар Код хаяглах Өгөгдлийн хаяглалт Үйлдлийн систем Код болон өгөгдлийн оролт MS-DOS-ийн ОЙЧ TINY Хүчинтэй ЖИЖИГ MS-DOS-д ОЙР, Windows ДУНД ХАС, Windows No MS-DOS-д ойр. ОДОО ХОЛ MS-DOS, Windows ТОМ ХОЛ MS-DOS байхгүй, Windows AMAX FAR MS-DOS, Windows No NEAR Windows 2000, Windows XP, Windows Valid FLAT NEAR NT,

Санах ойн загварууд Өчүүхэн загвар нь зөвхөн 16 битийн MS-DOS програмуудад ажилладаг. Энэ загварт бүх өгөгдөл, код нэг физик сегментэд байрладаг. Энэ тохиолдолд програмын файлын хэмжээ 64 КБ-аас хэтрэхгүй байна. Жижиг загвар нь нэг кодын сегмент болон нэг өгөгдлийн сегментийг дэмждэг. Энэ загварыг ашиглах үед өгөгдөл, кодыг ойролцоо (ойролцоо) гэж нэрлэдэг. Дунд зэргийн загвар нь олон кодын сегмент болон нэг өгөгдлийн сегментийг дэмждэг бөгөөд кодын сегмент дэх бүх холбоосыг анхдагчаар хол (хол) гэж үздэг бөгөөд өгөгдлийн сегмент дэх холбоосыг ойролцоо (ойр) гэж үздэг. Компакт загвар нь холын өгөгдлийн хаяглалт (хол) ашигладаг олон өгөгдлийн сегмент болон ойролцоо өгөгдөл хаяглах (ойролцоох) ашигладаг нэг кодын сегментийг дэмждэг. Том загвар нь олон кодын сегмент болон олон өгөгдлийн сегментийг дэмждэг. Анхдагч байдлаар, бүх код болон өгөгдлийн лавлагааг хол гэж үздэг. Асар том загвар нь том санах ойн загвартай бараг тэнцүү юм.

Санах ойн загварууд Хавтгай загвар нь хэсэгчилсэн бус програмын тохиргоог авч үздэг бөгөөд зөвхөн 32 битийн үйлдлийн системд ашиглагддаг. Энэ загвар нь өгөгдөл болон код нь ижил 32 бит сегментэд оршдогоороо жижигхэн загвартай төстэй юм. Удирдамжаас өмнө хавтгай загварт зориулсан хөтөлбөр боловсруулах. загвар хавтгай нь удирдамжийн аль нэгийг байрлуулах ёстой: . 386, . 486, . 586 эсвэл. 686. Процессорыг сонгох удирдамжийн сонголт нь програм бичихэд ашиглах командуудын багцыг тодорхойлно. Процессор сонгох зааврын дараах p үсэг нь хамгаалалтын горимыг илэрхийлдэг. Өгөгдөл болон кодын хаяглалт ойрхон, бүх хаяг, заагч нь 32 бит байна.

санах ойн загварууд. ЗАГВАР өөрчлөгч санах ойн_загвар, дуудлагын_конвенц, үйлдлийн_төрөл, стек_параметр Өөрчлөгчийн параметр нь сегментийн төрлийг тодорхойлоход хэрэглэгддэг ба дараах утгыг авч болно: ашиглах 16 (сонгосон загварын сегментүүдийг 16 бит болгон ашигладаг) ашиглах 32 (сонгосон загварын сегментүүдийг ашигладаг) 32 битийн хувьд). calling_convention параметрийг бусад хэл, түүний дотор хэлнээс процедурыг дуудах үед параметрүүд хэрхэн дамждагийг тодорхойлоход ашигладаг. өндөр түвшин(C++, Паскаль). Параметр нь дараах утгуудыг авч болно: C, BASIC, FORTRAN, PASCAL, SYSCALL, STDCALL.

санах ойн загварууд. MODEL өөрчлөгч санах ойн_загвар, дуудлагын_конвенц, үйлдлийн_төрөл, стек_параметр OS_type параметр нь анхдагчаар OS_DOS бөгөөд асаалттай байна. Энэ мөчЭнэ нь энэ параметрийн цорын ганц дэмжигдсэн утга юм. Stack_param параметрийг дараах байдлаар тохируулсан: NEARSTACK (SS регистр нь DS-тэй тэнцүү, өгөгдөл болон стекийн мужууд нь нэг физик сегментэд байрладаг) FARSTACK (SS регистр нь DS-тэй тэнцүү биш, өгөгдөл болон стекийн мужууд өөр өөр физик сегментүүдэд байрладаг). Өгөгдмөл нь NEARSTACK юм.

"Юу ч хийхгүй" хөтөлбөрийн жишээ. 686 P. ЗАГВАР ХАМТ, STDCALL. ӨГӨГДӨЛ. CODE START: RET END START RET - микропроцессорын команд. Энэ нь програмыг зөв дуусгахыг баталгаажуулдаг. Хөтөлбөрийн үлдсэн хэсэг нь орчуулагчийн ажиллагаатай холбоотой. . 686 P - Pentium 6 (Pentium II) хамгаалалттай горимын командуудыг зөвшөөрнө. Энэхүү заавар нь процессорын загварыг зааж өгснөөр дэмжигдсэн ассемблерийн багцыг сонгоно. . MODEL FLAT, stdcall - хавтгай санах ойн загвар. Энэхүү санах ойн загварыг Windows үйлдлийн системд ашигладаг. stdcall нь конвенцийг ашиглах журам юм.

"Юу ч хийхгүй" хөтөлбөрийн жишээ. 686 P. ЗАГВАР ХАВТЛАГА, STDCALL. ӨГӨГДӨЛ. КОД ЭХЛҮҮЛЭХ: ДАХИН Төгсгөл Эхлэх. DATA - өгөгдөл агуулсан програмын сегмент. Энэ програм нь стекийг ашигладаггүй тул сегмент. STACK байхгүй байна. . КОД - код агуулсан програмын хэсэг. START - шошго. END START - програмын төгсгөл ба програмыг START гэсэн шошгооос эхлүүлэх ёстой гэсэн хөрвүүлэгч рүү илгээсэн мессеж. Програм бүр нь програмын эх кодын төгсгөлийг харуулсан END удирдамжийг агуулсан байх ёстой. END зааврыг дагаж мөрдөж буй бүх мөрийг үл тоомсорлодог.END удирдамжийн дараах шошго нь хөрвүүлэгчид програмын гүйцэтгэл эхлэх үндсэн модулийн нэрийг хэлдэг. Хэрэв програм нь нэг модуль агуулсан бол END удирдамжийн дараах шошгыг орхиж болно.

Ассемблей хэлний орчуулагчид Орчуулагч гэдэг нь аль нэг програмчлалын хэл дээр танилцуулсан програмыг зорилтот хэл дээрх программ болгон хөрвүүлдэг программ буюу техник хангамжийг объект код гэж нэрлэдэг. Машины зааварчилгааны мнемоникийг дэмжихээс гадна орчуулагч бүр өөрийн гэсэн заавар, макротой байдаг бөгөөд ихэнхдээ бусад зүйлтэй нийцдэггүй. Ассемблер хэлний орчуулагчийн үндсэн төрлүүд нь: MASM (Microsoft Assembler), TASM (Borland Turbo Assembler), FASM (Flat Assembler) - Томаш Гриштар (Польш)-ийн бичсэн чөлөөтэй тархсан олон дамжлагатай ассемблер, NASM (Netwide Assembler) - a. Intel x архитектурын 86-д зориулсан үнэгүй ассемблерийг Саймон Татам Жулиан Холлтой хамтран бүтээсэн бөгөөд одоогоор Source дахь жижиг хөгжүүлэлтийн баг боловсруулж байна. Forge. цэвэр.

Src="https://present5.com/presentation/-29367016_63610977/image-15.jpg" alt="(!LANG:Microsoft Visual Studio 2005 дээрх программын орчуулга 1) File->New->Project-г сонгон төсөл үүсгэнэ үү. цэс болон"> Трансляция программы в Microsoft Visual Studio 2005 1) Создать проект, выбрав меню File->New->Project и указав имя проекта (hello. prj) и тип проекта: Win 32 Project. В !} нэмэлт сонголтууд"Хоосон төсөл"-ийг зааж өгөх төслийн шидтэн.

Src="https://present5.com/presentation/-29367016_63610977/image-16.jpg" alt="(!LANG:Microsoft Visual Studio 2005 дээрх программын орчуулга 2) Төслийн модонд (Харах->Solution Explorer) нэмнэ үү."> Трансляция программы в Microsoft Visual Studio 2005 2) В дереве проекта (View->Solution Explorer) добавить файл, в котором будет содержаться текст программы: Source. Files->Add->New. Item.!}

Microsoft Visual Studio 2005 дээрх программын орчуулга 3) Code C++ файлын төрлийг сонгох боловч өргөтгөлтэй нэрийг зааж өгнө. asm:

Microsoft Visual Studio 2005 дээрх программын орчуулга 5) Хөрвүүлэгчийн сонголтуудыг тохируулах. Төслийн файлын цэсний баруун товчлуураас "Захиалгат бүтээх дүрэм"-ийг сонго...

Microsoft Visual Studio 2005 дээрх програмын орчуулга болон гарч ирэх цонхноос Microsoft Macro Assembler-ийг сонгоно уу.

Microsoft Visual Studio 2005 дээрх програмын орчуулга Сайн уу файлын баруун товчийг дарна уу. Properties цэснээс төслийн модны asm-ийг сонгоод General->Tool: Microsoft Macro Assembler-г тохируулна уу.

Src="https://present5.com/presentation/-29367016_63610977/image-22.jpg" alt="(!LANG:Microsoft Visual Studio 2005 програмын орчуулга 6) Build->Build hello.prj командыг сонгон файлыг эмхэтгэ. ."> Трансляция программы в Microsoft Visual Studio 2005 6) Откомпилировать файл, выбрав Build->Build hello. prj. 7) Запустить программу, нажав F 5 или выбрав меню Debug->Start Debugging.!}

Windows үйлдлийн систем дэх програмчлал нь Windows үйлдлийн систем дэх програмчлал нь API функцуудыг ашиглахад суурилдаг (Програм хангамжийн интерфейс, өөрөөр хэлбэл програм хангамжийн интерфейс). Тэдний тоо 2000 хүрдэг. Windows-д зориулсан програм нь ихэвчлэн ийм дуудлагаас бүрддэг. Үйлдлийн системийн гадаад төхөөрөмж, нөөцтэй харилцах харилцаа нь дүрмээр бол ийм функцээр дамждаг. хагалгааны өрөө Windows системхавтгай санах ойн загварыг ашигладаг. Аливаа санах ойн байршлын хаягийг нэг 32 битийн регистрийн агуулгаар тодорхойлно. Windows-д зориулсан 3 төрлийн програмын бүтэц байдаг: харилцах цонх (үндсэн цонх нь харилцах цонх), консол эсвэл цонхгүй бүтэц, сонгодог бүтэц (цонх, хүрээ).

Windows API функцуудыг дуудах Тусламжийн файлд ямар ч API функц function_name (FA 1, FA 2, FA 3) төрөл хэлбэрээр илэрхийлэгддэг. Төрөл – буцаах утгын төрөл; FAX – албан ёсны аргументуудын жагсаалт, жишээ нь, int Message. Хайрцаг (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Энэ функц нь мессеж болон гарах товчлуур(ууд) бүхий цонхыг харуулдаг. Параметрийн утга: h. Wnd - мессежийн цонх гарч ирэх цонхны бариул, lp. Текст - цонхонд гарч ирэх текст, lp. Гарчиг - цонхны гарчиг дахь текст, u. Төрөл - цонхны төрөл, ялангуяа та гарах товчлуурын тоог зааж өгч болно.

Int Message нь Windows API функцуудыг дуудаж байна. Хайрцаг (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); API функцийн бараг бүх параметрүүд нь үнэндээ 32 битийн бүхэл тоо юм: HWND нь 32 битийн бүхэл тоо, LPCTSTR нь 32 битийн бүхэл тоо, UINT нь 32 битийн бүхэл тоо юм. Функцийн шинэ хувилбар руу шилжихийн тулд "А" дагаварыг ихэвчлэн функцуудын нэрэнд нэмдэг.

Int Message нь Windows API функцуудыг дуудаж байна. Хайрцаг (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); MASM-г ашиглахдаа нэрний төгсгөлд @N N нэмэх хэрэгтэй - дамжуулсан аргументуудын стек дээр эзлэх байтуудын тоо. Win 32 API функцүүдийн хувьд энэ тоог аргументуудын тоог n-ийг 4-өөр үржүүлсэнээр (аргумент тус бүрт байт) тодорхойлж болно: N=4*n. Функцийг дуудахын тулд ассемблерийн CALL командыг ашиглана. Энэ тохиолдолд функцийн бүх аргументуудыг стекээр дамжуулдаг (PUSH команд). Аргумент дамжуулах чиглэл: ЗҮҮНЭЭС БАРУУН - ДООГОО ДЭЭШ. Аргумент та эхлээд стек рүү түлхэгдэнэ. төрөл. Заасан функцийг дуудах нь дараах байдлаар харагдах болно: CALL Message. хайрцаг. [имэйлээр хамгаалагдсан]

Int Message нь Windows API функцуудыг дуудаж байна. Хайрцаг (HWND h. Wnd, LPCTSTR lp. Text, LPCTSTR lp. Caption, UINT u. Type); Аливаа API функцийг гүйцэтгэх үр дүн нь ихэвчлэн бүхэл тоо бөгөөд EAX бүртгэлд буцаж ирдэг. OFFSET заавар нь "сегментийн офсет" буюу дээд түвшний хэлээр бол мөрийн эхлэлийн "заагч" юм. C хэл дээрх #define шиг EQU заавар нь тогтмолыг тодорхойлдог. EXTERN заавар нь хөрвүүлэгчид функц эсвэл танигч модулийн гадна байгааг хэлдэг.

"Бүгдээрээ сайн уу!" хөтөлбөрийн жишээ. . 686 P. ЗАГВАР ХАВТЛАГА, STDCALL. STACK 4096. DATA MB_OK EQU 0 STR 1 DB "Миний анхны програм", 0 STR 2 DB "Сайн уу!", 0 HW DD ? EXTERN мессеж. хайрцаг. [имэйлээр хамгаалагдсан]: ОЙРХОН. CODE START: PUSH MB_OK PUSH OFFSET STR 1 PUSH OFFSET STR 2 PUSH HW CALL Зурвас. хайрцаг. [имэйлээр хамгаалагдсан]ДАХИН Төгсгөл Эхлэл

INVOKE удирдамж MASM хэлний орчуулагч нь мөн макро хэрэглүүрийг ашиглан функцийн дуудлагыг хялбарчлах боломжтой болгодог - INVOKE удирдамж: INVOKE функц, параметр1, параметр2, ... Функцийн дуудлагад @16 нэмэх шаардлагагүй; параметрүүдийг функцийн тайлбарт өгөгдсөн дарааллаар нь яг таг бичсэн болно. Орчуулагчийн макро нь параметрүүдийг стек рүү түлхэж өгдөг. INVOKE удирдамжийг ашиглахын тулд та PROTO удирдамжийг ашиглан функцийн прототипийн тайлбарыг дараах хэлбэртэй байх ёстой: Message. хайрцаг. PROTO: DWORD, : DWORD

Сэдэв 2.5 Процессорын програмчлалын үндэс

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

Симболын заавар кодчилолын хэл гэж нэрлэдэг угсрагч.

ассемблер хэлхэллэг бүр нь яг нэг машины заавартай тохирдог хэл юм.

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

Ассемблей хэл нь өндөр түвшний хэлнээс ялгагдах хэд хэдэн шинж чанартай байдаг:

1. Энэ нь ассемблер хэл дээрх хэллэгүүд болон машины заавруудын хоорондох ганцаарчилсан захидал харилцаа юм.

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

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



Компьютерийн архитектурыг илүү сайн ойлгож, компьютерийг илүү сайн ашиглах;

Хэрэглээний асуудлыг шийдвэрлэх програмын алгоритмын илүү оновчтой бүтцийг боловсруулах;

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

Хамгийн чухал даалгавруудыг шийдвэрлэх програмуудын эмхэтгэл (машины баримжаатай хэл дээр эмхэтгэсэн програм нь ихэвчлэн илүү үр дүнтэй байдаг - өндөр түвшний хэлнээс орчуулсны үр дүнд олж авсан програмуудаас 30-60 хувиар богино бөгөөд хурдан байдаг)

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

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

Ассемблер хэлний цагаан толгой нь ASCII тэмдэгтүүдээс бүрддэг.

Тоонууд нь зөвхөн бүхэл тоо юм. Ялгах:

В үсгээр төгссөн хоёртын тоо;

D-ээр төгссөн аравтын тоо;

N үсгээр төгссөн арван зургаатын тоо.

RAM, регистр, өгөгдлийн төлөөлөл

Парламентын тодорхой цувралын хувьд бие даасан програмчлалын хэлийг ашигладаг - ассемблер хэл.

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

MP KR580VM80 дээр суурилсан микропроцессорын системийн програм хангамжийн загвар

Зураг 1-ийн дагуу MPS-ийн програмын загвар

MP портын санах ой

С З АС П C

Зураг 1

Програмистын үүднээс авч үзвэл KR580VM80 MP нь дараах программыг ашиглах боломжтой регистрүүдтэй.

ГЭХДЭЭ– 8 битийн аккумляторын бүртгэл. Энэ бол УИХ-ын гишүүний үндсэн бүртгэл юм. ALU-д гүйцэтгэсэн аливаа үйлдэл нь боловсруулагдах операндуудын аль нэгийг аккумляторт байрлуулах явдал юм. ALU дахь үйлдлийн үр дүнг ихэвчлэн А-д хадгалдаг.

B, C, D, E, H, L– 8 битийн ерөнхий зориулалтын бүртгэлүүд (RON). MP дотоод санах ой. Боловсруулсан мэдээлэл, түүнчлэн үйл ажиллагааны үр дүнг хадгалахад зориулагдсан. Регистрүүдээс 16 битийн үгийг боловсруулахад BC, DE, HL хосууд үүсч, хос регистрийг эхний үсэг гэж нэрлэдэг - B, D, H. Регистрийн хосын хувьд эхний регистр хамгийн өндөр байна. Өгөгдөл хадгалах болон RAM эсийн 16 битийн хаягийг хадгалахад ашигладаг H, L регистрүүд нь тусгай шинж чанартай байдаг.

FL– flag register (feature register) Арифметик болон логик үйлдлүүдийн үр дүнгийн таван шинж чанарыг МП-д хадгалдаг 8 битийн регистр. Зургийн дагуу FL формат

Бит C (CY - зөөвөрлөх) - зөөвөрлөх, арифметик үйлдлүүдийг гүйцэтгэх үед байтын өндөр дарааллаас зөөвөрлөх үйлдэл байсан бол 1-д тохируулна.

Бит P (паритет) - үр дүнгийн бит дэх нэгжийн тоо тэгш байвал 1-ээр тохируулна.

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

Bit Z (тэг) - үйлдлийн үр дүн 0 бол 1-ээр тохируулна.

Хэрэв үр дүн сөрөг байвал S (тэмдэг) битийг 1, эерэг үр дүн гарвал 0 гэж тохируулна.

SP-- 16 битийн бүртгэл болох стек заагч нь стек дээр хамгийн сүүлд оруулсан байтыг бичсэн санах ойн байршлын хаягийг хадгалах зориулалттай.

RS– програмын тоолуур (програмын тоолуур), 16 битийн бүртгэл, дараагийн гүйцэтгэх зааврын хаягийг хадгалах зориулалттай. Дараагийн заавар байтыг авсны дараа програмын тоолуурын агуулга автоматаар 1-ээр нэмэгддэг.

0000H - 07FF хаягийн санах ойн анхны хэсэгт хяналтын програм болон демо програмууд байдаг. Энэ бол ROM талбар юм.

0800 - 0AFF - судалж буй хөтөлбөрүүдийг бүртгэх хаягийн хэсэг. (RAM).

0В00 - 0ВВ0 - өгөгдөл бичих хаягийн хэсэг. (RAM).

0BB0 нь стекийн эхлэлийн хаяг юм. (RAM).

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

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

Санах ойн MP KR580VM80 нь байт гэж нэрлэгддэг 8 битийн үгсийн массив юм. Байт бүр өөрийн гэсэн 16 битийн хаягтай бөгөөд санах ойн нүднүүдийн дарааллаар түүний байрлалыг тодорхойлдог. MP нь ROM болон RAM хоёуланг нь агуулж болох 65536 байт санах ойд хаяглах боломжтой.

Өгөгдлийн формат

Өгөгдлийг санах ойд 8 битийн үг хэлбэрээр хадгалдаг.

D7 D6 D5 D4 D3 D2 D1 D0

Хамгийн бага ач холбогдолтой бит нь 0 бит, хамгийн чухал нь 7 бит юм.

Тушаал нь форматаар тодорхойлогддог, өөрөөр хэлбэл түүнд хуваарилагдсан битүүдийн тоо нь тодорхой функциональ талбаруудад байтаар хуваагддаг.

Тушаалын формат

MP KR580VM80 командууд нь нэг, хоёр, гурван байт форматтай. Олон байт зааврыг хөрш зэргэлдээх PL-д байрлуулах ёстой. Тушаалын хэлбэр нь гүйцэтгэж буй үйлдлийн онцлогоос хамаарна.

Тушаалын эхний байт нь мнемоник хэлбэрээр бичигдсэн opcode-г агуулдаг.

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

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

Зураг 2-ын дагуу нэг байт командын формат

Зураг 4

Ассемблер хэлний зааварт opcode нь англи үг бичих товчилсон хэлбэр буюу мнемоник тэмдэглэгээтэй байдаг. Мнемоник (Грек хэлнээс mnemonic - цээжлэх урлаг) нь функциональ зорилгын дагуу тушаалуудыг санахад хялбар болгодог.

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


Хаяглах аргууд

Бүх операндын кодууд (оролт ба гаралт) хаа нэгтээ байрлах ёстой. Тэд УИХ-ын гишүүний дотоод бүртгэлд байж болно (хамгийн тохиромжтой, хурдан сонголт). Тэдгээрийг системийн санах ойд байрлуулж болно (хамгийн түгээмэл сонголт). Эцэст нь тэд I / O төхөөрөмжүүдэд байж болно (хамгийн ховор тохиолдол). Операндуудын байршлыг зааврын кодоор тодорхойлно. Зааврын код нь оролтын операндыг хаанаас авах, гаралтын операндыг хаана байрлуулахыг тодорхойлох янз бүрийн аргууд байдаг. Эдгээр аргуудыг хаягийн аргууд гэж нэрлэдэг.

MP KR580VM80-ийн хувьд дараах хаягжилтын аргууд байдаг.

Шууд;

Бүртгүүлэх;

шууд бус;

Стек.

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

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

Бүртгүүлэх хаяглалт нь операнд (оролт эсвэл гаралт) дотоод MP регистрт байгаа гэж үздэг. Нэг байт командуудад ашиглагддаг

Шууд бус (далд) хаяглалт нь МП-ийн дотоод регистр нь операнд өөрөө биш харин санах ой дахь хаяг нь байна гэж үздэг.

Стек хаяглалт нь тушаал нь хаяг агуулаагүй гэж үздэг. 16 битийн SP регистрийн (стек заагч) агуулгаар санах ойн нүднүүдэд хаяглах.

Тушаалын систем

MP командын систем нь УИХ-ын гишүүний гүйцэтгэх чадвартай үндсэн үйлдлүүдийн бүрэн жагсаалт юм. Эдгээр тушаалаар удирддаг УИХ-ын гишүүн гүйцэтгэдэг энгийн алхамууд, энгийн арифметик болон логик үйлдлүүд, өгөгдөл дамжуулах, хоёр утгыг харьцуулах гэх мэт.. Командын тоо MP KR580VM80 - 78 (өөрчлөлт 244 орно).

Дараах бүлэг тушаалууд байдаг.

Мэдээлэл дамжуулах;

Арифметик;

Тархи тоглоом;

Үсрэх командууд;

Оролт-гаралт, хяналт, стектэй ажиллах командууд.


Командыг тайлбарлах, програм бичихэд ашигладаг тэмдэг, товчлолууд

Тэмдэг Бууруулах
ADDR 16 битийн хаяг
ӨГӨГДӨЛ 8 битийн өгөгдөл
Өгөгдөл 16 16 битийн өгөгдөл
ПОРТ 8 битийн оролт гаралтын хаяг (оролтын гаралтын төхөөрөмж)
БАЙТ 2 Хоёрдахь тушаалын байт
БАЙТ 3 Гурав дахь командын байт
R, R1, R2 Бүртгэлийн нэг нь: A, B, C, D, E, H, L
RP Бүртгэлийн хосуудын нэг нь: B - хос нисэх онгоцыг тогтоодог; D - DE-ийн хосыг тогтоодог; H - HL-ийн хосыг заана
RH Хосуудын анхны бүртгэл
RL Хосуудын хоёр дахь бүртгэл
Λ Булийн үржүүлэх
В Булийн нэмэлт
Хоёр модулийн нэмэлт
М Хаяг нь HL регистрийн хосын агуулгыг тодорхойлсон санах ойн нүд, өөрөөр хэлбэл M = (HL)

Ассемблей хэлний командууд (лекц)

ЛЕКЦИЙН ТӨЛӨВЛӨГӨӨ

1. Үйл ажиллагааны үндсэн бүлгүүд.

Pentium.

1. Үйл ажиллагааны үндсэн бүлгүүд

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

дамжуулах үйл ажиллагаа,

арифметик үйлдлүүд,

логик үйлдлүүд,

ээлжийн үйл ажиллагаа,

харьцуулалт, туршилтын үйл ажиллагаа,

битийн үйлдлүүд,

Хөтөлбөрийн удирдлагын үйл ажиллагаа;

Процессорын хяналтын үйлдлүүд.

2. Процессорын командын Mnemocodes Pentium

Командуудыг тайлбарлахдаа тэдгээрийн mnemonic тэмдэглэгээг (мнемоник код) ихэвчлэн ашигладаг бөгөөд энэ нь Ассемблей хэлээр програмчлах үед командыг зааж өгдөг. Ассемблерийн өөр хувилбаруудын хувьд зарим командын мнемоник кодууд өөр байж болно. Жишээлбэл, дэд программыг дуудах командын хувьд мнемоник кодыг ашигладагДУУДЛАГА эсвэл JSR (“Үсрэх дэд програм”). Гэсэн хэдий ч микропроцессорын үндсэн төрлүүдийн ихэнх командын мнемоник кодууд нь ижил эсвэл бага зэрэг ялгаатай байдаг, учир нь тэдгээр нь гүйцэтгэж буй үйлдлийг тодорхойлдог харгалзах англи үгсийн товчлол юм. Процессоруудад зориулсан командын мнемоникийг авч үзье Pentium.

Дамжуулах командууд. Энэ бүлгийн гол тушаал нь тушаал юмMOV , энэ нь хоёр регистр эсвэл регистр ба санах ойн үүр хооронд өгөгдөл дамжуулах боломжийг олгодог. Зарим микропроцессорууд санах ойн хоёр эсийн хооронд дамжуулалт хийхээс гадна хэд хэдэн регистрүүдийн агуулгыг санах ойноос бүлэг шилжүүлэхийг хэрэгжүүлдэг. Жишээлбэл, 68 гэр бүлийн микропроцессоруудМоторола ххх тушаалыг гүйцэтгэнэЗӨВЛӨХ , санах ойн нэг нүднээс нөгөө нүд рүү шилжүүлэх боломжийг олгодог бөгөөд тушаалХӨДЛӨХ , санах ой руу бичдэг эсвэл өгөгдсөн багц регистрүүдийн агуулгыг санах ойноос ачаалдаг (16 хүртэл регистр). БагXCHG хоёр процессорын регистр эсвэл регистр ба санах ойн эсийн агуулгыг харилцан солилцох ажлыг гүйцэтгэдэг.

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

Арифметик үйлдлийн командууд. Энэ бүлгийн гол командууд нь нэмэх, хасах, үржүүлэх, хуваах бөгөөд хэд хэдэн сонголттой байдаг. Нэмэлт командууд НЭМЭХ болон хасах SUB -тай тохирох үйлдлийг гүйцэтгэхвхоёр регистр, регистр ба санах ойн байршилтай эсвэл шууд операнд ашиглах. Багууд МЭ C , С.Б Б шинж чанарын утгыг харгалзан нэмэх хасах үйлдлийг гүйцэтгэнэC, өмнөх үйлдлийг гүйцэтгэх явцад шилжүүлгийн үүсэх явцад тогтоосон. Эдгээр командын тусламжтайгаар цифрүүдийн тоо нь процессорын хүчин чадлаас давсан операндуудыг дараалан нэмэх ажлыг гүйцэтгэдэг. Баг NEG операндын тэмдгийг өөрчилснөөр түүнийг хоёрын нөхөх болгон хувиргана.

Үржүүлэх, хуваах үйлдлийг гарын үсэг зурсан тоонууд дээр хийж болно (командуудI MUL, I DIV ) эсвэл гарын үсэг зураагүй (командууд MUL, DIV ). Үйл ажиллагааны үр дүн нь бүртгэлд байрладаг. Үржүүлэх үед (командуудМУЛ , IMUL ) үр дүнд нь хоёр оронтой үр дүн гарах бөгөөд энэ нь хоёр регистрийг байрлуулахад ашигладаг. Хуваах үед (тушаалDIV , IDIV ) ногдол ашгийн хувьд хоёр оронтой операндыг ашиглаж, хоёр регистрт байрлуулж, үр дүнд нь хуваалт ба үлдэгдлийг хоёр бүртгэлд бичнэ.

Логик командууд . Бараг бүх микропроцессорууд тушаалуудыг ашиглан ижил нэртэй операнд битүүд дээр хийгддэг AND, OR, Exclusive OR гэсэн логик үйлдлүүдийг гүйцэтгэдэг. БА, ЭСВЭЛ, X ЭСВЭЛ . Үйлдлүүд нь регистр ба санах ойн байршил гэсэн хоёр регистрийн агуулга дээр эсвэл шууд операнд ашиглан хийгддэг. Баг ҮГҮЙ Операндын бит бүрийн утгыг эргүүлнэ.

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

Харьцуулах, шалгах командууд . Операнд харьцуулалтыг ихэвчлэн зааврын дагуу хийдэгCMP , энэ нь функцүүдийн утгыг тохируулах замаар операндуудыг хасах ажлыг гүйцэтгэдэг N, Z, V, Cүр дүнгийн дагуу статусын бүртгэлд. Энэ тохиолдолд хасалтын үр дүн хадгалагдахгүй бөгөөд операндуудын утга өөрчлөгдөхгүй. Хүлээн авсан шинж чанарын утгын дараагийн дүн шинжилгээ нь харьцангуй утгыг тодорхойлох боломжийг олгодог (>,<, =) операндов со знаком или без знака. Использование различных способов адресации позволяет производит сравнение содержимого двух регистров, регистра и ячейки памяти, непосредственно заданного операнда с содержимым регистра или ячейки памяти.

Зарим микропроцессорууд туршилтын командыг гүйцэтгэдэг TST , энэ нь харьцуулах зааврын нэг операндын хувилбар юм. Энэ тушаалыг гүйцэтгэх үед тэмдгүүдийг тохируулна Н, Зхаяглагдсан операндын тэмдэг ба утгын дагуу (тэнцүү эсвэл тэг биш).

Битийн ажиллагааны заавар . Эдгээр тушаалууд нь атрибутын утгыг тохируулдагCТуршиж буй битийн утгын дагуу статусын бүртгэлдтэрбум хаяглагдсан операнд. Зарим микропроцессоруудад туршилтын үр дүнгийн дагуу тэмдэг тавьдагЗ. Туршилтын битийн дугаарnкомандад заасан регистрийн агуулгаар эсвэл шууд операндоор тохируулагдана.

Энэ бүлгийн командууд нь шалгасан битийг өөрчлөх өөр өөр сонголтуудыг хэрэгжүүлдэг.Команд BT энэ битийн утгыг өөрчлөхгүй.Command Б Т С туршилтын дараа утгыг тогтооно тэрбум=1 ба тушаал Б Т C - утга тэрбум=0.Тушаал Б Т C Туршилтын дараа бит bn-ийн утгыг урвуулна.

Хөтөлбөрийн удирдлагын үйл ажиллагаа. Хөтөлбөрийг удирдахын тулд олон тооны тушаалуудыг ашигладаг бөгөөд үүнд:

- болзолгүй хяналт дамжуулах командууд;

- нөхцөлт үсрэлт командууд;

- програмын мөчлөгийг зохион байгуулах командууд;

- таслах тушаалууд;

- онцлогийг өөрчлөх командууд.

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

Дэд программыг мөн командыг ашиглан хяналтыг болзолгүй шилжүүлэх замаар дууддагДУУДЛАГА (эсвэл JSR ). Гэсэн хэдий ч, энэ тохиолдолд ачаалахаас өмнөPC Дэд программын эхний зааврын хаягийг зааж өгсөн шинэ агуулгатай бол дэд программыг гүйцэтгэсний дараа үндсэн програм руу буцахыг (эсвэл дэд програмуудыг үүрлэх үеийн өмнөх дэд програм). Нөхцөлт үсрэлтийн зааврыг (програмын салбарууд) ачааллааPCтөлөв байдлын бүртгэл дэх янз бүрийн шинж чанаруудын одоогийн утгын дагуу тохируулагдсан тодорхой нөхцөл хангагдсан тохиолдолд шинэ агуулга. Хэрэв нөхцөл хангагдаагүй бол дараагийн програмын тушаалыг гүйцэтгэнэ.

Зан чанарын удирдлагын командууд нь шинж чанаруудыг хадгалдаг статусын бүртгэлийн агуулгыг унших, мөн хувь хүний ​​шинж чанаруудын утгыг өөрчлөх боломжийг олгодог. Жишээлбэл, Pentium процессорууд тушаалуудыг хэрэгжүүлдэг LAHF болон SAHF , тэмдэгтүүдийг агуулсан бага байтыг статусын бүртгэлээс ачаалдаг EFLAGбүртгэлийн бага байт хүртэл EAXболон дүүргэх бага байт EFLAGSбүртгэлээс Э АX.. Тушаалууд CLC, STCдамжуулах тугийн утгуудыг CF=0, CF=1, командыг тохируулна уу CMCЭнэ шинж чанарын утгыг урвуу болгоход хүргэдэг.Нөхцөлт үсрэлтүүдийн үед шинж чанарууд нь програмын гүйцэтгэлийн урсгалыг тодорхойлдог тул шинж чанарыг өөрчлөх зааврыг ихэвчлэн програмыг удирдахад ашигладаг.

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

Тусгай багууд CLI, БЗДХ тасалдлын хүсэлтийн үйлчилгээг идэвхгүй болгож идэвхжүүлнэ. Процессоруудад Pentium Үүнд хяналтын бит (туг) ашигладагХЭРВЭЭбүртгэлд EFLAGS.

Орчин үеийн олон микропроцессорууд хэрэглэгч болон бусад төхөөрөмжид тухайн системд ашиглагдаж буй процессорын талаар мэдээлэл авах боломжийг олгодог таних командыг гаргадаг. Процессоруудад ПентуимЭнэ тушаал нь үүнд зориулагдсан юм CPUID , энэ үед процессорын тухай шаардлагатай өгөгдлийг бүртгэлд оруулна EAX,ebx,ECX,EDXДараа нь хэрэглэгч эсвэл үйлдлийн систем уншиж болно.

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

Зарим процессорууд ийм тоонуудыг боловсруулахдаа BCD арифметик үйлдлүүд эсвэл үр дүнг засах тусгай зааварчилгааг гүйцэтгэдэг. Өндөр гүйцэтгэлтэй олон процессорууд орно FPU - дугаар боловсруулах нэгжв "хөвөгч цэг".

Орчин үеийн хэд хэдэн процессоруудад хэд хэдэн бүхэл тоо эсвэл тоонуудын бүлгийн боловсруулалтыг хэрэгжүүлдэг.в зарчмын дагуу нэг тушаалаар "хөвөгч цэг" SIMD ("Нэг заавар - Олон өгөгдөл ”) - “Нэг команд – Олон өгөгдөл”. Хэд хэдэн операнд дээр үйлдлүүдийг нэгэн зэрэг гүйцэтгэх нь видео болон аудио өгөгдөлтэй ажиллахад процессорын гүйцэтгэлийг ихээхэн нэмэгдүүлдэг. Ийм үйлдлүүд нь зураг боловсруулах, аудио дохио боловсруулах болон бусад хэрэглээнд өргөн хэрэглэгддэг. Эдгээр үйлдлүүдийг гүйцэтгэхийн тулд янз бүрийн төрлийн процессоруудад холбогдох зааврын багцыг хэрэгжүүлдэг тусгай блокуудыг процессоруудад нэвтрүүлдэг. Pentium, Атлон) нэрийг авсанMMX (“ Милти- Хэвлэл мэдээллийн өргөтгөл ”) – Мультимедиа өргөтгөл,SSE(“Streaming SIMD Extension”) – Дамжуулж буй SIMD - өргөтгөл, “3 ДӨргөтгөл- 3D өргөтгөл.

Компанийн процессоруудын онцлог шинж чанар Intel , загвар 80286-аас эхлээд процессор хамгаалагдсан виртуал хаягийн горимд ажиллаж байх үед өгөгдсөн санах ойд хандах үед тэргүүлэх хяналт юм - "Хамгаалагдсан горим ” (хамгаалагдсан горим). Энэ горимыг хэрэгжүүлэхийн тулд хүлээн зөвшөөрөгдсөн тэргүүлэх хандалтын алгоритмын дагуу санах ойн хамгаалалтыг зохион байгуулахад үйлчилдэг тусгай бүлгүүдийг ашигладаг.

Сэдэв 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 төрлийн ассемблер хэллэгийг жагсаа.

МИРЗО УЛУГБЕКИЙН НЭРЭМЖИТ УЗБЕК УЛСЫН ИХ СУРГУУЛЬ

КОМПЬЮТЕР ТЕХНОЛОГИЙН ФАКУЛЬТ

Сэдвийн талаар: EXE файлын семантик задлан шинжлэх.

Дууссан:

Ташкент 2003 он.

Өмнөх үг.

Ассемблей хэл ба зааврын бүтэц.

EXE файлын бүтэц ( семантик задлан шинжлэх).

COM файлын бүтэц.

Вирус хэрхэн ажилладаг, тархдаг.

Дизассемблатор.

Програмууд.

Өмнөх үг

Програмист мэргэжил бол гайхалтай бөгөөд өвөрмөц юм. Бидний үед шинжлэх ухаан, амьдралыг энэгүйгээр төсөөлөхийн аргагүй юм хамгийн сүүлийн үеийн технологи. Хүний үйл ажиллагаатай холбоотой бүх зүйл компьютерийн технологигүйгээр бүрэн дүүрэн байдаггүй. Энэ нь түүний өндөр хөгжил, төгс төгөлдөр байдалд хувь нэмэр оруулдаг. Хэдийгээр хувийн компьютерийг хөгжүүлж эхлээд удаагүй байгаа ч энэ хугацаанд програм хангамжийн бүтээгдэхүүн болон бусад салбарт асар их алхам хийсэн. урт хугацаандэдгээр бүтээгдэхүүнийг өргөнөөр ашиглах болно. Компьютертэй холбоотой мэдлэгийн салбар, холбогдох технологи нь тэсрэлт болсон. Хэрэв бид арилжааны талыг анхаарч үзэхгүй бол мэргэжлийн үйл ажиллагааны энэ хэсэгт гадны хүмүүс байдаггүй гэж хэлж болно. Олонхи нь ашиг, орлого олох зорилгоор биш, харин өөрсдийн хүслээр, хүсэл тэмүүллээр хөтөлбөр боловсруулдаг. Мэдээжийн хэрэг, энэ нь хөтөлбөрийн чанарт нөлөөлөх ёсгүй бөгөөд энэ бизнест чанарын гүйцэтгэлийн өрсөлдөөн, эрэлт хэрэгцээ байдаг. тогтвортой ажилорчин үеийн бүх шаардлагыг хангасан. 60-аад оны үед олон тооны чийдэнг сольж ирсэн микропроцессоруудын дүр төрхийг энд тэмдэглэх нь зүйтэй. Бие биенээсээ эрс ялгаатай микропроцессорын сортууд байдаг. Эдгээр микропроцессорууд нь битийн багтаамж болон суурилуулсан системийн командын хувьд бие биенээсээ ялгаатай. Хамгийн түгээмэл нь: Intel, IBM, Celeron, AMD гэх мэт. Эдгээр бүх процессорууд нь дэвшилтэт процессорын архитектуртай холбоотой Intel компани. Микрокомпьютерийн тархалт нь үндсэн хоёр шалтгааны улмаас ассемблер хэлэнд хандах хандлагыг дахин бодоход хүргэсэн. Нэгдүгээрт, ассемблер хэл дээр бичигдсэн програмууд нь санах ой болон ажиллах хугацаа бага шаарддаг. Хоёрдугаарт, ассемблер хэлний мэдлэг ба түүнээс үүссэн машины кодын мэдлэг нь өндөр түвшний хэл дээр ажиллахад бараг өгдөггүй машины архитектурын талаархи ойлголтыг өгдөг. Ихэнх программ хангамжийн инженерүүд Паскаль, Си, Делфи зэрэг програм бичихэд хялбар, хамгийн хүчирхэг, үр дүнтэй хэлээр хөгжүүлдэг. програм хангамжбүхэлд нь эсвэл хэсэгчлэн ассемблер хэлээр бичсэн. Өндөр түвшний хэлүүд нь тодорхой компьютерийн тусгай техникийн шинж чанараас зайлсхийх зорилгоор бүтээгдсэн. Мөн угсралтын хэл нь эргээд процессорын онцлог шинж чанаруудад зориулагдсан байдаг. Тиймээс тухайн компьютерт зориулсан ассемблер хэлний программ бичихийн тулд түүний архитектурыг мэддэг байх ёстой. Өнөө үед үндсэн үзэл бодол програм хангамжийн бүтээгдэхүүн EXE файл юм. Үүний эерэг талуудыг харгалзан хөтөлбөрийн зохиогч түүний халдашгүй байдалд итгэлтэй байж болно. Гэхдээ ихэнхдээ энэ нь үүнээс хол байдаг. Мөн дизассемблатор байдаг. Дизассемблерийн тусламжтайгаар та тасалдал, програмын кодыг олж мэдэх боломжтой. Ассемблерийн талаар сайн мэддэг хүн бүхэл бүтэн хөтөлбөрийг өөрийн үзэмжээр дахин хийх нь тийм ч хэцүү биш байх болно. Магадгүй эндээс хамгийн шийдэгдээгүй асуудал болох вирус гарч ирдэг. Хүмүүс яагаад вирус бичдэг вэ? Зарим нь энэ асуултыг гайхшруулж, зарим нь уурлаж асуудаг боловч энэ ажлыг ямар нэгэн хор хөнөөл учруулах үүднээс биш, харин системийн програмчлалыг сонирхож байгаа хүмүүс байсаар байна. Вирусыг янз бүрийн шалтгаанаар бичдэг. Зарим нь системийн дуудлагад дуртай, зарим нь ассемблер дээр мэдлэгээ сайжруулдаг. Би энэ бүгдийг өөрийн нийтлэлдээ тайлбарлахыг хичээх болно курсын ажил. Энэ нь зөвхөн EXE файлын бүтцийн талаар төдийгүй ассемблер хэлний тухай өгүүлдэг.

^ Ассемблей хэл.

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

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

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

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

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

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

Ердийн орчин үеийн компьютер (i486 эсвэл Pentium дээр суурилсан) нь дараах бүрэлдэхүүн хэсгүүдээс бүрдэнэ (Зураг 1).

Цагаан будаа. 1. Компьютер ба захын төхөөрөмж

Цагаан будаа. 2. Персонал компьютерийн блок схем

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

Зураг дээрх диаграмын талаар ярилцъя. 2 бага зэрэг уламжлалт бус хэв маягаар.
Шинэ зүйлтэй уулзаж, үл мэдэгдэх зүйлийг мэдэхэд нь туслах зарим холбоог хайж олох нь хүний ​​мөн чанар юм. Компьютер ямар холбоог өдөөдөг вэ? Жишээлбэл, миний хувьд компьютер ихэвчлэн тухайн хүнтэй холбоотой байдаг. Яагаад?

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

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

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

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

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

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

Эдгээр бүртгэлийг хоёр том бүлэгт хувааж болно.

^16 захиалгат бүртгэл;

16 системийн бүртгэл.

Ассемблер хэлний программууд регистрүүдийг маш ихээр ашигладаг. Ихэнх бүртгэлүүд нь тодорхой функциональ зорилготой байдаг.

Нэрнээс нь харахад программист программуудаа бичихдээ ашиглаж болох тул хэрэглэгчийн бүртгэл гэж нэрлэдэг. Эдгээр бүртгэлд дараахь зүйлс орно (Зураг 3):

Програмистууд өгөгдөл, хаяг хадгалахад ашиглаж болох 32 битийн найман регистр (мөн ерөнхий зориулалтын бүртгэл (RON) гэж нэрлэдэг):

зургаан сегментийн бүртгэл: cs, ds, ss, es, fs, gs;

статус ба хяналтын бүртгэлүүд:

Тугнууд туг/тугуудыг бүртгэдэг;

eip/ip командын заагч бүртгэл.

Цагаан будаа. 3. i486 болон Pentium микропроцессоруудын хэрэглэгчийн бүртгэл

Эдгээр регистрүүдийн ихэнхийг яагаад ташуу зураасаар харуулсан бэ? Үгүй ээ, эдгээр нь өөр өөр регистрүүд биш - тэдгээр нь нэг том 32 битийн бүртгэлийн хэсэг юм. Тэдгээрийг программд тусдаа объект болгон ашиглаж болно. Үүнийг i8086-аас эхлээд Intel-ийн 16 битийн микропроцессорын залуу загваруудад зориулж бичсэн программуудын ажиллагааг хангах зорилгоор хийсэн. i486 болон Pentium микропроцессорууд нь ихэвчлэн 32 битийн регистртэй байдаг. Тэдний тоо, сегментийн бүртгэлээс бусад нь i8086-тай ижил боловч хэмжээс нь илүү том бөгөөд энэ нь тэдгээрийн тэмдэглэгээнд тусгагдсан байдаг.
e угтвар (Өргөтгөсөн).

^ Ерөнхий зориулалтын бүртгэл
Энэ бүлгийн бүх бүртгэлүүд нь тэдний "доод" хэсгүүдэд хандах боломжийг олгодог (3-р зургийг үз). Энэ зургийг харахад эдгээр регистрүүдийн зөвхөн доод 16 ба 8 бит хэсгүүдийг өөрөө хаяглахад ашиглаж болно гэдгийг анхаарна уу. Эдгээр регистрүүдийн дээд 16 бит нь бие даасан объект хэлбэрээр ашиглах боломжгүй. Үүнийг дээр дурдсанчлан Intel-ийн 16 битийн микропроцессорын залуу загваруудтай нийцүүлэхийн тулд хийсэн.

Ерөнхий зориулалтын регистрийн бүлэгт хамаарах регистрүүдийг жагсаацгаая. Эдгээр регистрүүд нь арифметик логик нэгжийн (ALU) доторх микропроцессорт физик байдлаар байрладаг тул тэдгээрийг ALU регистр гэж нэрлэдэг.

eax/ax/ah/al (Аккумляторын бүртгэл) - аккумлятор.
Завсрын өгөгдлийг хадгалахад ашигладаг. Зарим командуудад энэ бүртгэлийг ашиглах шаардлагатай;

ebx/bx/bh/bl (Үндсэн бүртгэл) - үндсэн бүртгэл.
Зарим объектын үндсэн хаягийг санах ойд хадгалахад ашигладаг;

ecx/cx/ch/cl (Тоолох бүртгэл) - тоолуурын бүртгэл.
Энэ нь зарим давтагдах үйлдлийг гүйцэтгэх командуудад хэрэглэгддэг. Үүний хэрэглээ нь ихэвчлэн далд бөгөөд холбогдох тушаалын алгоритмд далд байдаг.
Жишээлбэл, давталтын зохион байгуулалтын команд нь тодорхой хаяг дээр байрлах команд руу хяналтыг шилжүүлэхээс гадна ecx/cx регистрийн утгыг нэгээр задлан шинжилж, бууруулдаг;

edx/dx/dh/dl (Өгөгдлийн бүртгэл) - өгөгдлийн бүртгэл.
Яг л eax/ax/ah/al регистртэй адил завсрын өгөгдлийг хадгалдаг. Зарим тушаалууд нь үүнийг ашиглахыг шаарддаг; Зарим тушаалын хувьд энэ нь далд байдлаар тохиолддог.

Дараах хоёр регистрийг гинжин хэлхээ гэж нэрлэгддэг, өөрөөр хэлбэл тус бүр нь 32, 16, 8 битийн урттай элементүүдийн гинжийг дараалан боловсруулдаг үйлдлүүдийг дэмжихэд ашигладаг.

esi/si (Эх сурвалжийн индексийн бүртгэл) - эх сурвалжийн индекс.
Гинжин үйлдлийн энэ бүртгэл нь эх гинжин хэлхээний элементийн одоогийн хаягийг агуулна;

edi/di (Очих газрын индексийн бүртгэл) - хүлээн авагчийн (хүлээн авагчийн) индекс.
Гинжин үйлдлийн энэ бүртгэл нь очих гинжин хэлхээний одоогийн хаягийг агуулна.

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

esp/sp (Stack Pointer register) - стек заагч бүртгэл.
Одоогийн стек сегмент дэх стекийн дээд талын заагчийг агуулна.

ebp/bp (Base Pointer register) - стек фреймийн суурь заагч бүртгэл.
Стек доторх өгөгдөлд санамсаргүй хандалтыг зохион байгуулах зориулалттай.

Стек нь дурын өгөгдлийг түр хадгалахад зориулагдсан програмын талбар юм. Мэдээжийн хэрэг, өгөгдлийг өгөгдлийн сегментэд бас хадгалж болно, гэхдээ энэ тохиолдолд түр хадгалагдсан өгөгдөл бүрийн хувьд тусдаа нэртэй санах ойн нүдийг үүсгэх шаардлагатай бөгөөд энэ нь програмын хэмжээ болон ашигласан нэрсийн тоог нэмэгдүүлдэг. Стекийн тав тухтай тал нь түүний талбайг дахин ашигладаг бөгөөд өгөгдлийг стек дээр хадгалах, тэндээс татаж авах нь ямар ч нэр зааж өгөхгүйгээр үр дүнтэй push болон pop командуудыг ашиглан хийгддэг.
Стекийг уламжлалт байдлаар жишээ нь дэд программыг дуудахын өмнө программын ашигладаг регистрүүдийн агуулгыг хадгалахад ашигладаг бөгөөд энэ нь эргээд процессорын бүртгэлийг "өөрийн зорилгоор" ашиглах болно. Дэд программаас буцаж ирэхэд регистрүүдийн анхны агуулга нь стекээс алдагдсан байна. Өөр нэг нийтлэг арга бол шаардлагатай параметрүүдийг стекээр дамжуулан дэд программд дамжуулах явдал юм. Дэд програм нь параметрүүдийг стек дээр ямар дарааллаар байрлуулж байгааг мэдэж байгаа тул тэдгээрийг тэндээс авч, гүйцэтгэлдээ ашиглаж болно. Онцлог шинж чанарстек нь түүнд агуулагдах өгөгдлийн түүвэрлэлтийн нэг төрөл юм: ямар ч үед зөвхөн дээд элемент нь стек дээр байдаг, өөрөөр хэлбэл. стек дээр ачаалагдсан сүүлчийн элемент. Стекээс дээд элементийг нээснээр дараагийн элементийг ашиглах боломжтой болно. Стекийн элементүүд нь стекийн доод хэсгээс (өөрөөр хэлбэл түүний хамгийн их хаягаас) дараалсан буурдаг хаягууд хүртэл стект зориулагдсан санах ойн хэсэгт байрладаг. Дээд талын хүртээмжтэй элементийн хаяг нь стек заагч регистр SP-д хадгалагдана. Програмын санах ойн бусад талбайн нэгэн адил стек нь зарим сегментэд багтах эсвэл тусдаа сегмент үүсгэх ёстой. Аль ч тохиолдолд тухайн сегментийн сегментийн хаягийг сегментийн стек регистр SS-д байрлуулна. Тиймээс SS:SP хос регистрүүд нь боломжтой стек нүдний хаягийг тодорхойлдог: SS нь стекийн сегментийн хаягийг, SP нь стек дээр хадгалагдсан сүүлийн өгөгдлийн офсетийг хадгалдаг (Зураг 4, а). Анхны төлөвт стек заагч SP нь стекийн ёроолд оршдог, дотор нь ороогүй нүдийг зааж байгааг анхааръя.

Зураг 4. Стекийн зохион байгуулалт: a - анхны төлөв, b - нэг элементийг ачаалсны дараа (энэ жишээнд AX регистрийн агуулга), в - хоёр дахь элементийг ачаалсны дараа (DS регистрийн агуулга), d - нэгийг буулгасны дараа. элемент, e - хоёр элементийг буулгасны дараа анхны төлөв рүү буцна.

Стек рүү ачаалах нь тусгай түлхэх стек командаар хийгддэг. Энэ заавар нь эхлээд стек заагчийн агуулгыг 2-оор багасгаж, дараа нь операндыг SP дахь хаяг дээр байрлуулна. Жишээлбэл, бид AX регистрийн агуулгыг стек дээр түр хадгалахыг хүсвэл бид тушаалыг гүйцэтгэх ёстой.

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

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

поп DS
поп AX

Стек хэр том байх ёстой вэ? Энэ нь хөтөлбөрт хэр эрчимтэй ашиглагдаж байгаагаас хамаарна. Жишээлбэл, хэрэв та 10,000 байт массивыг стек дээр хадгалахаар төлөвлөж байгаа бол стек хамгийн багадаа ийм хэмжээтэй байх ёстой. Зарим тохиолдолд стекийг систем автоматаар ашигладаг, ялангуяа int 21h тасалдлын командыг гүйцэтгэх үед үүнийг санах нь зүйтэй. Энэ командын тусламжтайгаар процессор эхлээд буцах хаягийг стек рүү түлхэж, дараа нь DOS нь регистрүүдийн агуулга болон тасалдсан програмтай холбоотой бусад мэдээллийг тэнд оруулдаг. Тиймээс, програм нь стекийг огт ашигладаггүй байсан ч энэ нь програмд ​​байх ёстой бөгөөд дор хаяж хэдэн арван үгийн хэмжээтэй байх ёстой. Эхний жишээн дээр бид стек дээр 128 үг оруулсан нь мэдээж хангалттай.

^ Ассемблей программын бүтэц

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

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

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

макро командууд - орчуулгын явцад өөр өгүүлбэрээр солигдсон програмын текстийн өгүүлбэрүүд;

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

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

^ Ассемблей хэлний синтакс

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

Цагаан будаа. 5. Ассемблер өгүүлбэрийн хэлбэр

Цагаан будаа. 6. Удирдамжуудыг форматлах

Цагаан будаа. 7. Команд болон макросын формат

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

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

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

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

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

^ Синтакс диаграммыг хэрхэн ашиглах вэ? Энэ нь маш энгийн: таны хийх ёстой зүйл бол диаграмын оролтоос (зүүн талд) гаралт (баруун) хүртэлх замыг олоход л хангалттай. Хэрэв ийм зам байгаа бол өгүүлбэр, бүтэц нь синтаксийн хувьд зөв болно. Хэрэв ийм зам байхгүй бол хөрвүүлэгч энэ бүтцийг хүлээж авахгүй. Синтакс диаграммтай ажиллахдаа сумаар заасан тойрч гарах чиглэлийг анхаарч үзээрэй, учир нь замуудын дунд баруунаас зүүн тийш явж болох замууд байж болно. Үнэн хэрэгтээ синтакс диаграммууд нь програмын оролтын өгүүлбэрийг задлан шинжлэхэд орчуулагчийн логикийг тусгадаг.

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

Бүх латин үсэг: A-Z, a-z. Энэ тохиолдолд том ба жижиг үсгийг тэнцүү гэж үзнэ;

0-ээс 9 хүртэлх тоо;

Тэмдгүүд?, @, $, _, &;

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

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

Токенууд нь:

Тодорхойлогч нь үйлдлийн код, хувьсагчийн нэр, шошгоны нэр зэрэг програмын объектуудыг тодорхойлоход хэрэглэгддэг хүчинтэй тэмдэгтүүдийн дараалал юм. Тодорхойлогч бичих дүрэм нь дараах байдалтай байна: танигч нь нэг буюу хэд хэдэн тэмдэгтээс бүрдэж болно. Тэмдэгтийн хувьд та Латин цагаан толгойн үсэг, тоо болон заримыг ашиглаж болно тусгай дүрүүд- _, ?, $, @. Тодорхойлогч цифрээр эхэлж болохгүй. Орчуулагч зөвхөн эхний 32 тэмдэгтийг хүлээн авч, үлдсэнийг нь үл тоомсорлодог боловч танигчийн урт нь 255 тэмдэгт хүртэл байж болно. Та сонголтыг ашиглан боломжит танигчийн уртыг тохируулж болно тушаалын мөр mv. Нэмж дурдахад, орчуулагчдаа том, жижиг үсгийг ялгах эсвэл тэдгээрийн ялгааг үл тоомсорлохыг хэлэх боломжтой (энэ нь анхдагчаар хийгддэг).

^ Ассемблей хэлний командууд.

Ассемблерийн командууд нь тэдний шаардлагыг компьютерт шилжүүлэх, логик харьцуулалт, програм зохион байгуулалтад зориулсан программ дахь хяналтыг шилжүүлэх механизм (гогцоо ба үсрэлт) -ийг нээж өгдөг. Гэсэн хэдий ч програмчлалын даалгавар нь тийм ч хялбар биш юм. Ихэнх программууд нь тодорхой шаардлагад хүрэх хүртэл хэд хэдэн зааврыг давтдаг цуврал гогцоо, хэд хэдэн үйлдлийн алийг нь гүйцэтгэхийг тодорхойлох янз бүрийн шалгалтуудыг агуулдаг. Зарим тушаалууд нь командын заагч дахь офсет утгыг шууд өөрчлөх замаар алхмуудын ердийн дарааллыг өөрчлөх замаар хяналтыг шилжүүлж болно. Өмнө дурьдсанчлан, өөр өөр процессоруудад өөр өөр тушаалууд байдаг боловч бид 80186, 80286, 80386 процессоруудад зориулсан хэд хэдэн тушаалуудыг авч үзэх болно.

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

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

1 - тушаалыг гүйцэтгэсний дараа туг тавьсан (1-тэй тэнцүү);

0 - тушаалыг гүйцэтгэсний дараа туг дахин тохируулагдана (0-тэй тэнцүү);

r - тугийн утга нь тушаалын үр дүнгээс хамаарна;

Тушаалыг гүйцэтгэсний дараа туг тодорхойгүй болно;

зай - тушаалыг гүйцэтгэсний дараа туг өөрчлөгдөхгүй;

Синтакс диаграммд операндуудыг төлөөлөхийн тулд дараах тэмдэглэгээг ашигладаг.

r8, r16, r32 - байт, үг эсвэл давхар үгийн хэмжээтэй регистрүүдийн аль нэг дэх операнд;

m8, m16, m32, m48 - байт, үг, давхар үг эсвэл 48 битийн санах ойн хэмжээтэй операнд;

i8, i16, i32 - байт, үг эсвэл давхар үгийн шууд операнд;

a8, a16, a32 - кодын сегмент дэх харьцангуй хаяг (офсет).

Тушаалууд (цагаан толгойн үсгийн дарааллаар):

*Эдгээр тушаалуудыг дэлгэрэнгүй тайлбарласан болно.

НЭМЭХ
(Нэмэлт)

Нэмэлт

^ Тушаалын тойм:

очих газар, эх сурвалж нэмэх

Зорилго: байт, үг эсвэл давхар үгийн хэмжээсийн хоёр эх ба очих операндыг нэмэх.

Ажлын алгоритм:

эх сурвалж болон очих операндуудыг нэмэх;

нэмэлтийн үр дүнг хүлээн авагчид бичих;

тугуудыг тавих.

Командыг гүйцэтгэсний дараах тугуудын төлөв:

Хэрэглээ:
Нэмэх команд нь хоёр бүхэл тоон операнд нэмэхэд хэрэглэгддэг. Нэмэлтийн үр дүнг эхний операндын хаяг дээр байрлуулна. Нэмэлтийн үр дүн нь очих операндын хязгаараас хэтэрвэл (халих үүснэ) cf тугийг шинжилж, дараа нь adc командыг ашиглан энэ байдлыг харгалзан үзэх шаардлагатай. Жишээлбэл, регистрийн тэнхлэг ба санах ойн ch хэсэгт утгуудыг нэмье. Нэмэхдээ халих магадлалыг анхаарч үзэх хэрэгтэй.

Бүртгүүлэх нэмэх регистр эсвэл санах ой:

|000000dw|modregr/rm|

AX (AL) болон шууд утгыг бүртгэнэ:

|0000010w|--өгөгдөл--|хэрэв w=1| өгөгдөл

Бүртгэл эсвэл санах ой болон шууд үнэ цэнэ:

|100000sw|mod000r/m|--өгөгдөл--|өгөгдөл бол BW=01|

ДУУДЛАГА
(ДУУДЛАГА)

Процедур эсвэл даалгавар дуудах

^ Тушаалын тойм:

Зорилго:

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

даалгавар солих.

Ажлын алгоритм:
операндын төрлөөр тодорхойлогддог:

Шошго ойрхон байна - eip / ip командын заагчийн агуулгыг стек рүү түлхэж, шошготой харгалзах шинэ хаягийн утгыг ижил бүртгэлд ачаална;

Алсын шошго - eip/ip болон cs командын заагчийн агуулгыг стек рүү түлхдэг. Дараа нь алсын тэмдэгттэй харгалзах хаягийн шинэ утгыг ижил бүртгэлд ачаална;

R16, 32 эсвэл m16, 32 - хяналтыг шилжүүлж байгаа одоогийн заавар сегмент дэх офсетийг агуулсан бүртгэл эсвэл санах ойн нүдийг тодорхойлно. Хяналтыг шилжүүлэх үед eip/ip командын заагчийн агуулгыг стек рүү түлхдэг;

Санах ойн заагч - дуудаж буй процедурын 4 эсвэл 6 байт заагч агуулсан санах ойн байршлыг тодорхойлно. Ийм заагчийн бүтэц нь 2+2 эсвэл 2+4 байт байна. Ийм заагчийг тайлбарлах нь микропроцессорын ажиллах горимоос хамаарна.

^ Тушаалыг гүйцэтгэсний дараах тугуудын төлөв (даалгавар солихоос бусад):

тушаалын гүйцэтгэл нь тугуудад нөлөөлөхгүй

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

Объект код (дөрвөн формат):

Сегмент дэх шууд хаяглалт:

|11101000|дип-бага|дип-өндөр|

Сегмент дэх шууд бус хаяглалт:

|11111111|mod010r/m|

Сегмент хоорондын шууд бус хаяглалт:

|11111111|mod011r/m|

Сегмент хоорондын шууд хаяглалт:

|10011010|офсет-бага|офсет-өндөр|сег-бага|сег-өндөр|

CMP
(операндуудыг харьцуулах)

Операнд харьцуулалт

^ Тушаалын тойм:

cmp операнд1, операнд2

Зорилго: хоёр операндыг харьцуулах.

Ажлын алгоритм:

хасах үйлдэл хийх (operand1-operand2);

үр дүнгээс хамааран тугуудыг тавьж, операнд1 ба операнд2-ыг бүү өөрчил (өөрөөр хэлбэл үр дүнг хадгалахгүй).

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

Объектын код (гурван формат):

Бүртгэгдсэн эсвэл бүртгэгдсэн санах ой:

|001110dw|modreg/m|

AX (AL) бүртгэлтэй шууд утга:

|0011110w|--өгөгдөл--|хэрэв w=1| өгөгдөл

Бүртгэл эсвэл санах ойтой шууд утга:

|100000sw|mod111r/m|--өгөгдөл--| sw=0 бол өгөгдөл|

ДЕК
(1-ээр бууруулах операнд)

Операнд нэгээр буурах

^ Тушаалын тойм:

dec операнд

Зорилго: санах ой дахь операнд эсвэл бүртгэлийн утгыг 1-ээр багасгах.

Ажлын алгоритм:
заавар нь операндаас 1-ийг хасна. Командыг гүйцэтгэсний дараах тугуудын төлөв:

Хэрэглээ:
Dec команд нь санах ой дахь байт, үг, давхар үгийн утгыг нэгээр багасгах эсвэл бүртгэлийн утгыг багасгахад хэрэглэгддэг. Энэ тушаал нь cf флагт нөлөөлөхгүй гэдгийг анхаарна уу.

Бүртгүүлэх: |01001reg|

^ Бүртгэл эсвэл санах ой: |1111111w|mod001r/m|

DIV
(Гарын үсэггүй хуваах)

Хэлтэс гарын үсэг зураагүй

Тушаалын схем:

div хуваагч

Зорилго: хоёртын тэмдэггүй утгууд дээр хуваах үйлдлийг гүйцэтгэх.

^ Ажлын алгоритм:
Команд нь ногдол ашиг ба хуваагч гэсэн хоёр операндыг шаарддаг. Ногдол ашгийг далд хэлбэрээр зааж өгсөн бөгөөд түүний хэмжээ нь дараах тушаалд заасан хуваагчийн хэмжээнээс хамаарна.

хэрэв хуваагч нь байтаар байвал ногдол ашгийг регистрийн тэнхлэгт байрлуулах ёстой. Үйл ажиллагаа дууссаны дараа коэффициентийг al-д, үлдсэнийг нь ah-д байрлуулна;

хэрэв хуваагч нь үг бол ногдол ашгийг dx:ax регистрийн хосод, ногдол ашгийн бага хэсгийг ax дээр байрлуулах ёстой. Үйлдлийн дараа коэффициентийг сүх, үлдсэнийг dx-д байрлуулна;

хэрэв хуваагч нь давхар үг бол ногдол ашиг нь edx:eax регистрийн хосод байх ёстой бөгөөд ногдол ашгийн бага хэсгийг eax дээр байрлуулна. Үйлдлийн дараа коэффициентийг eax-д, үлдсэнийг нь edx-д оруулна.

^ Тушаал гүйцэтгэсний дараах тугуудын төлөв:

Хэрэглээ:
Энэ тушаал нь операндуудын бүхэл тоонд хуваагдах үйлдлийг гүйцэтгэж, хуваалтын үр дүнг хуваалт болон үлдсэн хэсгийг буцаана. Хуваах үйлдлийг гүйцэтгэх үед үл хамаарах зүйл тохиолдож болно: 0 - хуваах алдаа. Энэ нөхцөл байдал нь хоёр тохиолдлын аль нэгэнд тохиолддог: хуваагч нь 0, эсвэл хуваагч нь eax/ax/al регистрт багтахааргүй том байна.

Объект код:

|1111011w|mod110r/m|

INT
(Тасалдал)

Тасалдлын үйлчилгээний горимыг дуудаж байна

^ Тушаалын тойм:

int тасалдлын_тоо

Зорилго: зааврын операндоор заасан тасалдлын дугаараар тасалдлын үйлчилгээний горимыг дуудах.

^ Ажлын алгоритм:

далбаа/туг бүртгэл болон буцах хаягийг стек рүү түлхэнэ үү. Буцах хаягийг бичихдээ эхлээд cs сегментийн регистрийн агуулгыг, дараа нь eip/ip командын заагчийн агуулгыг бичнэ;

if болон tf тугуудыг тэг болгож дахин тохируулах;

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

^ Тушаал гүйцэтгэсний дараах тугуудын төлөв:

Хэрэглээ:
Синтаксаас харахад энэ тушаалын хоёр хэлбэр байдаг:

int 3 - өөрийн гэсэн 0cch үйлдлийн кодтой бөгөөд нэг байт эзэлнэ. Энэ нөхцөл байдал нь аливаа зааврын эхний байтыг солих замаар таслах цэгийг тохируулахын тулд янз бүрийн програм хангамжийн дибаггерт ашиглахад маш тохиромжтой болгодог. Микропроцессор нь командуудын дарааллаар 0cch opcode-тэй командтай тулгараад програм хангамжийн дибаглагчтай холбогдоход үйлчилдэг векторын дугаар 3-тай тасалдал зохицуулагчийг дууддаг.

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

Объект код (хоёр формат):

Бүртгүүлэх: |01000reg|

^ Бүртгэл эсвэл санах ой: |1111111w|mod000r/m|

JCC
JCXZ/JECXZ
(Нөхцөл бол үсрэх)

(CX=Тэг бол үсрэх/ ECX=Тэг бол үсрэх)

Хэрэв нөхцөл хангагдсан бол үсрэх

Хэрэв CX/ECX тэг бол үсрэх

^ Тушаалын тойм:

jcc шошго
jcxz шошго
jecxz шошго

Зорилго: зарим нөхцөл байдлаас шалтгаалан одоогийн командын сегмент дотор шилжих.

^ Тушаалын алгоритм (jcxz/jecxz-аас бусад):
Опкодоос хамааран тугуудын төлөвийг шалгаж байна (энэ нь шалгаж буй нөхцөл байдлыг илэрхийлнэ):

хэрэв шалгаж буй нөхцөл үнэн бол операндоор заасан нүд рүү очно уу;

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

jcxz/jecxz тушаалын алгоритм:
ecx/cx регистрийн агуулга тэгтэй тэнцүү байх нөхцөлийг шалгаж байна:

шалгасан нөхцөл бол