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