Матрица a не работает в другой прог - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. В ячейку матрицы a загружаются кординаты точки, первое слово (16 байт) y и смещается в лево, второе слово x. Матрица a при переводе из одной прог. в другую не работает. Если загрузить одни 0, то отработает или вместо загрузки mov dx,x , загружать в два слова т.е. mov edx,x то тоже отработает в другой прог. Если матрицу a, с загрузкой в одно слово т.е. оставить в старой прог. то она будет работать. Заранее благодарю.
Листинг программы
  1. mov dx,y
  2. shl edx,16
  3. mov dx,x
  4. push ecx
  5. xor ecx,ecx
  6. mov ecx,countA
  7. push eax
  8. xor eax,eax
  9. lea eax,a
  10. mov [eax+4*ecx],edx
  11. pop eax

Решение задачи: «Матрица a не работает в другой прог»

textual
Листинг программы
  1.   f:=TFileStream.Create('C:\Filename LL.dat',fmOpenRead);
  2.   f.Read(LL, sizeOf(LL));
  3.   f.Free;
  4.  
  5.  asm
  6.     push edx
  7.         xor edx,edx
  8.  
  9.       mov edx,LL
  10.       mov x,dx
  11.       shr edx,16
  12.       mov y,dx
  13.  
  14.         pop edx
  15.  
  16.         push edx
  17.         xor edx,edx
  18.  
  19.       mov dx,x
  20.       mov XX,edx
  21.  
  22.         pop edx
  23.  
  24.         push edx
  25.         xor edx,edx
  26.  
  27.        mov dx,y
  28.        mov edx,YY
  29.  
  30.          pop edx
  31.   end;

Объяснение кода листинга программы

В данном коде происходит следующее:

  1. Создается объект f класса TFileStream, который открывает файл C:\Filename LL.dat в режиме чтения.
  2. Читается содержимое файла в переменную LL с помощью метода Read объекта f.
  3. Освобождается память, занимаемая объектом f, вызывая метод Free.
  4. Начинается блок кода на языке Assembler (ASM).
  5. Значение регистра edx очищается (обнуляется) с помощью операции xor edx,edx.
  6. Значение переменной LL загружается в регистр edx с помощью операции mov edx, LL.
  7. Значение регистра dx копируется в переменную x с помощью операции mov x, dx.
  8. Значение регистра edx сдвигается вправо на 16 бит с помощью операции shr edx, 16.
  9. Значение регистра dx копируется в переменную y с помощью операции mov y, dx.
  10. Значение регистра edx восстанавливается из стека с помощью операции pop edx.
  11. Значение регистра edx очищается (обнуляется) с помощью операции xor edx, edx.
  12. Значение переменной x загружается в регистр dx с помощью операции mov dx, x.
  13. Значение регистра dx копируется в переменную XX с помощью операции mov XX, edx.
  14. Значение регистра edx восстанавливается из стека с помощью операции pop edx.
  15. Значение регистра edx очищается (обнуляется) с помощью операции xor edx, edx.
  16. Значение переменной y загружается в регистр dx с помощью операции mov dx, y.
  17. Значение регистра edx копируется в переменную YY с помощью операции mov edx, YY.
  18. Значение регистра edx восстанавливается из стека с помощью операции pop edx.
  19. Блок кода на языке Assembler завершается. Обратите внимание, что значения переменных LL, x, y, XX и YY не предоставлены в тексте кода, поэтому их значения неизвестны.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут