Выяснить, верно ли, что количество тех чисел ci, которые меньше 20, равно пяти - Turbo Pascal

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

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

Даны натуральное число n и целые числа с1 , с2, ..., сn . Выяснить, верно ли, что количество тех чисел ci , которые меньше 20, равно пяти. Помогите пожалуйста, очень прошу)

Решение задачи: «Выяснить, верно ли, что количество тех чисел ci, которые меньше 20, равно пяти»

textual
Листинг программы
  1.  
  2. const N = 5;
  3. type __dword  = cardinal;
  4. type __int32  = integer;
  5. type __list_t = array[1..N] of __int32;
  6.  
  7. var list: __list_t = ( 1 , 2 , 3 , 4 , 5 );
  8.  
  9. function __asm_tr( list: __dword; count: __dword ): __int32;
  10. asm
  11.   pushf
  12.  
  13.   push EDX
  14.   push ECX
  15.  
  16.   mov EDX , list
  17.   mov ECX , count
  18.  
  19.   push EBX
  20.  
  21.   xor EBX , EBX
  22.  
  23.   jmp @lbForCnd;
  24.   @lbForContinue:
  25.  
  26.     mov EAX , [EDX + ECX * 4 - 4]
  27.     cmp EAX , 20
  28.     JL @lbSetInc
  29.     jmp @lbNoSetInc
  30.     @lbSetInc:
  31.       inc EBX
  32.     @lbNoSetInc:
  33.      
  34.   dec ECX
  35.   @lbForCnd:
  36.   test ECX , ECX
  37.   jne @lbForContinue
  38.  
  39.   cmp EBX , 5
  40.   jz @lbSetTrue
  41.   xor EAX , EAX
  42.   jmp @lbSetBreak
  43.   @lbSetTrue:
  44.   mov EAX , 1
  45.   @lbSetBreak:
  46.  
  47.   pop EBX
  48.   pop ECX
  49.   pop EDX
  50.  
  51.   popf  
  52. end;
  53.  
  54. begin
  55.  
  56. if ( __asm_tr( Cardinal(@list) , N ) = 0 ) then
  57.     writeln(' false ')
  58. else
  59.     writeln(' true ');
  60.  
  61. end.

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

  1. Переменная N имеет значение 5.
  2. Создается тип данных __dword, который представляет собой целое число без знака, и тип данных __int32, который представляет собой целое число со знаком.
  3. Создается тип данных __list_t, который представляет собой массив из 5 элементов типа __int32.
  4. Создается переменная list со значением (1, 2, 3, 4, 5).
  5. Определяется функция __asm_tr, которая принимает два аргумента: список (list) и количество (count). Функция использует ассемблерные команды для проверки, равное ли количество чисел в списке 5.
  6. В функции __asm_tr используется ассемблерная запись, которая включает в себя следующие действия:
    • pushf - сохранить флаги в стек
    • push EDX - поместить значение регистра EDX в стек
    • push ECX - поместить значение регистра ECX в стек
    • mov EDX, list - поместить значение списка в регистр EDX
    • mov ECX, count - поместить значение количества в регистр ECX
    • push EBX - поместить значение регистра EBX в стек
    • xor EBX, EBX - вычесть из EBX единицу
    • jmp @lbForCnd - перейти к условному оператору jmp, если флаги не содержат значения, указывающего на ошибку
    • @lbForContinue: - это метка, к которой будет выполнен переход, если условие jne не выполнится
    • test ECX, ECX - проверить, равно ли значение регистра ECX нулю
    • jne @lbForContinue - если значение регистра ECX не равно нулю, то выполнить переход к метке lbForContinue
    • dec ECX - уменьшить значение регистра ECX на единицу
    • cmp EBX, 5 - сравнить значение регистра EBX с 5
    • jz @lbSetTrue - если значение регистра EBX равно 5, то выполнить переход к метке lbSetTrue
    • xor EAX, EAX - вычесть из EAX единицу
    • jmp @lbSetBreak - перейти к метке lbSetBreak
    • @lbSetTrue: mov EAX, 1 - установить значение EAX в 1
    • @lbSetBreak: - это метка, к которой будет выполнен переход, если условие jne выполнится
  7. В функции main вызывается функция __asm_tr с аргументами Cardinal(@list) и N. Результат функции сравнивается со значением true или false.
  8. Если результат функции __asm_tr равен 0, то выводится строка false, иначе выводится строка true.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

9   голосов , оценка 3.889 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы