2017-02-23 2 views
1

Ich bin ein Anfänger für die x86-Architektur und Assembly, das ist ein Code-Snippet mit den Schritten durch darunter.Warum erhöht das Hinzufügen des Werts 2 zum SI nur den Index um 1?

Ich weiß, dass der si ist der Quellindex und es fungiert als der Index für das Array.

Die markierte Linie zeigt an, dass 2 bis es wird hinzugefügt, aber die Antwort darauf hin, dass wir nur einen Index von 1.

Im nach oben sicher, dass ich es falsch zu interpretieren, kann, wenn jemand erklären, was passiert ist das würde sehr helfen!

Assembly newbie-freundlich vocab preffered!


enter image description here

+1

Das Wort ptr [si] 'verhält sich nicht wie ein _C_ Array. "si" ist die Adresse, die als Speicheroperand verwendet wird, bei der ein Wortwert (16 Bit) gelesen wird. Wenn Sie 2 zu _SI_ hinzufügen, wird der Zeiger um 2 erhöht, was ein einzelnes Wort (16-Bit-Wert) ist. –

+1

Wie viele Bytes ist ein 16-Bit-Wort? –

Antwort

2

Dies tritt auf, weil die Daten in Array als einen anderen Typ wie die Indizierung in si behandelt werden. Da Array wird als enthaltend DWS (Datenworte 16 Bit) deklariert und si indiziert Speicher auf Byte-Basis (8 Bits), si zwei nehmen müssen „Stufen“ für jede Wortindex zu durchqueren Sie möchten. Andernfalls würden Sie abwechselnd die Bytes höherer und niedriger Ordnung jedes Worts im Array wechseln.

Hoffe, das hilft!

Bearbeiten - Datengrößen korrigiert.

+0

Wörter sind 16, DWORD 32 und QWORD 64 Bits –

+0

@MichaelPetch ist nicht diese Version abhängig? Du magst Recht haben, aber ich glaube es variiert. –

+0

In x86 ** Montage ** sind sie immer gleich. In einer höheren Sprache können sie variieren. –

Verwandte Themen