Advertisement
stbrr

lb2

Oct 29th, 2021
2,053
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;Определить количество элементов массива, значения которых превышают заданное
  2.  
  3. assume CS:code, DS:data
  4.  
  5. data segment
  6. arr dw 7,4,9,5,3,8,1,7,9,10 ; в массиве 6 чисел больше заданного (value)
  7. val dw 5            ; заданное число
  8. msg db 30h, "$"
  9. data ends
  10.  
  11. sseg segment stack
  12. db 100h dup (?)
  13. sseg ends
  14.  
  15. code segment
  16. start:      
  17. mov AX, data        ; установка в ds адpеса
  18. mov DS, AX      ; сегмента данных
  19.  
  20. mov SI, offset arr  ; адрес массива
  21. cld         ; направление df=0  
  22. xor BX, BX      ;обнуление счетчика для чисел
  23. mov CX, 10      ;количество повторение = длина массива
  24.  
  25. find:
  26.     lodsw       ;загружаем символ
  27.     cmp val, AX
  28.     jb op1      ;если val < ax переходим на метку
  29.     jmp ml      ;чтобы управление не передалось случайно метке op1
  30.     op1:
  31.         inc BX
  32.     ml:
  33.     loop find   ;работает пока cx != 0
  34.    
  35. ;=======вывод результата в 10 сс========
  36. mov ax, bx
  37. mov DI, offset msg
  38. push DI
  39. mov BX, 10          ; основание системы счисления
  40. xor CX, CX          ; обнуление счетчика цифр
  41. inDec:  
  42.     xor DX, DX      ; обнуляем dx
  43.     div BX          ; делим число на основание сс. В остатке - последняя цифра. ax - частное, dx - остаток
  44.     add DL, 30h         ; в dl будет находится код символа цифры, и чтобы получить в al именно код символа, нужно прибавить код символа "0", который равен 30h
  45.     push DX         ; сохраним цифру из остатка в стек
  46.     inc CX         
  47.     or AX, AX       ; проверка ax == 0
  48.     jne inDec       ; переход по адресу inDec, если частное не ноль  (продолжаем до конца числа)
  49.  
  50. makeStr:
  51.     pop AX          ; извлекаем цифру
  52.     mov [DI], AL        ; перемещаем цифру в строку (по адресу из DI)
  53.     inc DI             
  54.     dec CX             
  55.     or CX, CX
  56.     jne makeStr
  57.  
  58. mov AH, 09h         ; 09h - вывод всех символов строки (она хранится в DX) до символа "$"
  59. pop DI              ; получили адрес начала строки
  60. mov DX, DI         
  61. int 21h
  62.  
  63. mov AX, 4C00h   ;завершение программы
  64. int 21h
  65. code ends
  66. end start
  67.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement