Не понимаю до конца адресацию в двумерном массиве - Assembler
Формулировка задачи:
Задача: задать двумерный массив 4*5 целых чисел. Сложить два числа: первое – из строки 2, столбца 3; второе - из строки 3, столбца 4.
Вот код программы:
Помогите, пожалуйста, понять где ошибка в адресации. Заранее спасибо!
include\masm32\include\masm32rt.inc
.data
mas dd -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10
i=4
j=5
el_size=1
.code
start:
print chr$(" -10 -9 -8 -7 -6 ",10,13)
print chr$(" -5 -4 -3 -2 -1 ",10,13)
print chr$(" 1 2 3 4 5 ",10,13)
print chr$(" 6 7 8 9 10 ",10,13)
print chr$(" ",10,13)
lea ESI,mas
ADD ESI,43
MOV EAX,[ESI]
ADD ESI,64
ADD EAX,[ESI]
fn MessageBox,0,str$(EAX),"Сумма элементов (2;3) и (3;4) первого массива: ",MB_OK
invoke ExitProcess,0
end startРешение задачи: «Не понимаю до конца адресацию в двумерном массиве»
textual
Листинг программы
lea ESI,mas ADD ESI,28 MOV EAX,[ESI] ADD ESI,52 ADD EAX,[ESI]
Объяснение кода листинга программы
lea ESI,mas- в данном коде используется инструкция LEA (Load Effective Address), которая загружает в регистр ESI (Source Index) адрес массива mas.ADD ESI,28- к адресу массива добавляется 28, и это новое значение сохраняется в регистре ESI.MOV EAX,[ESI]- в регистр EAX (Destination Register) записывается значение по адресу, который содержится в регистре ESI.ADD ESI,52- к адресу, содержащемуся в регистре ESI, добавляется 52, и это новое значение сохраняется в регистре ESI.ADD EAX,[ESI]- к значению в регистре EAX добавляется значение по адресу, который содержится в регистре ESI.