Slide da Intel su Assembly Intel 8086. Il Pdf esplora le modalità di indirizzamento dell'Assembly Intel 8086, con esempi di codice per l'indirizzamento immediato, da registro a registro e diretto, utile per lo studio universitario di Informatica.
Mostra di più19 pagine


Visualizza gratis il Pdf completo
Registrati per accedere all’intero documento e trasformarlo con l’AI.
D8086 L3093607 |INTEL@1978 seg000:0000 seg000:0000 loc_0: ; CODE XREF: seg000:00074j seg000:0000 ; seg000: loc_104j ... seg000:0000 mov ax, 1999h seg000:0003 cmp ds : 4206h, ax seg000:0007 jnz short loc_0 seg000:0009 mov ax, 2121h seg000:000C cmp ds : 4114h, ax seg000:0010 seg000:0010 loc_10: ; DATA XREF: seg000:00304r seg000:0010 ; seg000:00394r seg000:0010 jnz short loc_0 seg000:0012 mov ax, OF66Dh seg000:0015 cmp ds : 1928h, ax seg000:0019 jns short loc_0 seg000:001B mov ax, 1 seg000:001E cmp ds: 334h, ax seg000:0022 js short loc_0 seg000:0024 mov ax, 1 seg000:0027 add ds : 1234h, ax seg000:002B jnb short loc_0 seg000:002D mov ax, 10h seg000:0030 cmp word ptr ds : loc_10+1, ax seg000:0034 jnz short loc_0 seg000:0036 mov ax, 10h seg000:0039 cmp word ptr ds : loc_10+1, ax seg000:003D jnz short loc_0 seg000:003F retn seg000:003F seg000 ends
MOV AL, 4Dh · L'indirizzamento immediato consiste nel fornire direttamente al processore il valore che si desidera utilizzare. · Questo valore viene inserito direttamente nell'istruzione ed è rappresentato in notazione esadecimale o decimale. · Ad esempio, l'istruzione MOV AL, 4Dh utilizza la modalità di indirizzamento immediato per caricare il valore 4Dh nel registro AL.
MEMORIA CENTRALE codice · macchina della MOV CPU REGISTRO AX .. .. 4 | D . . ... 4 D Data Bus 1 dato contenuto nella MOV valori qualsiasi già precedentemente presenti in AX
01 02 03 04 05 06 07 08 09 10 11 12 13 14 . model small . data . code main proc MOV AX, @data MOV DS, AX MOV AL , 4Dh main endp end
registers registers 0710:0005 " original source code AX 97 4D 070FD: 00 000 NI- AX 07 070FD: 00 000 NA 01 . model small BX 515 070FF : 00 000 NI 03 CX 07 07100: B8 184 C 04 . code DX 515 315 DX 07101: 10 016 05 main proc CS 0710 07103: 8E 142 Ä 07 MOV DS, AX IP 0007 SS 0716 07106: 4D 077 M SP 071078 70 11 BF 07109: 90 144 É 07109: 90 144 12 main endp end SI 0710A: 90 144 É 0710A: 90 144 É 13 14 DI 0710B: 90 144 É 15 DS 0710 0710D: 90 144 É 16 ES 0700 0710E: 90 144 É ES 0705 0710E: 90 144 É 0710F: 90 144 É " original source code H L 01 . model small 02 . data CX 07 07100: B8 184 C 04 . code 07102: 07 007 BI CS 0710 07103: 8E 142 Ä IP 0005 07105: BO 176 09 MOV AL, 4Dh SS 0710 0/105: 07106: 4D 177 IM 10 SF 07108: 90 144 E 07108: 90 144 É 12 main endp end SI 0710B: 90 144 É 15 0710C: 90 144 É DS 0710 0710D: 90 144 É 16 · L'istruzione MOV AL,4Dh si trova in memoria nelle due celle con indirizzo fisico 07105h e 07106h. · Il valore che il processore deve utilizzare, ovvero 4Dh, si trova già dentro l'istruzione. · In particolare il valore 4Dh si trova nella cella con indirizzo fisico 07106h. BX 070FE: 00 000 NI 02 . data 070FF: 00 000 NI 03 07101: 10 016 05 main proc 07102: 07 007 B Ï 08 08 176 09 MOV AL , 4Dh Dopo l'execute 07107: 90 144 É 11 BF 07104: D8 216 Ï 06 MOV AX, @data 07104: D8 216 06 MOV AX, @data 07 MOV DS, AX 10 144 E 13 14 DI 0710C: 90 144 É H L
MOV AX, BX · Entrambi gli operandi sono registri · Questo metodo di indirizzamento non coinvolge la memoria centrale e i bus esterni · L'esecuzione avviene tutta nella cpu dove si trovano i registri
CPU AX 2 D E 1 1 Bus interno BX 2 D E 1
01 . model small 02 03 04 . data . code 05 06 main proc MOV AX, @data MOV DS, AX 07 08 09 MOV AX, 0000h 10 MOV BX, 8A5Eh 11 MOV AX, BX 12 13 14 15 16 main endp end
registers 0710:0008 H L AX 0/100: B8 184 @ 01 . model small AX 8A 5E 0/100: B8 184 @ 4 01 . model small 02 . data BX 8A 5E 07102: 07 007 BI 04 . code CX 515 OD 07103: 8E 142 Ä 04 . code 05 06 main proc MOV AX, @data DX 07105: B8 184 G CS 0710 07106: 00 000 NI 07 MOV DS, AX CS 0716 07106: 00 000 N IP 0008 07107: 00 000 NI Dopo l'execute IP 000D 07107: 00 000 NI MOV AX, 0000h SS 0716 07109: 5E 094 1 SP 0710A: 8A 138 è 12 BP 0710B: 8B 139 1 13 SI 0710D: 90 144 É 15 14 main endp end DI 0710E: 90 144 É DI 0710F: 90 144 É DS 0716 07110: 90 144 E 18 ES 0705 07111: 90 144 É 07119. 90 144 6 07110. on 14/ 2 " original source code registers 0710:000B @ original source code 02 BX 8A 5E 07102: 07 007 BI 03 03 CX GD DX 07103: 8E 142 D8 216 07104: 07104: D8 216 07105: B8 184 06 MOV AX, @data 07 MOV DS, AX 08 SS 5710 07109: 5E 094 MOV BX, 8A5Eh SP 0710A: 8A 138 è 12 BP 0/10B: 8B 139 0710C: 13 SI 0710D: C3 195 - 90 144 É 14 main endp 0710E : 90 144 É 0710F: 90 144 É DS 0716 07110: 90 144 É 18 ES 07111: 90 144 É 15 end 16 17 ● In memoria c'è solo il codice operativo dell'istruzione AX,BX ovvero 8BC3h (in binario:10001011 11000011). · Il valore 8A5Eh invece sta già dentro la CPU nel registro BX. · Quindi non dobbiamo coinvolgere la memoria per prendere il valore 8A5Eh. . data 07101: 10 016 07101: 10 016 1 Ä 05 main proc Ï C 08 09 10 11 MOV AX, BX 07108: BB 187 1 07108: BB 187 09 MOV AX, 0000h 10 MOV BX, 8A5Eh 11 MOV AX, BX ï C3 195 0710C: 16 17 H L
MOV AX, [006Ah] · Un operando è un registro, mentre l'altro è una locazione di memoria centrale specificata direttamente dall'istruzione mediante l'offset (tra parentesi quadre) · L'esecuzione di questa istruzione determina prima il calcolo dell'indirizzo in cui si trova il dato realmente, mediante l'operazione: ○ base address + offset = effective address · Il secondo passo è la copiatura del valore che si trova in memoria (all'offset "006A") nel registro AX · Nota: 006Ah=106d (ovvero la 106-esima cella nel segmento)
01 02 03 . model small . data 04 05 . code 06 main proc MOV AX, @data MOV DS, AX 07 08 09 10 11 12 MOV BX, 3BBDh MOV [6Ah], BX 13 14 15 16 MOV AX, [6Ah] main endp end
base address CPU MEMORIA CENTRALE 6A (dimensione offset) REGISTRO AX 3 B B D 3 B B D Data Bus 1 2 ... ... 6 A codice macchina della MOV offset contenuto nella MOV
- registers 0710:0000 " original source code 01 . model small 02 . data 3 registers H 0710:000C 01 AX 3B BD 0/100: B8 184 C . data 03 BX 3B BD 07102: 07 007 BEEF 04 . code CX 519 07103: 8E 142 Ä SP 0710A: 6A 106 j Dopo l'execute CS 5716 07106: BD 189 ¢ 08 IP 000F 07108: 89 137 ë 10 SS 0716 07109: 1E 030 11 SF 0710A: 6A 106 j 12 BF 0710B: 00 000 NULL 13 14 SI 0710D: 6A 106 j 15 main endp 16 end - registers H L AX 07 10 0716A :I BD 189 ¢ 0716B : 3B 059 : BX 3B BD 07160: 00 000 NULL CX OF 0716D: 00 000 NULL 0716E: 00 000 NULL DX 0716F: 00 000 NULL CS 0710 0710:006A ES 0700 07111: 90 144 É 2 . model small 02 07 MOV DS, AX 08 09 MOV BX, 3BBDh MOV [6Ah ], BX 07104: D8 216 Ï DX 07105: BB 187 1 BP 0710C: 11 161 1 07107: 3B 059 ; SI 0710D 6A 106 j DI 0710E 00 000 NULL 15 DS 0716 07110: 90 144 É 17 ES 07111: 67440. 90 144 É 18 DI 0710E : 00 000 NULL 0710F: 90 144 É 17 DS 0710 07110: 90 144 E 18 H L 07 16 0/100: B8 184 @ 07101: 10 016 1 BX 3B BD 07102: 07 007 BEEF CX OF 07103: 8E 142 Ä 04 . code 07104: D8 216 Ï 05 main proc 07105: BB 187 7 06 MOV AX, @data CS 0710 07106: BD 189 ¢ IP 000C 07108: 89 137 SS 0710 07109: 1E 030 A 10 11 05 main proc 06 MOV AX, @data 07 MOV DS, AX 0710B: 00 000 NULL 12 MOV AX, [6Ah] 13 09 MOV BX, 3BBDh MOV [6Ah ], BX MOV AX, [6Ah ] 0710F: 70 144 E 16 main endp end 19 2 07170: 00 000 NULL 07101: 10 016 07107: 3B 059 ; ë 03 DX 1 14 0710C: A1 161 í
MOV AX, [SI] · Un operando è un registro, mentre l'altro è una locazione di memoria centrale specificata indirettamente da un registro tra i registri SI,DI,BX (tra parentesi quadre) · L'esecuzione di questa istruzione determina prima il calcolo dell'indirizzo in cui si trova il dato realmente, mediante l'operazione: ○ base address + source index = effective address · Il secondo passo è la copiatura del valore che si trova in memoria (all'offset contenuto in SI) nel registro AX
base address CPU MEMORIA CENTRALE SI 0 5 D |F 1 05DF (dimensione offset) C 1 1 7 2 AX C 1 1 7 Data Bus