Матрица 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
не предоставлены в тексте кода, поэтому их значения неизвестны.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д