|
||||||||||||||||||||
Вариант задания. Распечатка формы. Код на языке Assembler ⇐ ПредыдущаяСтр 2 из 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;
|
||||||||||||||||||||
|