![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 23.09.2013
Сообщений: 14
|
![]()
Здравствуйте,у меня задание: написать программу ввода-вывода (строка текста-строка символов с клавиатуры-строка текста). Программу написала... Первая строка выводится, но когда дело доходит до ввода с клавиатуры, программа говорит мне "нет". Я понимаю, что ошибка моя и даже примерно представляю, в чем она, но разобраться не могу...
![]() Вот моя программа: hu.zip Вот скрин: скрин.jpg |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Unseen_Madness, расскажите, кто Вас и, главное, ЗАЧЕМ мучает?!
Вы продолжаете писать программы напрямую через Hex-редактор в машинных кодах?! И это без вариантов? (по другому никак нельзя?) Какой цели добиваются ваши преподаватели? Ладно. пока Вы не ответили, допустим, что Вам это действительно надо. Тогда расскажите, как Вы это делаете? Вы же, прежде чем ввести машинные коды, откуда то их получаете? Откуда? Возможно (если уж этому Вас учат), Вам нужно сначала написать программу на Ассемблере, потом проставить машинные коды, потом проставить адреса (при проставлении кодов ещё может быть неизвестна, где будет расположен адрес, если ссылка осуществляется вперёд). Как Вы это делаете? И если я прав и Вы сначала пишете программу (пусть на бумажке) на Ассемблере, то где её код?! а та программа, которую Вы выложили, после дизассемблера выглядит (в чёрновом варианте) примерно так: Код:
т.е. происходит попытка выполнить такой код: Код:
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 23.09.2013
Сообщений: 14
|
![]()
Нет, я добивалась примерно следующего:
Код HTML:
MOV DX 0701 MOV AH 09 INT 21 W w e d i t e SP 5 SP s i m w o l o w CR LF $ MOV DX 392D MOV AH 01 функция эхо INT 21 $ MOV DX 3B35 MOV AH 01 INT 21 $ MOV DX 433D MOV AH 01 INT 21 $ MOV DX 4B45 MOV AH 01 INT 21 $ MOV DX 554D MOV AH 01 INT 21 CR LF $ MOV DX 6657 MOV AH 09 INT 21 S p a s i b o CR LF $ Код HTML:
MOV DX 392D MOV AH 01 функция эхо INT 21 $ MOV DX 3B35 MOV AH 01 INT 21 $ MOV DX 433D MOV AH 01 INT 21 $ MOV DX 4B45 MOV AH 01 INT 21 $ MOV DX 554D MOV AH 01 INT 21 CR LF $ Адреса я просчитала. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 23.09.2013
Сообщений: 14
|
![]()
Как я уже говорила, это лабораторные. Дело в том, что к курсу они никакого отношения, по сути, не имеют и сделаны "чтобы лучше понять структуру ЭВМ". Так что все это оставлено на самотек, под самостоятельный разбор. К слову, я и ассемблер-то никогда не изучала)
|
![]() |
![]() |
![]() |
#5 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
Вот смотрите. Есть машинный код. (для простоты берём COM программу). Этот код загружается в память ОС и выполняется процессором из памяти последовательно (исключая команды перехода, конечно) - команда за командой (каждая команда занимает разное число байт, но сейчас речь о другом). Разделения на то, что это - команда или данные - НЕТ! Понимаете - НЕТ! Процессор, встретив байты 57 77 65 64 69 74 воспринимает их как машинные КОМАНДЫ, а не как текст 'Wwedit'!! Поэтому, ваша задача, как программиста, обеспечить так, чтобы выполнение НЕ ПОПАДАЛО в те байты, где у Вас находится не выполняемый код, а ваши данные! Делать это можно разными способами. вариант 1. Располагать данные прямо в код, но ставить команды перехода так, чтобы выполнение перепрыгивало через данные. выглядеть это будет примерно так: Код:
и все нужные данные располагаем после этого кода: Код:
кстати, вот пример программы с вводом с клавиатуры (просто пример, взял готовый у себя в папке): Код:
p.s. Цитата:
Вы не ответили на вопрос - КАК вы это делаете (я про написание программы в машинных кодах)! Откуда Вы берёте сами машинные коды для Ассеблерных команд? Последний раз редактировалось Serge_Bliznykov; 24.10.2013 в 13:30. |
||
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 23.09.2013
Сообщений: 14
|
![]()
Спасибо большое, попытаюсь разобраться)
Пишу в коде ассемблера, затем, пользуясь табличкой, перевожу его в машинный) |
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
пожалуйста. Если будут вопросы - пишите, будем вместе разбираться..
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программа для ввода строковых данных с клавиатуры. Запретить ввод пробела в строку (Ассемблер) | Victor Babin | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 05.12.2012 09:38 |
Написать рекурсивную процедуру для ввода с клавиатуры последовательности чи-сел (конец ввода – 0) и вывода её на экран в обратном | netiv | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 17.02.2012 18:14 |
ассемблер. нужно написать собственные процедуры ввода-вывода | Kuroi_Aida | Фриланс | 2 | 15.02.2012 12:13 |
Программа с минимальными задержками ввода-вывода | Zarom | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 4 | 22.06.2011 20:10 |
Программа ввода и вывода последовательности символов(Assembler) | WST | Помощь студентам | 1 | 01.04.2008 12:33 |