Вернуть 1, если числа являются сторонами треугольника Пифагора, иначе вернуть 0 - Assembler

Узнай цену своей работы

Формулировка задачи:

Для всех заданий входные данные передаются в подпрограмму через стек, а результат возвращается через регистр AL. Для массивов входными данными являются адрес массива и число элементов в нем

Решение задачи: «Вернуть 1, если числа являются сторонами треугольника Пифагора, иначе вернуть 0»

textual
Листинг программы
      1 0000                 model   tiny,c
      2 0000                 .code
      3                  org     100h
      4 0100  B8 0145r           begin:  lea     ax,dwMas
      5 0103  BB 0003                mov     bx,3
      6                      call    check,ax,bx
1     7 0106  53                 PUSH    BX
1     8 0107  50                 PUSH    AX
1     9 0108  E8 0008                CALL    CHECK
1    10 010B  83 C4 04               ADD     SP,00004h
     11 010E  0C 30              or      al,'0'
     12 0110  CD 29              int     29h
     13 0112  C3                 ret
     14 0113                 check   proc,a:word,b:word
     15                  uses    bx,cx,dx,si
1    16 0113  55                 PUSH    BP
1    17 0114  8B EC              MOV     BP,SP
1    18 0116  53                 PUSH    BX
1    19 0117  51                 PUSH    CX
1    20 0118  52                 PUSH    DX
1    21 0119  56                 PUSH    SI
1    22 011A  8B 76 04               mov     si,a
     23 011D  8B 4E 06               mov     cx,b
     24 0120  AD             @01:    lodsw
     25 0121  33 D2              xor     dx,dx
     26 0123  F7 E0              mul     ax
     27 0125  50                 push    ax
     28 0126  E2 F8              loop    @01
     29 0128  58                 pop     ax
     30 0129  5B                 pop     bx
     31 012A  59                 pop     cx
     32 012B  3B C3              cmp     ax,bx
     33 012D  77 01              ja      @02
     34 012F  93                 xchg    ax,bx
     35 0130  3B C1          @02:    cmp     ax,cx
     36 0132  77 01              ja      @03
     37 0134  91                 xchg    ax,cx
     38 0135  2B C3          @03:    sub     ax,bx
     39 0137  2B C1              sub     ax,cx
     40 0139  74 03              jz      @04
     41 013B  B8 FFFF                mov     ax,-1
     42 013E  40             @04:    inc     ax
1    43 013F  5E                 POP     SI
1    44 0140  5A                 POP     DX
1    45 0141  59                 POP     CX
1    46 0142  5B                 POP     BX
1    47 0143  5D                 POP     BP
1    48 0144  C3                 RET     00000h
     49 0145                 check   endp
     50 0145  0003 0005 0004         dwMas   dw      3,5,4
     51                      end     begin

Объяснение кода листинга программы

  1. Создается модель программы tiny,c
  2. Указатель на код программы помещается в адрес 100h
  3. Инициализируется переменная dwMas со значениями 3, 5, 4
  4. В начале функции начинается процесс сравнения чисел, чтобы определить, являются ли они сторонами треугольника Пифагора
  5. В функции check происходит следующее:
    • a и b передаются в стеке и извлекаются в соответствии с их типами
    • Выполняется проверка условий Пифагора
    • Результат (1 или 0) помещается в регистр ax
  6. Затем регистр al (младший байт регистра ax) инициализируется
  7. Выводится результат через прерывание 29h
  8. Происходит возврат из функции. Код написан на ассемблере для микроконтроллера x86.

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы