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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2023, 23:01   #1
ChestIotVaga
Пользователь
 
Регистрация: 21.11.2022
Сообщений: 84
Восклицание выводит строку "Hello World" и удаляет из нее все буквы 'H', 'e', 'o' и 'd', а затем выводит оставшуюся часть строки. Но он не работает

Код:
 Код, который я предоставил, выводит строку "Hello World" и удаляет из нее все буквы 'H', 'e', 'o' и 'd', а затем выводит оставшуюся часть строки. Но он не работает помогите решить проблему 
.model small
.stack 100h

.data
message db 'Hello World$'
len equ $-message

.code
start:
    mov ax, @data
    mov ds, ax

    ; выводим сообщение
    mov ah, 09h
    lea dx, message
    int 21h

    ; удаляем буквы
    lea di, message
    mov si, di
    mov cx, len
    cld
    mov bl, 'H'
    mov bh, 'e'
    mov dl, 'o'
    mov dh, 'd'

    scanloop:
        lodsb
        cmp al, bl
        je skip
        cmp al, bh
        je skip
        cmp al, dl
        je skip
        cmp al, dh
        je skip
        stosb

    skip:
        loop scanloop

    ; выводим оставшуюся часть строки
    lea dx, message
    mov ah, 09h
    int 21h

    mov ah, 4ch
    int 21h
end start
ChestIotVaga вне форума Ответить с цитированием
Старый 05.04.2023, 23:19   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Потому что опять вы забыли настроить дополнительный сегмент данных. Команда stosb записывает байт по указателю es:di. Значит регистр es тоже надо настроить на тот же сегмент данных, что и ds
Код:
    mov ax, @data
    mov ds, ax
    mov es, ax
Для сравнения с байтами их не обязательно загружать в отдельные регистры
Код:
    mov bl, 'H'
    mov bh, 'e'
    mov dl, 'o'
    mov dh, 'd'
Достаточно сделать так
Код:
;    mov bl, 'H'
;    mov bh, 'e'
;    mov dl, 'o'
;    mov dh, 'd'

    scanloop:
        lodsb
        cmp al, 'H' ; bl
        je skip
        cmp al, 'e' ; bh
        je skip
        cmp al, 'o' ; dl
        je skip
        cmp al, 'd' ; dh
        je skip
        stosb

    skip:
        loop scanloop
macomics вне форума Ответить с цитированием
Старый 05.04.2023, 23:35   #3
ChestIotVaga
Пользователь
 
Регистрация: 21.11.2022
Сообщений: 84
По умолчанию

можете дать полный код прошу уже мучаюсь долго с ним
ChestIotVaga вне форума Ответить с цитированием
Старый 05.04.2023, 23:38   #4
ChestIotVaga
Пользователь
 
Регистрация: 21.11.2022
Сообщений: 84
По умолчанию

Код:
.model small
.stack 100h

.data
message db 'Hello World$'
len equ $-message

.code
start:
    mov ax, @data
    mov ds, ax
    mov es, ax


    ; выводим сообщение
    mov ah, 09h
    lea dx, message
    int 21h

    ; удаляем буквы
    lea di, message
    mov si, di
    mov cx, len
    cld
   ;    mov bh, 'e'
;    mov dl, 'o'
;    mov dh, 'd'

    scanloop:
        lodsb
        cmp al, 'H' ; bl
        je skip
        cmp al, 'e' ; bh
        je skip
        cmp al, 'o' ; dl
        je skip
        cmp al, 'd' ; dh
        je skip
        stosb

    skip:
        loop scanloop
    ; выводим оставшуюся часть строки
    lea dx, message
    mov ah, 09h
    int 21h

    mov ah, 4ch
    int 21h
end start
вот так теперь верно?
ChestIotVaga вне форума Ответить с цитированием
Старый 05.04.2023, 23:39   #5
ChestIotVaga
Пользователь
 
Регистрация: 21.11.2022
Сообщений: 84
По умолчанию

Код:
.model small
.stack 100h

.data
message db 'Hello World$'
len equ $-message

.code
start:
    mov ax, @data
    mov ds, ax
    mov es, ax


    ; выводим сообщение
    mov ah, 09h
    lea dx, message
    int 21h

    ; удаляем буквы
    lea di, message
    mov si, di
    mov cx, len
    cld

    scanloop:
        lodsb
        cmp al, 'H'
        je skip
        cmp al, 'e'
        je skip
        cmp al, 'l'
        je skip
        cmp al, 'o'
        je skip
        cmp al, ' '
        je skip
        cmp al, 'W'
        je skip
        cmp al, 'r'
        je skip
        cmp al, 'd'
        je skip
        stosb
    skip:
        loop scanloop

    ; выводим оставшуюся часть строки
    lea dx, message
    mov ah, 09h
    int 21h

    mov ah, 4ch
    int 21h
    ret
end start
или же так
ChestIotVaga вне форума Ответить с цитированием
Старый 05.04.2023, 23:40   #6
ChestIotVaga
Пользователь
 
Регистрация: 21.11.2022
Сообщений: 84
По умолчанию

ниже код просто выводи Hello World а я хотел бы чтоб он выводил только те слово после удалённых букв в коде
ChestIotVaga вне форума Ответить с цитированием
Старый 05.04.2023, 23:49   #7
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Просто у вас в тексте нету перевода строки и они сцепляются в консоли вместе. Добавьте вывод 13+10
Код:
    mov ah, 2
    mov dl, 13
    int 33
    mov dl, 10
    int 33
Код:
.model small
.stack 100h

.data
message db 'Hello World$'
len equ $-message

.code
start:
    mov ax, @data
    mov ds, ax
    mov es, ax


    ; выводим сообщение
    mov ah, 09h
    lea dx, message
    int 21h

    mov ah, 2
    mov dl, 13
    int 33
    mov dl, 10
    int 33

    ; удаляем буквы
    lea di, message
    mov si, di
    mov cx, len
    cld

    scanloop:
        lodsb
        cmp al, 'H' ; bl
        je skip
        cmp al, 'e' ; bh
        je skip
        cmp al, 'o' ; dl
        je skip
        cmp al, 'd' ; dh
        je skip
        stosb

    skip:
        loop scanloop
    ; выводим оставшуюся часть строки
    lea dx, message
    mov ah, 09h
    int 21h

    mov ah, 2
    mov dl, 13
    int 33
    mov dl, 10
    int 33

    mov ah, 4ch
    int 21h
end start
macomics вне форума Ответить с цитированием
Старый 05.04.2023, 23:53   #8
ChestIotVaga
Пользователь
 
Регистрация: 21.11.2022
Сообщений: 84
По умолчанию

macomics, вы мой спаситель спасибо вам
ChestIotVaga вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выводит только "Низкий", а "высокий и средний не выводит yuliya.al18 SQL, базы данных 1 23.11.2017 14:22
Си+ Выводит с ошибкой. Программа замены буквы "О" на малую "о" anyamisss Помощь студентам 1 24.03.2017 23:49
Вывести на экран дисплея в одну строку все литеры между "A" и "Z", включая эти буквы. shewlett Помощь студентам 3 24.02.2015 20:48
В TEdit в русской раскладке клавиатуры вместо "йцукен" выводит "9FC:5=" SSTW Общие вопросы Delphi 11 06.12.2014 17:16
запрашивает ввод времени суток и в зависимости от этого выводит на экран "Доброе утро", "Добрый день". Maria, Russia Помощь студентам 5 17.02.2009 21:44