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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2012, 01:26   #1
Delving
Новичок
Джуниор
 
Регистрация: 25.03.2012
Сообщений: 2
По умолчанию Не могу найти ошибку,Ассемблер

написал небольшую прогу,никак не пойму ошибку.. запускаю прогу через DosBox.. Ввожу "lab1 C",по сути он должен вывести "Right",а он перескакивает на на метку exit и не выводит,то что нужно(

вот,скрин..
http://saveimg.ru/show-image.php?id=...598236df382fd0

Код:
code_seg segment
assume cs:code_seg,ds:code_seg,ss:code_seg
org 100h
start:
jmp begin
mes: DB 13,10,' Right or not right string'
DB 13,10,13,10,13,10,'$'


begin:
mov AH, 9h ; функция,печатающая строку
; $ - ограничитель строки
lea DX, mes
int 21h ; print string

mov CL,	ES:80h	 ; Длина хвоста в PSP
cmp CL,	0	 ; Длина хвоста=0?
je install_without_arg ; Да, прогр.запущена без пар. 



xor CH,	CH ; CX=CL= длина хвоста
cld ; DF=0 - флаг направления вперед
mov DI, 81h ; ES:DI-> начало хвоста в PSP
mov SI,	offset key ; DS:SI-> поле key
mov AL,	' ' ; Уберем пробелы из начала хвоста
repe scasb ; Сканируем хвост пока пробелы
; AL - (ES:DI) -> флаги процессора
; повторять пока элементы равны
inc DI ; DI-> на первый символ после пробелов
cmp SI,DI 
je print_mes_and_exit ; Неизвестная команда
jne exit

print_mes_and_exit:
mov AH, 9h ; функция,печатающая строку
; $ - ограничитель строки
lea DX, mes2
jmp the_end
install_without_arg:
mov AH, 9h ; функция,печатающая строку
; $ - ограничитель строки
lea DX, mes1
jmp the_end

the_end:
int 21h ; print string 
exit:
int 20h
key DB 'C'	 ; команда
mes1: DB 13,10,' No arguments'
DB 13,10,13,10,13,10,'$'
mes2: DB 13,10,' Right'
DB 13,10,13,10,13,10,'$'
code_seg ends
end start

Последний раз редактировалось ACE Valery; 25.03.2012 в 02:35.
Delving вне форума Ответить с цитированием
Старый 25.03.2012, 01:40   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

сравниваете не ключ и аргумент, а адрес ключа и аргумента
хотя это я бегло просмотрел... имхо, не "cmp SI, DI", a через сравнение с префиксом rep, либо уж типа "cmp [SI], [DI]" т.е. сравниваем уже сами символы

Последний раз редактировалось GreenWizard; 25.03.2012 в 01:43.
GreenWizard вне форума Ответить с цитированием
Старый 25.03.2012, 02:00   #3
Delving
Новичок
Джуниор
 
Регистрация: 25.03.2012
Сообщений: 2
По умолчанию

Цитата:
Сообщение от GreenWizard Посмотреть сообщение
сравниваете не ключ и аргумент, а адрес ключа и аргумента
хотя это я бегло просмотрел... имхо, не "cmp SI, DI", a через сравнение с префиксом rep, либо уж типа "cmp [SI], [DI]" т.е. сравниваем уже сами символы
всяко пробовал и через адреса и через rep,не получается
Delving вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибку... pufystyj PHP 7 03.03.2011 08:36
Не могу найти ошибку T-dayne Помощь студентам 4 11.10.2010 11:51
Не могу найти ошибку IgorGO Microsoft Office Excel 11 17.09.2010 16:28
Не могу найти ошибку С\С++ Айдар Помощь студентам 1 08.03.2010 18:16