Пересылка в индексный регистр - Assembler
Формулировка задачи:
Доброго времени суток!
Прошу помочь с кодом, мне необходимо сделать след. действия:
1: переслать адрес блока данных SIM в индексный регистр 2: переслать 3-й элемент 2-й строки SIM в регистр 3: сложить 3-й элемент блока данных Z2 и var_2 4: логическое ИЛИ между переменной в памяти var_1 и константой 3Fh
На первом пункте выдает след. ошибку:operand types do not match
На третьем:illegal memory reference
.MODEL SMALL
.STACK 100h
.DATA
var_1 DB 11000110b
var_2 DW 9FFEh
var_3 DW ?
var_4 DB ?
N_1 DD 0FF00FFEEh
N_2 DD ?
String DB 'Assembler', '$'
M1 DB 7,9,28,46,39,31,20,25
M2 DB 12,15,7,25,31,35,20,63
Z1 DW 48,256,300,511,31,512
Z2 DW 0EEh,99Fh,300h,51AAh
SIM DB 'QWERTYUIOP'
DB 'ЙЦУКЕНГШЩЗ'
DB 'POIUYTREWQ'
.CODE
Start:
mov AX, @DATA
mov DS, AX
xor AX, AX
mov SI, 0 ;задать индекс начального элемента масссива
mov BX, 0 ;задать индекс начального элемента строки
mov DI, SIM [BX][SI] ;переслать адрес блока данных SIM в индексный регистр
mov AL, SIM [BX+10][SI+2] ;переслать 3-й элемент 2-й строки SIM в регистр
ADD Z2 [SI+2], var_2 ;сложить 3-й элемент блока данных Z2 и var_2
OR var_1, 3Fh ;логическое ИЛИ между переменной в памяти var_1 и константой 3Fh
mov AH, 4Ch
int 21h
END StartРешение задачи: «Пересылка в индексный регистр»
textual
Листинг программы
mov DI, word ptr SIM [BX][SI]
Объяснение кода листинга программы
DI- это индексный регистр, который используется для обращения к элементам массива.SIM- это массив, к которому обращаетсяDI.BX- это регистр, содержащий индекс первого элемента массиваSIM.SI- это регистр, содержащий индекс второго элемента массиваSIM.word ptr SIM [BX][SI]- это обращение к элементу массиваSIMпо индексам, содержащимся в регистрахBXиSI.