Косвенная адресация на ассемблере - PullRequest
1 голос
/ 01 ноября 2011

Я работаю над некоторыми косвенными проблемами решения, и я не уверен, как правильно считать байты. Нам дан этот код:

.data
v1  db  9,7,5,3,1
v2  dw  0
v3  dw  -1
v4  db  '$'

mov  dx,offset v2
mov  ah,9
int  21h

Вопрос состоит в том, сколько байтов будет записано на стандартное устройство вывода после выполнения этих инструкций, и ответ равен 4.

Для этой проблемы я настроил это так:

offset  0  1  2  3  4  5  6  7  8  9
data    09 07 05 03 01 00 00 FF FF 24

Мы перемещаем 5 в dx, записываем два байта 00 05. Затем мы устанавливаем код dos для его записи, поэтому наш вывод записывает два байта, составляющие четыре? Пожалуйста, поправьте меня, если моя логика неверна.

1 Ответ

6 голосов
/ 01 ноября 2011

Функция DOS 9 записывает, начиная со смещения в DX, пока оно не достигнет $.Вы загрузили смещение V2 в DX.Вы определили V2 и V3 как два байта за штуку (ни один из которых не будет содержать «$»), а за ними следует V4 (содержащий $).Поэтому он записывает четыре байта V2 и V3, затем останавливается.

Редактировать: я должен добавить, что вопреки вопросу о названии, ни один из кода, который вы показали, на самом деле не имеет косвенной адресации (хотя функция DOS9 несомненно использует косвенную адресацию, считывая с адреса, загруженного в dx).

...