[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Ненужный игнорируют, если была команда чтения байта. А вот с записью так не поступишь - если надо писать в один байт, то что тогда делать с другим? Вот поэтому и делают 2 строба записи (WRL/WRH) и один строб чтения (RD). Выборка (т.е. CE/CS) делается, как и чтение, общей для старшего и младшего байтов, поэтому младший бит адреса не нужен - выбирается сразу слово, содержащее и байт N, и байт N+1.
Здесь кроется весьма неприятное ограничение, заключающееся в необходимости выравнивания 16-битных переменных по байтовым адресам, кратным 2 - если этого не сделать и расположить 16-битную переменную по нечетному байтовому адресу, то первая ее половина окажется в старшем байте слова N, а вторая - в младшем байте слова N+1, и придется делать еще одну выборку (слова N+1). В разных архитектурах это решено по-разному, есть и такие, которые не требуют выравнивания, но в большинстве это необходимо.
Пример:
.org 1000h
var1: .dw 1234h ;Слово по четному адресу
.org 1003h
var2: .dw 5678h ;Слово по нечетному адресу
code:
mov R2,var1 ;= mov R2L,low(var1) и mov R2H,high(var1)
mov R3,var2 ;= mov R3L,high(var2) и mov R3H,low(var2+1)
E-mail: info@telesys.ru