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

Страницы работы

Содержание работы

Мета роботи: Розробити три однакові програми на мовах С, Pascal та Assembler. Отримати за допомогою програми DEBUG з ЕХЕ - файлів лістинги програм та проаналізувати їх з вихідними файлами.

Індивідуальне завдання: В масиві типу word знайти суму негативних елементів.

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

var

          mas:array[1..15] of integer;

           i,s:integer;

          begin

           i:=$5555;

           randomize;

           for i:=1 to 15 do

           begin

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

           end;

            s:=0;

           for i:=1 to 15 do

           begin

            if mas[i]<0 then

            s:=s+mas[i];

           writeln(mas[i]);

           end;

           writeln('summa=',s);

            i:=$5555;

           end.

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

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

1E46:0015 9A4D08531E                   CALL   1E53:084D                             - вызов Randomize

1E46:001A C70670000100               MOV    WORD PTR [0070],0001      - і = $5555             

1E46:0020 EB04                   JMP      0026                                    - обход инкремента индекса       

1E46:0022 FF067000              INC WORD PTR [0070]               - переходим на следующий элемент 

1E46:0026 B83200             MOV     AX,0032                            - в АХ заносим 50 и

1E46:0029 50                       PUSH     AX                                       - АХ в стек

1E46:002A 9AB807531E                  CALL    1E53:07B8                              - вызов Random(50)

1E46:002F 8BD0                 MOV     DX,AX                                   - в DX значение от Random(50)

1E46:0031 B82800             MOV     AX,0028                                 - в АХ заносим 40

1E46:0034 2BC2                 SUB       AX,DX                                - 40-Random(50)

1E46:0036 8B3E7000         MOV     DI,[0070]                                - в di заносим индекс і

1E46:003A D1E7                 SHL       DI,1                                      - сдвигаем значение di

1E46:003C 89855000         MOV     [DI+0050],AX                       - заносим mas[i] = 40-Random(50)

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

1E46:0045 75DB                 JNZ        0022                                        - повторяем цикл

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

1E46:0049 A37200              MOV    [0072],AX                              -  i=ax

1E46:004C C70670000100              MOV     WORD PTR [0070],0001      -  i=1   

1E46:0052 EB04                  JMP       0058                                    - обход инкремента индекса

1E46:0054 FF067000         INC        WORD PTR [0070]               - переходим на следующий элемент 

1E46:0058 8B3E7000         MOV     DI,[0070]                             - в di заносим индекс і

1E46:005C D1E7                 SHL       DI,1                                      -  сдвигаем значение di

1E46:005E 83BD500000                   CMP     WORD PTR [DI+0050],+00  - сравниваем индекс с 0                

1E46:0063 7D10                  JGE        0075                                      - переходим на cs:0075 если …

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

1E46:0068 8B3E7000         MOV     DI,[0070]                              - в di заносим индекс і

1E46:006C D1E7                 SHL       DI,1                                        - сдвигаем значение di

1E46:006E 03855000                     ADD      AX,[DI+0050]                          - вычисление суммы

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

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

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

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

1E46:007A 8B3E7000        MOV     DI,[0070]                               - в di заносим индекс і

1E46:007E D1E7                 SHL       DI,1                                         - сдвигаем значение di

1E46:0080 8B855000         MOV     AX,[DI+0050]                           - заносим mas[i] в AX

1E46:0084 99                       CWD                                                      -

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

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

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

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

Похожие материалы

Информация о работе