|
MD maydoni
r/m maydoni
|
bet | 9/64 | Sana | 13.05.2024 | Hajmi | 183,36 Kb. | | #230077 |
Bog'liq Системное программирование, практикаMD maydoni
r/m maydoni
|
o'n bir
|
00
|
01
|
10
|
|
W=0
|
W=1
|
|
|
|
000
|
AL
|
AX
|
BX+SI
|
BX+SI+D8
|
BX+SI+D16
|
001
|
C.L.
|
CX
|
BX+DI
|
BX+DI+D8
|
BX+DI+D16
|
010
|
D.L.
|
DX
|
BP+SI
|
BP+SI+D8
|
BP+SI+D16
|
011
|
B.L.
|
BX
|
BP+DI
|
BP+DI+D8
|
BP+DI+D16
|
100
|
A.H.
|
SP
|
S.I.
|
SI+D8
|
SI+D16
|
101
|
CH
|
B.P.
|
D.I.
|
DI+D8
|
DI+D16
|
110
|
D.H.
|
S.I.
|
D16)*
|
BP+D8
|
BP+D16
|
111
|
B.H.
|
D.I.
|
BX
|
BX+D8
|
BX+D16
|
Operand xotirada bo'lsa, maydon md disp ( Deplasman ) buyrug'i ichida foydalanish holatini belgilaydi , 3 va 4 baytlarda joylashgan:
md =00, disp =0;
md =01, disp =disp L -imzolangan 8-bitli ofset ( D 8), EA samarali manzilini hisoblashda 16 bitgacha kengaytirilgan;
md =10, disp =disp H, disp L - imzolangan 16-bitli ofset ( D 16).
Bunday holda, maydonni kodlash reg ikkinchi operand yoki maydon r/m birinchi operand qachon md = 11 parametr qiymatiga qarab registr turini aniqlaydi w. Da md ¹ 11 tasi amalga oshirilmoqda bilvosita manzillash turlari jadvalda aks ettirilgan xotira. 1.3 (istisno bundan mustasno to'g'ridan-to'g'ri murojaat qilish da
r/m = 110 va md = 00). Shunday qilib, protsessorda men 8086 amalga oshirildi
Samarali manzilni hisoblash uchun 24 ta variant (8*3). EA.
jadval – Adreslashning bilvosita turlari
Manzillash turi
|
EA hisoblash usuli
|
Tsikllar soni
|
Bilvosita
Asosiy yoki indeks
Ofsetsiz asosiy indeks
Ofset bilan asosiy indeks
|
[BX], [BP], [SI], [DI]
[BX+, BP+, SI+, DI+disp]
[BP+DI], [BX+SI]
[BP+SI], [BX+DI]
[BP+DI+disp]
[BX+SI+disp]
[BP+SI+disp]
[BX+DI+disp]
|
5
6
7
8
o'n bir
o'n bir
12
13
|
Eslatma . Keling, atamani ishlatishning ikkita holati o'rtasidagi semantik farqni ta'kidlaylik ofset . Tarafsizlik Buyruqdagi disp samarali manzilni hisoblashda ishtirok etadigan imzolangan raqam sifatida talqin etiladi. E.A Boshqa tomondan, segmentlangan xotira tashkiloti tufayli samarali manzil E.A. segmentning asosiy manziliga nisbatan OFFSET ofsetidir va baholanganda imzosiz raqam sifatida talqin etiladi. jismoniy manzil.
Jismoniy manzilni hisoblashda samarali manzil (yoki ofset Ofset ) katta-kichik bo‘laklarga bo‘linadi ds (ma'lumotlar segmenti) shakllanishdan tashqari barcha hollarda E.A. segment registri ishtirok etadi bp . Case foydalanish bp shakllanishida E.A. manzil segmentatsiyasini oldindan belgilaydi ro'yxatga olish orqali ss (stek segmenti). Standartni o'zgartirish uchun (shuningdek, 3-jadval, § 5-ga qarang) manzil segmentatsiyasi, maxsus bir baytli segmentni almashtirish prefiksi buyrug'i taqdim etiladi:
001 S reg 110 - almashtirish prefiksi buyruq formati .
Agar buyruq oldidan almashtirish prefiksi bo'lsa, buyruqni bajarish paytida ma'lumotlarga kirishda prefiksdan segment registridan foydalaniladi. Maydonni kodlash S reg prefiksda: 00 - es , 01 - cs , 00 - ss , 11 - ds .
Shaklda. 2 b To'g'ridan-to'g'ri operandga ega bo'lgan ikki operandli buyruqning formati ko'rsatilgan. Ushbu formatda ikkinchi operand va maydonga murojaat qilishning hojati yo'q reg maydonni kengaytirish uchun berilgan COP . Bundan tashqari, yo'nalish bit d yo'q , chunki operatsiya natijasi birinchi operand o'rniga joylashtiriladi. Bit joylashuvi d biroz oldi s , uning funktsiyalari quyidagicha aniqlanadi:
sw = X 0, ma'lumotlar = ma'lumotlar L -bir bayt ma'lumotlar;
sw = 01, ma'lumotlar = dataH , dataL - ikki bayt ma'lumotlar;
sw = 11, ma'lumotlar = ma'lumotlarL – imzolangan-ikki baytga kengaytirilgan bir bayt ma’lumotlar.
Baytdan keyingi adreslash universal adreslash bo'lib, umumiy registrlar va xotira joylarini manzillash imkonini beradi. Biroq, faqat registrlar yoki akkumulyatorga murojaat qilganda ACC maydon bo'lsa, postbayt ortiqcha bo'ladi reg buyrug'ining birinchi baytida yoki yashirin adreslashdan foydalaning. Bu xususiyat baytlarning minimal sonini o'z ichiga olgan va tanlangan maxsus qisqartirilgan formatlarda amalga oshiriladi Turbo yig'uvchi yig'ish jarayonida.
Yig'ish ko'rsatmalarini ikkilik kodlash quyidagi ketma-ketlikda bajarilishi tavsiya etiladi:
– buyruqlar ma’lumotnoma ro‘yxatida muqobil buyruq yozuvlaridan biriga mos keladigan buyruqning umumlashtirilgan ko‘rinishini topamiz (P. 1.1-ilova);
- buyruqning tanlangan umumlashtirilgan ko'rinishi uchun jadvaldan uning formatini yozing;
– ma’lumotlar formatini, registrlarni kodlash usulini va xotirada joylashgan operand uchun manzil ifodasi turini hisobga olgan holda (2-jadval) buyruqda ko‘rsatilgan maydonlar uchun ikkilik kodni aniqlaymiz;
– buyruqning bayt-strukturali mashina kodini 16-terriar belgilar yordamida yozamiz. Olingan kod oynadan mos keladigan buyruqning mashina kodiga mos kelishi kerak CPU Turbo tuzatuvchisi ko'rib chiqilayotgan fayl uchun.
Misol sifatida, quyida biz fayldan olingan uchta montaj ko'rsatmalarining mashina kodlashini ko'rib chiqamiz mov.asm . Oyna mashina kodini tekshirish uchun manba sifatida ishlatilgan Markaziy protsessor Turbo tuzatuvchi .
Dataseg
w_x dw 8,16,32,64 ;Ofset w_x = 0004h
Codeseg
cs:000C – BB0400 mov bx,ofset w_x ; bevosita murojaat qilish
cs:0014 – 8B160400 mov dx,[w_x] ;to‘g‘ridan-to‘g‘ri manzillash
cs:002C – C747021800 mov [bx+2 so‘zi],24 ;asosiy manzillash
jamoa: mov bx, ofset w_x. Ro'yxatdan o'tish uchun bx olib kir ofset o'zgaruvchan w_x .
1) Buyruqning ma'lumotnomasi ma'lumotlari:
mov r 16, d 16 ←→ 1011- w - reg dataL ( dataH )
2) Paragraflarda belgilangan buyruq maydonlarini kodlash. 1:
– w = 1, chunki ma'lumotlar formati so'z ;
- maqsad operandi: reg = kod ( bx )= 011 ;
– operand – manba: ma'lumotlar H : dataL = ofset w_x = 00 soat : 04 soat - 16 bitli o'zgaruvchan manzil w_x ma'lumotlar segmentida. Ushbu manzilni faylning ma'lumotlar xotirasidagi o'zgaruvchilar ro'yxatiga qarab osongina hisoblash mumkin mov . asm .
3) Mashina kodi quyidagicha: 04:00 = BB 04 00 soat
jamoa: mov dx , [ w_x ] . Ro'yxatdan o'tish uchun dx o'zgaruvchining qiymatini kiriting w_x .
1) Buyruqning ma'lumotnomasi ma'lumotlari:
mov r 16, r 16/ m 16 ←→ 1000101- w md - reg - r / m ( dispL dispH )
2) Paragraflarda belgilangan buyruq maydonlarini kodlash. 1
- w = 1, chunki ma'lumotlar formati so'z ;
- maqsad operandi: reg = kod ( dx ) = 010 ;
– manba operand: o‘zgaruvchi manziliga havola mazmuni w_x . sifatida belgilangan manzil ifodasi bilan to'g'ridan-to'g'ri adreslash D 16 { m d = 00, r / m = 110} jadvalda 1.2. Manzil qiymati D 16 = dispH : dispL = ofset w_x = 00 h :04 h fayl ma'lumotlar xotirasidagi o'zgaruvchilar ro'yxatini ko'rish orqali aniqlanadi mov . asm .
3) Mashina kodi quyidagicha:
1000101-1 00-010-110 04 soat 00 = 8B 16 04 00
jamoa : mov [so'z bx+2],24. Manzildagi xotira katakchasiga [bx+2] , unga ikki bayt (so'z) ajratgan holda doimiy 24 ni kiriting .
1) Buyruqning ma'lumotnomasi ma'lumotlari:
mov r 16/ m 16, d 16 ↔ 1100011- w md -000- r / m ( dispL dispH ) ma'lumotlarL ma'lumotlarH
2) Paragraflarda belgilangan buyruq maydonlarini kodlash. 1:
- w = 1, chunki ma'lumotlar formati so'z ;
– maqsad operandi: manzil ifodasi bilan aniqlangan xotira joylashuvi [ so'z dx + 2] = [ d x + d8] postbayt maydonlarini quyidagicha belgilaydi: md = 01, r / m = 111 ;
- jamoa ichidagi tarafkashlik d 8 = dispL = 02 soat , maydon dispH istisno qilingan ;
– manba operand konstantasi 24 = 00 18 h , chunki ma'lumotlar formati so'z .
3) Mashina kodi quyidagicha:
1100011-1 01-000-111 02 18 00 = C 7 47 02 18 00 h
32-bitli registrlardan foydalanish
Haqiqiy rejim 32 bitli registrlarga ruxsat beradi (eax, ebx, ecx, edx, esi, edi, ebp, esp) ma'lumotlarni saqlash uchun ham, 32-bitli manzil ifodalarini yaratish uchun ham. 32-bitli adreslash, shuningdek, mashina ko'rsatmalarini kodlashning yana bir (murakkab) usulini o'z ichiga oladi, bunda postbayt bilan bir qatorda manzil spesifikacisi - bayt ishtirok etadi. sib (1.4-rasmga qarang). Shuningdek, segment o'lchami spetsifikatsiyasini ko'rsatishingiz kerak 16 dan foydalaning standart segmentni boshqarish direktivalaridan foydalanganda, masalan:
P486n
Segmentli matndan foydalanish16
|
| |