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

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

1A5D:0323 46            INC   SI         - увеличиваем SI на 1                                               

1A5D:0324 83FE0F        CMP   SI,+0F     - сравниваем индекс с 15-ю                       

1A5D:0327 7CCE          JL    02F7       - переходим на cs:02f7 если ...                                               

1A5D:0329 BE1111        MOV   SI,1111    - i=0x1111                                                  

1A5D:032C 33FF          XOR   DI,DI      -  DI в ноль                      

1A5D:032E 33F6          XOR   SI,SI      -  SI в ноль                      

1A5D:0330 EB1E          JMP   0350       - переход на cs:0350                       

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

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

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

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

1A5D:033B 833F00    CMP WORD PTR [BX],+00 - сравниваем mas[i] с нулем                

1A5D:033E 7D0F          JGE   034F       - переходим на cs:034f если ...                       

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

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

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

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

1A5D:0349 8BC7          MOV   AX,DI      - AX в ноль                       

1A5D:034B 0307          ADD   AX,[BX]    - вычесление суммы

1A5D:034D 8BF8          MOV   DI,AX      - хранение суммы                       

1A5D:034F 46            INC   SI         - увеличиваем SI на 1                       

1A5D:0350 83FE0F        CMP   SI,+0F     - сравниваем индекс                        

1A5D:0353 7CDD          JL    0332       - переходим на cs:0332 если ...                                                

1A5D:0355 BE7777        MOV   SI,7777    - i=0x7777                                                    

1A5D:0358 57            PUSH  DI         - DI в стек                      

1A5D:0359 B8AE00        MOV   AX,00AE                           

1A5D:035C 50            PUSH  AX         - AX в стек                      

1A5D:035D E81917        CALL  1A79       - вывод                       

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

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

1A5D:0362 BE3333        MOV   SI,3333    - i=0x3333

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

 data segment

      n dw 10

      mas dw 2, 4, -5, -7, 8, -9, 3, 6, -10, -9

      sum dw 0

  data ends

  code segment

      assume cs: code, ds:data

  main:

     mov ax, data

     mov ds, ax

     lea si, mas

     mov cx, n

     xor ax, ax

  m1:

     jcxz exit

     mov ax, [si]

     dec cx

     add si, 2

     cmp ax, 0

     jnl m1

     add sum, ax

     jmp m1

  exit:

     mov ah, 4ch

     int 21h

  code ends

  end main

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

1F13:0023 B8131F        MOV   AX,1F13    - mov ax,data                        

1F13:0026 8ED8          MOV   DS,AX      - mov ds,ax                       

1F13:002B 8D360200      LEA   SI,[0002]  - lea si, mas                       

1F13:002F 8B0E0000      MOV   CX,[0000]  - mov cx, n                       

1F13:0033 33C0          XOR   AX,AX      - AX  в ноль 

1F13:0038 E314          JCXZ  004E       - JCXZ exit                        

1F13:003A 8B04          MOV   AX,[SI]    - MOV  AX,[SI]                           

1F13:003C 49            DEC   CX         - уменьшаем счетчик                       

1F13:003D 83C602        ADD   SI,+02     - ADD  SI,+02                            

1F13:0040 3D0000        CMP   AX,0000    - сравниваем AX с нулем                       

1F13:0043 7DF0          JGE   0035       - jnl m1                       

1F13:0045 01061600      ADD   [0016],AX  - сумма                       

1F13:0049 EBEA          JMP   0035       - JMP m1                       

1F13:0051 B44C          MOV   AH,4C      -  MOV AH,4C                                                   

1F13:0053 CD21          INT   21         -  INT 21 

Висновок:

Отримали лістинги програм, написаних на трьох мовах, та проаналізували їх, порівнюючи з вихідними файлами. З'ясували, що програма, яка написана на мові Assembler найкоротша та найшвидкіша