Розробка трьох однакових програм на мовах С, Pascal та Assembler. Знаходження суми негативних елементів в масиві типу word, страница 2

1E46:008A 9A9D06531E                 CALL    1E53:069D                                            - вызов Randomize

1E46:008F 9A8205531E                   CALL    1E53:0582                                             - вызов Randomize

1E46:0094 833E70000F    CMP      WORD PTR [0070],+0F           - сравниваем индекс с 15            

1E46:0099 75B9                  JNZ        0054                                        - повторяем цикл

1E46:009B BF7401             MOV     DI,0174                                   - в di 372

1E46:009E 1E                      PUSH     DS                                             -  DS в стек

1E46:009F 57                       PUSH     DI                                              -  DI в стек

1E46:00A0 BF0000             MOV     DI,0000                                    - DI в ноль

1E46:00A3 0E                      PUSH     CS                                             -  CS в стек

1E46:00A4 57                      PUSH     DI                                              -  DI в стек

1E46:00A5 31C0                 XOR      AX,AX                                     - АХ в ноль

1E46:00A7 50                      PUSH     AX                                            -  AX в стек

1E46:00A8 9A1506531E                  CALL    1E53:0615                                    - вызов Randomize

1E46:00AD A17200             MOV    AX,[0072]                                              -  хранение суммы

1E46:00B0 99                      CWD                                                       -

1E46:00B1 52                      PUSH     DX                                             -   DX в стек

1E46:00B2 50                      PUSH     AX                                             -   AX в стек

1E46:00B3 31C0                 XOR      AX,AX                                      - АХ в ноль

1E46:00B5 50                      PUSH     AX                                             -   AX в стек

1E46:00B6 9A9D06531E                  CALL    1E53:069D                                              - вывод

1E46:00BB 9A8205531E                  CALL    1E53:0582                                               - вывод

1E46:00C0 C70670005555              MOV     WORD PTR [0070],5555            -  і = $5555      

 Програма на мові С:

            #include<conio.h>

  #include<stdlib.h>

  #include<stdio.h>

  #define n 15

  void main (void)

  {

    int sum,i,mas[n];

    clrscr();

    randomize();

    i=0x5555;

    for (i=0;i<n;i++)

    {

       mas[i]=40- random(50);

       printf ("%4d",mas[i]);

    }

    i=0x1111;

    sum=0;

    for (i=0;i<n;i++)

    if (mas[i]<0)

            sum=sum+mas[i];

   i=0x7777;

   printf(" summa%4d",sum);

    i=0x3333;

  }

Лістинг програми:

0364 1A5D:02EA BE5555   MOV   SI,5555    - i=0x5555                          

1A5D:02ED E8B10A        CALL  0DA1       - вызов Randomize                                               

1A5D:02F0 E87800        CALL  036B       - вызов Randomize                                               

1A5D:02F3 33F6          XOR   SI,SI      - si в ноль                       

1A5D:02F5 EB2D          JMP   0324       - переход на cs:0324                       

1A5D:02F7 B83200        MOV   AX,0032    - в АХ заносим 50                         

1A5D:02FA 50            PUSH  AX         - АХ в стек                       

1A5D:02FB E87E00        CALL   037C       - вызов Random(50)

1A5D:02FE 59            POP   CX         - в СХ результат                       

1A5D:02FF BA2800        MOV    DX,0028    - в DХ заносим 40                       

1A5D:0302 2BD0          SUB    DX,AX      - 40-Random(50)                       

1A5D:0304 8BDE          MOV   BX,SI      - в ВХ заносим индекс і                       

1A5D:0306 D1E3          SHL   BX,1       - сдвигаем значение  ВХ                       

1A5D:0308 8D46E2        LEA   AX,[BP-1E] - адрес масива                       

1A5D:030B 03D8          ADD   BX,AX      - переходим на і элемент                       

1A5D:030D 8917          MOV   [BX],DX    - заполнение                       

1A5D:030F 8BDE          MOV   BX,SI      - в ВХ заносим индекс і                                                

1A5D:0311 D1E3          SHL   BX,1       - сдвигаем значение  ВХ                                               

1A5D:0313 8D46E2        LEA   AX,[BP-1E] - адрес масива                                               

1A5D:0316 03D8          ADD   BX,AX      - переходим на і элемент                       

1A5D:0318 FF37          PUSH  [BX]       - по адресу BX в стек                       

1A5D:031A B8AA00        MOV   AX,00AA                           

1A5D:031D 50            PUSH  AX         - AX в стек                        

1A5D:031E E85817        CALL  1A79       - вывод                       

1A5D:0321 59            POP   CX         - результат