Хелпикс

Главная

Контакты

Случайная статья





Вариант задания. Распечатка формы. Код на языке Assembler



Вариант задания

Номер варианта Число 1 Число 2 Число 3 Число 4 Число 5 Число 6

 

Пункт 1 Пункт 2

 

Распечатка формы

Код на языке Assembler

procedure TForm1.Button1Click(Sender: TObject);

 

 const

DataSize=$200;

var

Data:Array[0..DataSize] of Byte;

i:Integer;

S:String;

begin

for i:=0 to DataSize do

Data[i]:=0;

asm

PUSHAD

MOV EAX,3559739825

MOV EBX,256920863

MOV CX,33198

MOV ESI,6043

MOV DH,165

MOV DL,66

 // 7.

XCHG EBX,EAX // Обмен информации П,И

 

PUSH EAX  // Помещаем в дамп памяти, соответствующий сегменту стека

PUSH EBX

POP EAX  // Забираем информацию из дампа памяти

POP EBX

 

LEA EDI,Data //вычисляем адрес-операнда; помещаем в приемник

MOV [EDI+2],EAX //перемещение информации

MOV [EDI+18],EBX

MOV EBX,[EDI+2]

MOV EAX,[EDI+18]

 

MOV EDI,EAX //перемещение информации

MOV EAX,EBX

MOV EBX,EDI

 

// 8.

XCHG CX,SI // Обмен информации П,И

 

PUSH CX   // Помещаем в дамп памяти, соответствующий сегменту стека

PUSH SI

POP CX    // Забираем информацию из дампа памяти

POP SI

 

LEA EDI,Data //вычисляем адрес-операнда; помещаем в приемник

MOV [EDI+2],SI

MOV [EDI+18],CX

MOV SI,[EDI+2]

MOV CX,[EDI+18]

 

MOV DI,SI    //перемещение информации

MOV SI,CX

MOV CX,DI

//9.

XCHG DH,DL // Обмен информации П,И

 

PUSH ECX   // Помещаем в дамп памяти, соответствующий сегменту стека

MOV CL,DL

MOVZX EDX,DH  //перемещение информации с расширенным нулем

MOV DH,CL

POP ECX       // Забираем информацию из дампа памяти

 

LEA EDI,Data  //вычисляем адрес-операнда; помещаем в приемник

MOV [EDI+36],DH

MOV [EDI+54],DL

MOV DH,[EDI+36]

MOV DL,[EDI+54]

 

PUSH CX     // Помещаем в дамп памяти, соответствующий сегменту стека

MOV CH,DH   //перемещение информации

MOV DH,DL

MOV DL,CH

POP CX      // Забираем информацию из дампа памяти

  // 10.

MOVZX BX,DH // перемещение информации

MOVZX DX,DL

     // 11.

MOVZX EAX,SI // перемещение информации с расширеным нулем

MOVZX ESI,CX

 

POPAD

end;

 

 

S:='0000:';

for i:=1 to DataSize do

if i mod 16=0 then

begin

Memo1.Lines.Add(S);

S:=IntToHex(i,4)+':';

end

else

S:=S+' '+IntToHex(Data[i],2);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

print;

end;

 

procedure TForm1.Button3Click(Sender: TObject);

begin

close;

end;

end.

 

Вывод

При выполнении первой лабораторной работы были освоены навыки работы с 8, 16, 32-разрядными резисторами общего назначения; использования различных командами для переноса информации в регистре по типу: MOV, PUSH, POP, XCHG, LEA;работы со стеком, оперативной памятью и оперирования информацией, содержащиеся в регистрах.  


 


Задание на защиту

procedure TForm1.Button1Click(Sender: TObject);

 

 const

DataSize=$200;

var

Data:Array[0..DataSize] of Byte;

i:Integer;

S:String;

begin

for i:=0 to DataSize do

Data[i]:=0;

asm

PUSHAD

MOV EAX,3559739825

MOV EBX,256920863

MOV CX,33198

MOV ESI,6043

MOV DH,165

MOV DL,66

 // 7.

XCHG EBX,EAX // Обмен информации П,И

 

PUSH EAX  // Помещаем в дамп памяти,соответствующий сегменту стека

PUSH EBX

POP EAX  // Забираем информацию из дампа памяти

POP EBX

 

LEA EDI,Data //вычисляем адрес-операнда->помещаем в приемник

MOV [EDI+2],EAX //перемещение информации

MOV [EDI+18],EBX

MOV EBX,[EDI+2]

MOV EAX,[EDI+18]

 

MOV EDI,EAX //перемещ. информации

MOV EAX,EBX

MOV EBX,EDI

 

// 8.

XCHG CX,SI // Обмен информации П,И

 

PUSH CX   // Помещаем в дамп памяти,соотв.сегменту стека

PUSH SI

POP CX    // Забираем информацию из дампа памяти

POP SI

 

LEA EDI,Data //вычисл. адрес-операнда->помещ.в приемник

MOV [EDI+2],SI

MOV [EDI+18],CX

MOV SI,[EDI+2]

MOV CX,[EDI+18]

 

MOV DI,SI    //перемещ. информации

MOV SI,CX

MOV CX,DI

//9.

XCHG DH,DL // Обмен информации П,И

 

PUSH ECX   // Помещаем в дамп памяти,соотв.сегменту стека

MOV CL,DL

MOVZX EDX,DH  //перемещ. информации с расш.ым нулем

MOV DH,CL

POP ECX       // Забираем информацию из дампа памяти

 

LEA EDI,Data //вычисл. адрес-операнда->помещ.в приемник

MOV [EDI+36],DH

MOV [EDI+52],DL

MOV DH,[EDI+36]

MOV DL,[EDI+52]

PUSH CX     // Помещаем в дамп памяти,соотв.сегменту стека

MOV CH,DH   //перемещ. информации

MOV DH,DL

MOV DL,CH

POP CX      // Забираем информацию из дампа памяти

  // 10.

MOVZX BX,DH //перемещ. информации

MOVZX DX,DL

  // 11.

MOVZX EAX,SI //перемещ. информации с расш.ым нулем

MOVZX ESI,CX

 

MOV [EDI+68],BX  

 

POPAD

end;

 

 

S:='0000:';

for i:=1 to DataSize do

if i mod 16=0 then

begin

Memo1.Lines.Add(S);

S:=IntToHex(i,4)+':';

end

else

S:=S+' '+IntToHex(Data[i],2);

end;



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.