Матрица a не работает в другой прог - Assembler
Формулировка задачи:
Здравствуйте. В ячейку матрицы a загружаются кординаты точки, первое слово (16 байт) y и смещается в лево, второе слово x. Матрица a при переводе из одной прог. в другую не работает. Если загрузить одни 0, то отработает или вместо загрузки mov dx,x , загружать в два слова т.е. mov edx,x то тоже отработает в другой прог. Если матрицу a, с загрузкой в одно слово т.е. оставить в старой прог. то она будет работать. Заранее благодарю.
Листинг программы
- mov dx,y
- shl edx,16
- mov dx,x
- push ecx
- xor ecx,ecx
- mov ecx,countA
- push eax
- xor eax,eax
- lea eax,a
- mov [eax+4*ecx],edx
- pop eax
Решение задачи: «Матрица a не работает в другой прог»
textual
Листинг программы
- f:=TFileStream.Create('C:\Filename LL.dat',fmOpenRead);
- f.Read(LL, sizeOf(LL));
- f.Free;
- asm
- push edx
- xor edx,edx
- mov edx,LL
- mov x,dx
- shr edx,16
- mov y,dx
- pop edx
- push edx
- xor edx,edx
- mov dx,x
- mov XX,edx
- pop edx
- push edx
- xor edx,edx
- mov dx,y
- mov edx,YY
- pop edx
- end;
Объяснение кода листинга программы
В данном коде происходит следующее:
- Создается объект
f
классаTFileStream
, который открывает файлC:\Filename LL.dat
в режиме чтения. - Читается содержимое файла в переменную
LL
с помощью методаRead
объектаf
. - Освобождается память, занимаемая объектом
f
, вызывая методFree
. - Начинается блок кода на языке Assembler (ASM).
- Значение регистра
edx
очищается (обнуляется) с помощью операцииxor edx,edx
. - Значение переменной
LL
загружается в регистрedx
с помощью операцииmov edx, LL
. - Значение регистра
dx
копируется в переменнуюx
с помощью операцииmov x, dx
. - Значение регистра
edx
сдвигается вправо на 16 бит с помощью операцииshr edx, 16
. - Значение регистра
dx
копируется в переменнуюy
с помощью операцииmov y, dx
. - Значение регистра
edx
восстанавливается из стека с помощью операцииpop edx
. - Значение регистра
edx
очищается (обнуляется) с помощью операцииxor edx, edx
. - Значение переменной
x
загружается в регистрdx
с помощью операцииmov dx, x
. - Значение регистра
dx
копируется в переменнуюXX
с помощью операцииmov XX, edx
. - Значение регистра
edx
восстанавливается из стека с помощью операцииpop edx
. - Значение регистра
edx
очищается (обнуляется) с помощью операцииxor edx, edx
. - Значение переменной
y
загружается в регистрdx
с помощью операцииmov dx, y
. - Значение регистра
edx
копируется в переменнуюYY
с помощью операцииmov edx, YY
. - Значение регистра
edx
восстанавливается из стека с помощью операцииpop edx
. - Блок кода на языке Assembler завершается.
Обратите внимание, что значения переменных
LL
,x
,y
,XX
иYY
не предоставлены в тексте кода, поэтому их значения неизвестны.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д