Лабораторная по ассемблеру
Лабораторная работа № 2
Выполнить Лабораторную работу № 6 (C++) с использованием фрагментов,
реализованных на языке Ассемблер.
В сишной части программы можно осуществлять только ввод и вывод информации!
Адрес двумерного можно положить в регистры esi, edi.
Чтобы взять значение по адресу, необходимо использовать запись [esi], [edi].
Чтобы перейти к следующему элементу, необходимо увеличить значение адреса на количество байт одного элемента.
Например:
#include <iostream>
using namespace std;
void main()
{
int n = 2, m = 2;
int **p = new int*[n];
for(int i = 0; i < n; ++i)
p[i] = new int [m];
p[0][0] = 111;
p[0][1] = 222;
p[1][0] = 333;
p[1][1] = 444;
int a, b, c;
_asm
{
mov esi, p // положили адрес строки матрицы
mov edi,[esi] // положили адрес первого элемента первой строки матрицы
mov eax,[edi] // положили первый элемент первой строки матрицы
mov a, eax
add esi,4 // перещли ко второй строке матрицы
mov edi,[esi] // положили адрес второй строки матрицы
mov ebx, [edi] // положили первый элемент второй строки матрицы
mov b, ebx
add edi,4 // перешли ко второму элементу второй строки матрицы
mov ecx,[edi] // положили второй элемент второй строки матрицы
mov c, ecx
}
cout << "p[0][0] = " << a << endl;
cout << "p[1][0] = " << b << endl;
cout << "p[1][1] = " << c << endl;
}