Я новичок в ASM. У меня вопрос о том, как данные сохраняются в памяти.Как данные сохраняются в памяти DOS 16 бит ASM?
Вот мой ASM 16 битный код
;db.com
.model small
.code
org 100h
start:
jmp proses
A db '123'
B dw 0abcdh
proses:
int 20h
end start
Затем я пытаюсь отлаживать с -d
командой
На рисунке выше показано, что A
переменная в правильном порядке в стоимости гекса, но B
переменная в CD
затем AB
.
Мой вопрос в том, почему данные в переменной A
сохраняются по-разному с помощью переменной B
переменная, пожалуйста, объясните мне?
Вы наблюдаете за тем, что происходит, потому что x86 - это небольшая система. 'A db '123'' просто хранит 3 байта в строке. Когда вы перемещаетесь за пределы элементов данных размером более одного байта, байты хранятся в обратном порядке. 'B dw 0abcdh' - это 16-битное значение, поэтому байты слова сохраняются в памяти в обратном порядке, поэтому в памяти он отображается как' cd ab'. Если у вас есть 'C dd 11223344h', байты будут храниться в обратном порядке как' 44 33 22 11' –
См. [Endianness] (https://en.wikipedia.org/wiki/Endianness) в википедии. – Ruslan
Случай последовательности команд немного сложнее. Он начинается с кода операции инструкции, и если есть 16-разрядный операнд, это будет в порядке малозначности, то есть младший старший байт. Последовательности команд всегда начинаются с кода операции (независимо от его соответствия), иначе процессор не будет знать, сколько байтов содержит инструкцию. –