ASSEMBLER, масштабирование в адресации по базе с индексированием

Компьютеры программирование assembler

Вот не могу понять, почему так можно:
mov al, matr[bx][di]
и так тоже
mov ax, matr[bx*4][di]
а так нет:
mov cx, matr[bx][di]
нужно так:
mov cl, matr[bx][di]

При этом всем bx определяется как:
mov bx,3

Я понимаю, что регистр cx=16 бит, а cl=8, но масштабируя на 4, сразу надо использовать регистр объемом 16 бит?

Вообщем разъясните попроще, а то я в assembler'е новичок, и еще не все понимаю.
Ответы:
mov ax, matr[bx*4][di] - ну можно если matr типа dw.  
нужно так:
mov cl, matr[bx][di]     -  но похоже что у тебя matr типа db. Следовательно matr- переменная  размером 1 байт - не получится mov cx, matr[bx][di] т.к  cx -  регистр 2 байтный.  Вместо него - младший однобайтный регистр cl  и ок.  Только нужно сх в стеке сохранить что бы потери данных не было.
push cl ; ( можно и cx)
mov cl, matr[bx][di]
... прочий код ...
pop cl  ; ( ну или cx соответственно )
mov ax, matr[bx*4][di] вот тут я не знаю как matr типа db сделать масштабирование , сам бьюсь. (!!!)
mov al, matr[bx][di] - ну вот только так работает.
похоже что с ЛЭТИ)


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.