Advertisement
r4lovets

Assembler Inserts

Apr 11th, 2019
441
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 1.43 KB | None | 0 0
  1. program AssemblerToDelphi;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils;
  7.  
  8. const
  9.   N = 10;
  10.  
  11. var
  12.    Arr, NewArr: array [1..N] of Integer;
  13.    i, Sum, Divider, ByteN: Integer;
  14.    j: Integer;
  15.  
  16. begin
  17.   ByteN := SizeOf(Integer) * N;
  18.   Sum := 0;
  19.  
  20.   Writeln('Введите массив:');
  21.   for i := 1 to N do
  22.     begin
  23.       Write('A[', i, '] = ');
  24.       Readln(Arr[i]);
  25.     end;
  26.  
  27.   Writeln;
  28.   Write('Введите делитель: ');
  29.   Readln(Divider);
  30.  
  31.   if Divider <> 0 then
  32.     begin
  33.       Writeln;
  34.  
  35.        asm
  36.          mov     ECX, dword[Divider]
  37.          mov     ESI, 0
  38.          mov     EBX, 0
  39.  
  40.        @GetElement:
  41.          // Поделить число
  42.          xor     EDX, EDX
  43.          mov     EAX, dword[Arr + EBX]
  44.          div     ECX
  45.  
  46.          // Проверить остаток
  47.          cmp     EDX, 0
  48.          jne     @StartLoop
  49.  
  50.          mov     EDX, dword[Arr + EBX]
  51.          add     Sum, EDX
  52.          inc     ESI
  53.  
  54.        @StartLoop:
  55.          add     EBX, 4
  56.          cmp     dword[ByteN], EBX
  57.          je      @Leave
  58.          jmp     @GetElement
  59.  
  60.        @Leave:
  61.          mov     [i], ESI
  62.        end;
  63.  
  64.       Writeln('Cумма элементов, кратных ', Divider, ' равна ', Sum);
  65.  
  66.       Writeln('Количесвто элементов, кратных ', Divider, ' равна ', i);
  67.     end
  68.   else
  69.     Writeln('Делитель равен нулю!');
  70.  
  71.   Readln;
  72. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement