Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2011, 15:46   #1
igorio4eg
 
Регистрация: 14.09.2011
Сообщений: 3
По умолчанию Поиск наименьшего ASCII кода из строки символов

Привет, есть программа которая находит максимальный код, из строки символов, как ее переделать чтоб она находила минимальный код

Код:
format MZ
entry code_seg : start
segment data_seg
        Password   DB 'work' ; Пароль
        EnterPass  DB 13,10,'Enter Password: $'
        String     DB 80 DUP(?)
 
        enterStr db 13,10,'Please enter you string: $'
        dec_out  db 13,10,'The Maximum is:$'
 
        myStrMax db 200
        myStrLen db ?
        myStr    db 210 dup(?)
 
segment code_seg
start:
        mov ax, data_seg
        mov ds, ax
 
        ;------------------------------------
        ;-----------------Приглашение к вводу
        mov ah, 09h
        mov dx, enterStr
        int 21h
        ;-----------------Вводим строку
        mov ah, 0ah
        mov dx, myStrMax
        int 21h
        ;-----------------Готовимся к обработке
        xor ch,ch
        cld
        mov cl, myStrLen
        mov si, myStr
        mov ah, [si]
        ;-----------------Ишем максимум
        findMax:
                lodsb         ;Загружаем 1 байт в регистр Al
                cmp ah, al
                jge findNext  ;больше или равно
                mov ah, al
        findNext:
                loop findMax
        ;-----------------Готовим число к выводу
        mov al, ah
        xor ah, ah
        push ax
        ;-----------------вывод строки "максимум"
        mov ah, 09h
        mov dx, dec_out
        int 21h
        pop ax
        ;-----------------вывод сам аски код
        call out_dec
        ;-----------------вывод в дос
        mov ah, 4ch
        int 21h
        ;-----------------вывод
        out_dec:
                xor cx, cx
                mov bx, 10
 
        out_dec_div:
                xor dx, dx
                div bx
                or dx, 30h            ;остаток от деления
                push dx               ;сохраняем в стеке
                inc cx                ;считаем кол-во цифр
                or ax, ax             ;пока не 0 - делим
                jnz out_dec_div
 
        out_dec_out:
                pop ax               ;извлекаем из стека
                int 29h              ;и выводим подсчитаенное кол-во цифр
                loop out_dec_out
 
 
 
        ;------------Нажатие
        mov ah, 8h
        int 21h
        ;------------Выход
        mov ah, 4ch
        mov al, 0
        int 21h

// -----------------------------------------------------------
Пробовал в фрагменте кода представленном ниже, менять jge на jle 
но по каким то причинам на выход всегда подается ноль после этого 
Помогите пжлуста.

 ;-----------------Ишем максимум
        findMax:
                lodsb         ;Загружаем 1 байт в регистр Al
                cmp ah, al
                jle findNext  ;JLE
                mov ah, al
        findNext:
                loop findMax
________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 10.10.2011 в 20:13.
igorio4eg вне форума Ответить с цитированием
Старый 10.10.2011, 16:10   #2
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Заменить
Код:
jge findNext ;больше или равно
на
Код:
jbe findNext ;меньше или равно
, нэ?
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 10.10.2011, 16:21   #3
igorio4eg
 
Регистрация: 14.09.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Tronix Посмотреть сообщение
Заменить
Код:
jge findNext ;больше или равно
на
Код:
jbe findNext ;меньше или равно
, нэ?
он выдает ноль, и после jle и после jbe , но есть момент , если я вношу ноль в al до сравнения
findMin:
lodsb
mov al, 100
cmp ah, al
jbe findNext
то на выход он подает код первого символа из введенной строки, не пойму почему
igorio4eg вне форума Ответить с цитированием
Старый 10.10.2011, 17:20   #4
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

А, ну там во-первых
mov cl, [myStrLen] , а не mov cl, myStrLen
во-вторых в ah перед циклом надо запихнуть максимальное значение, то есть 255: mov al,255
ну и сам цикл типа того:
Код:
 findMin:
 lodsb 
 cmp al, ah
 jae findNext 
 mov ah, al
 findNext:
 loop findMin
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 10.10.2011, 18:08   #5
igorio4eg
 
Регистрация: 14.09.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Tronix Посмотреть сообщение
А, ну там во-первых
mov cl, [myStrLen] , а не mov cl, myStrLen
во-вторых в ah перед циклом надо запихнуть максимальное значение, то есть 255: mov al,255
ну и сам цикл типа того:
Код:
 findMin:
 lodsb 
 cmp al, ah
 jae findNext 
 mov ah, al
 findNext:
 loop findMin
ооо, спасибо, работает
igorio4eg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск наименьшего слова в тексте Dizel!!! Общие вопросы C/C++ 3 14.04.2011 22:32
поиск наименьшего файла в каталоге. Shell Kastet14 Помощь студентам 3 15.03.2010 14:46
Как записать 256 ASCII символов? Alex Cones Общие вопросы Delphi 10 10.08.2009 07:50
Шифровка строки методом смещения кода символов Geddar Общие вопросы Delphi 2 04.02.2009 21:35