;program starts
TABLE DB 0, 2, 0, 2, 0, 0, 4, 0, 0, 1, 0, 0, 3, 0, 1, 0
TABLE1 DB ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
MOV SI, OFFSET TABLE
MOV DI, OFFSET TABLE1
MOV AL, [SI]
MOV [DI], AL
MOV AL, [SI+1]
MOV [DI+4], AL
MOV AL, [SI+2]
MOV [DI+8], AL
MOV AL, [SI+3]
MOV [DI+12], AL
MOV AL, [SI+4]
MOV [DI+1], AL
;program ends
Вот простой код, который копирует данные из TABLE в TABLE1. Когда я запускаю эту программу в emu8086, значение [SI] отображается в регистре AL (MOV AL, [SI]). Таким образом, значения в «TABLE» отображаются в регистре AL и логически должны быть одинаковыми. Но когда выполняется строка «MOV AL, [SI+1]», регистр AL показывает 4 вместо 2. Если я заменю этот второй элемент на 3, регистр Al покажет 6 вместо 3. Кто-нибудь может объяснить причину это событие и как ему противостоять?
DS
? Установлен ли он для сегмента, в котором расположены массивы? Работает ли программа, если добавитьORG 100h
в начале файла? - person Michael   schedule 14.11.2016;program starts
в таблицу данных? Это, вероятно, приведет к какому-то странному поведению. - person Ped7g   schedule 14.11.2016