Gegeben ist das Montageprogramm der Intel 8086-Prozessor, der die Zahlen in der Matrix fügt:Was ist der grundlegende Unterschied zwischen der Adressierung von Array [di] und [Array + di] in Assembly?
.model small
.stack 100h
.data
array dw 1,2,3,1,2
sum dw ?,", is the sum!$"
.code
main proc
mov ax,@data
mov ds,ax
mov di,0
repeat:
mov ax,[array+di]
add sum,ax
add di,2 ; Increment di with 2 since array is of 2 bytes
cmp di,9
jbe repeat ; jump if di<=9
add sum,30h ; Convert to ASCII
mov ah,09h
mov dx,offset sum ; Printing sum
int 21h
mov ax,4c00h
int 21h
main endp
end main
obige Programm die Anzahl der Array addiert „Basis + Index“ Adressierungsmodus verwenden.
Die gleiche Operation kann durch so etwas wie ausgeführt von:
mov ax, array[di]
Hier habe ich folgende Fragen:
- Was zwischen
array[di]
und[array+di]
- Welche Speicheradressierung Modus
array[di]
der Unterschied ist ? - Welcher ist besser zu verwenden und warum?
Es gibt keinen Unterschied, aber die Standard-Syntax ist '[array + di]'. Einige Assembler akzeptieren auch die andere Version. – Jester
"3." ist stark meinungsbasiert, da Ihr Assembler diktiert, was Sie verwenden können ... Ich würde mit '[array + di]' gehen, weil A) IIRC das ist die offizielle Art, wie Intel-Syntax von Intel definiert wurde B) es ist kompatibel mit NASM - was scheint einer der ultimativen Assembler für x86 zu sein, dh. gepflegt, Multi Plattform, Multi Target und Open Source. Und sogar kostenlos. Diese Combo ist schwer zu schlagen. C) macht mehr Sinn für mich, ich bin es gewohnt, eher in Zeigern als in "Variablen" zu denken, das Konzept der Variablen wurde mir gezeigt, nachdem ich bereits Z80 Assembler kannte. – Ped7g