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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2018, 22:22   #1
temsku2
Пользователь
 
Регистрация: 29.11.2018
Сообщений: 12
По умолчанию Код программы, который при вводе строки проверяет, есть ли в ней пробел и выводит соответствующее сообщение. Подскажите , что не так в коде?

Код программы, который при вводе строки проверяет, есть ли в ней пробел и выводит соответствующее сообщение. Программу скомпилировал без ошибок, но она не работает. Подскажите, что не так?

Код:
.model small
    .data
    da db "there is a space char" 
    net db "there isn't"
    sor db 255, ?, ?
    .code
    mov ax, @data
    mov ds, ax
    mov ah, 0ah
    lea dx, sor
    int 21h
    mov di,dx  
compare:
    cmp byte ptr di, " "
    je outp
    cmp byte ptr di, "$"
    je outnet
    jmp compare
outp:
    lea dx, da
    mov ah, 09h
    int 21h
outnet:
    lea dx, net
    mov ah, 09h
    int 21h
end
_____
Код программы нужно выделять (форматировать) тегами [CODE] [/CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 30.11.2018 в 00:02.
temsku2 вне форума Ответить с цитированием
Старый 30.11.2018, 00:04   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от temsku2 Посмотреть сообщение
cmp byte ptr di, "$"
так откуда в введённой строке возьмётся знак "$" ?
Цитата:
Сообщение от temsku2 Посмотреть сообщение
Код:
sor db 255, ?, ?
замените это на
Код:
sor db 254,0,254 dup ('$')

и ещё.
Цитата:
Сообщение от temsku2 Посмотреть сообщение
Код:
da db "there is a space char" 
    net db "there isn't"
раз Вы текст выводите через 09 функцию 21 прерывания, то нужно в конце строки поставить знак "$":

Код:
da db "there is a space char$" 
net db "there isn't$"

Последний раз редактировалось Serge_Bliznykov; 30.11.2018 в 00:12.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.11.2018, 07:47   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

..а ещё di взять в квадратные скобки (внутри цикла), подкорректировать его на начало данных в буфере, и вставить выход из программы ah=4Ch
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 30.11.2018, 08:16   #4
temsku2
Пользователь
 
Регистрация: 29.11.2018
Сообщений: 12
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
подкорректировать его на начало данных в буфере, и вставить выход из программы ah=4Ch
Подскажите, пожалуйста, как правильно сделать выход из программы?
temsku2 вне форума Ответить с цитированием
Старый 30.11.2018, 08:29   #5
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от temsku2 Посмотреть сообщение
выход из программы
Код:
mov ah,4ch
int 21h
и ещё, почитай про буфер функции AH=0Ah (ввод строки в буфер).
там в первом байте задаётся макс.возможное кол-во символов,
во-втором байте будет реальное кол-во символов, после ввода
а с третьего байта начинается сам буфер..

соответственно, тебе нужно настроить DI на sor+2 (отсчёт с нуля)
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 30.11.2018, 09:01   #6
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

здесь есть справочник по-прерываниям DOS: http://old-dos.ru/dl.php?id=7623
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 05.12.2018, 11:38   #7
temsku2
Пользователь
 
Регистрация: 29.11.2018
Сообщений: 12
По умолчанию

***

Последний раз редактировалось temsku2; 05.12.2018 в 11:42.
temsku2 вне форума Ответить с цитированием
Старый 05.12.2018, 11:40   #8
temsku2
Пользователь
 
Регистрация: 29.11.2018
Сообщений: 12
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
Код:
mov ah,4ch
int 21h
соответственно, тебе нужно настроить DI на sor+2 (отсчёт с нуля)
Вот, я что-то намудрил, получается ввести строку, но все время выводит, что нет пробела(
Код:
.model small
    .data
    da db "there is a space char$" 
    net db "there isn't$"
    sor db 254,0,254 dup ('$')
    .code
    mov ax, @data
     mov ds, ax
    mov ah, 0ah
    lea dx, sor+2
    int 21h
    mov di,dx
compare:
    cmp byte ptr [di], " "
    je outp
    cmp byte ptr [di], "$"
    je outnet
    jmp compare
 
outp:
    lea dx, da
    mov ah, 09h
    int 21h
 
outnet:
    lea dx, net
    mov ah, 09h
    int 21h
temsku2 вне форума Ответить с цитированием
Старый 05.12.2018, 13:30   #9
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от temsku2 Посмотреть сообщение
jmp compare
поставь перед этой инструкцией, inc di, поскольку указатель у тебя вообще не смещается и ты стоишь на месте.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 06.12.2018, 09:49   #10
temsku2
Пользователь
 
Регистрация: 29.11.2018
Сообщений: 12
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
поставь перед этой инструкцией, inc di, поскольку указатель у тебя вообще не смещается и ты стоишь на месте.
Заработало, благодарю
temsku2 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Код выдает ошибку при вводе 9 строки Николай4434 Помощь студентам 2 10.10.2017 01:17
Предусмотреть соответствующее сообщение при делении на ноль. deconi JavaScript, Ajax 2 09.12.2015 09:30
Как сделать так,что бы при введение,например 0;0 выдавалось сообщение,что точка находится на границе? TEIROP Visual C++ 4 08.11.2015 20:19
С++, подскажите что не так в коде Dima-91 Помощь студентам 13 16.07.2015 13:11
проверяет пароль при открытие формы, движение рисунка Делфи 7 (есть код программы. нужен другой вариант) программирование Помощь студентам 3 29.09.2013 15:47