Advertisement
Wizard7002

Untitled

Oct 21st, 2022 (edited)
1,187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
6502 TASM/64TASS 3.17 KB | Source Code | 0 0
  1. ;написать программу, находящую максимальный или минимальный символ в исходной строке.
  2.     .model  small ;директива model
  3.     .stack  100h ;сегмент стека
  4.     .data ;инициализированные данные
  5.     szStr       EQU 250
  6.     msg1        db  'Stroka:',10,13, '$'   
  7.     NextLine    db     13,10,'$'
  8.     MsgMax      db  'Max = $'
  9.     MsgMin      db  13,10,'Min = $'
  10.     MsgPustaya  db  'Net stroki!$'
  11.     Stroka      db  szStr dup(?)    ; строка
  12.     .code ; сегмент кода программы
  13. start: 
  14.     mov ax, @data   ; в регистра AX смещение для данных
  15.     mov ds, ax  ; установить регистр DS равный AX то ест теперь там смещение.
  16.     mov es, ax
  17.  
  18. ; вывод 1-го сообщения
  19.     mov ah, 09h
  20.     mov dx, offset msg1
  21.     int 21h
  22.  
  23. ; ввод строки
  24.     mov ah, 3fh             ;функция DOS для чтения с ручного ввода
  25.     mov bx, 0               ;описание стандартного ввода
  26.     mov cx, szStr           ;считываем строку до максимально установленной длины
  27.     mov dx, OFFSET Stroka
  28.     int 21h             ;в AX - длина введенной строки, в конце коды 0dh,0ah
  29.  
  30. ; следующая строка  
  31.     lea dx, nextLine
  32.     mov ah, 9
  33.     int 21h  
  34.  
  35. ; ищем символ
  36.     lea si, Stroka
  37.     mov bx, 00ffh           ;bh - max, bl - min (сначала самые большой и маленький код!)
  38.  
  39. :  
  40.     mov al, [si]
  41.     inc si
  42.     cmp al, 0dh             ;при вводе при помощи ф-и 3fh в конце строки будут коды 0dh и 0ah!
  43.     je  konez
  44.                         ; сравниваем символы
  45.     cmp al, bl              ;сравним с минимальным
  46.     jae cmp_max             ;если больше или равно, то на сравнение с максимальным
  47.     mov bl, al              ;сохраним, как новый минимальный
  48. cmp_max:
  49.     cmp al, bh              ;сравним с максимальным
  50.     jbe sleduiushii_simvol      ;если меньше или равно, то на чтение следующего символа
  51.     mov bh, al              ;иначе - сохраним, как максимальный
  52.     jmp     sleduiushii_simvol
  53.  
  54. konez:                      ;выведем результат
  55.     cmp bx, 00ffh           ;сначала сравним, была ли введена строка
  56.     je  Pustaya_stroka          ;если макс и мин не изменились, то ничего введено не было!
  57.    
  58.     mov dx, offset MsgMax
  59.     mov ah, 9
  60.     int 21h             ;сообщение и макс символе
  61.     mov dl, bh              ;значение
  62.     mov ah, 2
  63.     int 21h             ;выводим символ
  64.    
  65.     mov dx, offset MsgMin       ;аналогично для минимального
  66.     mov ah, 9
  67.     int 21h
  68.     mov dl, bl
  69.     mov ah, 2
  70.     int 21h
  71.  
  72.     lea dx, nextLine
  73.     mov ah, 9
  74.     int 21h  
  75.    
  76. ; завершение программы  
  77. exit:  
  78.     mov ah, 0               ;подождем нажатие на клавишу, чтобы окно сразу не закрылось
  79.     int 16h
  80.    
  81.     mov ah, 04Ch   
  82.     int 21h
  83.  
  84. Pustaya_stroka:
  85.     mov dx, offset MsgPustaya
  86.     mov ah, 9
  87.     int 21h
  88.     jmp exit
  89.     end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement