РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 1581 | Дата выхода: | 02.01.2016, 18:51 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 16 / 7 | Вопросов / ответов: | 1 / 1 | Консультация # 188568: Здравствуйте! У меня возникли сложности с таким вопросом: в программе создается каталог, в нем файл и записывается любая символьная строка. не записывает первый символ строки и в конце добавляет некий не читаемый символ.Хотелось бы узнать причину и способ ее устранения. также интересовал вопрос: полное значение строки BUF DD 255,0,255 DUP (0)... Консультация # 188568: Здравствуйте! У меня возникли сложности с таким вопросом: в программе создается каталог, в нем файл и записывается любая символьная строка. не записывает первый символ строки и в конце добавляет некий не читаемый символ.Хотелось бы узнать причину и способ ее устранения. также интересовал вопрос: полное значение строки BUF DD 255,0,255 DUP (0), для чего нужны цифры и почему ноль в скобках.
Код (Assembler): title KURS (COM) .MODEL TINY .CODE org 100h begin: MOV AH,02 MOV BH,00 MOV DH,02 MOV DL,1Eh INT 10h MOV AH,09 LEA DX,STRING1 INT 21h MOV AH,02 MOV BH,00 MOV DH,03 MOV DL,18h INT 10h MOV AH,09 LEA DX,STRING2 INT 21h MOV AH,02 MOV BH,00 MOV DH,04 MOV DL,1Ah INT 10h MOV AH,09 LEA DX,STRING3 INT 21h MOV AH,02 MOV BH,00 MOV DH,05 MOV DL,17h INT 10h MOV AH,09 LEA DX,STRING4 INT 21h MOV AH,02 MOV BH,00 MOV DH,06 MOV DL,20h INT 10h MOV AH,09 LEA DX,STRING5 INT 21h MOV AH,02 MOV BH,00 MOV DH,08 MOV DL,00 INT 10h MOV AH,09h LEA DX,SIZEMES INT 21h MOV AX,SIZE MOV BX,10 XOR CX, CX point1: XOR DX, DX DIV BX PUSH DX INC CX OR AX, AX JNZ point1 point2: POP AX OR AL,30h INT 29h LOOP point2 MOV AH,09h LEA DX,BAIT INT 21h MOV AH,09h LEA DX,ENTER INT 21h target: MOV AH,08h INT 21h CMP AL,0Dh JNE target MOV AH,39h LEA DX,NAMECATALOG INT 21h JC error1 MOV AH,09h LEA DX,CATALOG INT 21h MOV AH,09h LEA DX,ENTER INT 21h target1: MOV AH,08h INT 21h CMP AL,0Dh JNE target1 MOV AH,3Ch MOV CX,00h LEA DX,FILENAME INT 21h MOV HANDLE,AX JC error2 MOV AH,09 LEA DX,FILE INT 21h MOV AH,09h LEA DX,ENTER INT 21h target2: MOV AH,08h INT 21h CMP AL,0Dh JNE target2 MOV AH,09 LEA DX,STRING INT 21h MOV AH,0Ah LEA DX,BUF INT 21h MOV AH,40h MOV BX,HANDLE LEA CX,BUF[2] LEA DX,BUF[3] INT 21h MOV AH,3Eh MOV BX,HANDLE INT 21h JC error3 mov ah,09h lea dx,MESS int 21h mov ah,08h int 21h mov ax,4C00h int 21h error1: mov ah,09h lea dx,ERRORMES1 int 21h mov ah,09h lea dx,MESS int 21h mov ah,08h int 21h mov ax,4C00h int 21h error2: mov ah,09h lea dx,ERRORMES2 int 21h mov ah,09h lea dx,MESS int 21h mov ah,08h int 21h mov ax,4C00h int 21h error3: mov ah,09h lea dx,ERRORMES3 int 21h mov ah,09h lea dx,MESS int 21h mov ah,08h int 21h mov ax,4C00h int 21h SIZEMES DB 'Razmer programmi: $' STRING1 DB 'KURSOVAYA RABOTA$' STRING2 DB 'Sistemnoe Programmirovanie$' STRING3 DB 'Student gruppi EAS 304$' STRING4 DB 'Aznabayev Ramil Rayatovich$' STRING5 DB 'Variant 1.1$' MESS DB 0Ah,'Press any key...$' ENTER DB 0Ah,0Dh,'Press ENTER...$' NAMECATALOG DB '\SPO',0 FILENAME DB '\SPO\KURS_SPO.txt',0 CATALOG DB 0Dh,'Sozdan katalog C:\SPO',0Ah,'$' FILE DB 0Dh,'Sozdan fail C:\SPO\KURS_SPO.txt',0Ah,'$' STRING DB 0Dh,'Vvedite stroku simvolov dlya zaneseniya v fail: $' ERRORMES1 DB 0Dh,'Ne udalos sozdat katalog!',0Ah,0Dh,'$' ERRORMES2 DB 0Dh,'Ne udalos otkrit fail!',0Ah,0Dh,'$' ERRORMES3 DB 0Dh,'Oshibka pri zakritii faila!',0Ah,0Dh,'$' BAIT DB 'bait',0Ah,0Dh,'$' HANDLE DW ? BUF DD 255,0,255 DUP (0) ; SIZE = $-begin END begin Дата отправки: 28.12.2015, 18:39 Вопрос задал: aznabayevramil (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, aznabayevramil! Ваши вопросы - об одном и том же "Неправильная" строка - результат непонимания строки-параметра для функции запроса строки Ошибка в том, что было выделение памяти в двойных словах (DD), а требуется в байтах (DB) Формат строки следующий: Первый байт - максимальный размер буфера в байтах, с учетом последнего кода odh, который добавляется автоматически Второй байт = реальная длина введенной строки (без последнего 0dh). Вначале - неважно что. Обычно пишут 0 Начиная с третьего - сама строка Теперь о конструкции N dup(M) Это оператор языка Ассемблера, указывающий о повторении N раз кода в скобках. Этот код (M) может быть задан любым способом: числом, символом в кавычках или знаком вопроса. Если использовано число или символ, что по сути тоже число, то данное число прописывается по всему буферу. Если использован знак вопроса, то фактически ничего не прописывается, а только резервируется место. Это относится и к другим выделениям памяти (типа handle dw ?) Это значит, что код программы не будет содержать этих буферов и переменных. Но! Если после таких выделений памяти будет стоять что-то конкретное (типа x dw 0), то все буфера и переменные со знаком вопроса окажутся в теле программы, заполненные нулями. Поэтому желательно области со знаками вопроса располагать в конце всей программы. Небольшое замечание по тексту программы: нежелательно использовать в качестве меток и имен переменных зарезервированные слова. Типа SIZE, ENTER и другие.
Код (Assembler): title KURS (COM) .MODEL TINY .CODE org 100h begin: MOV AH,02 MOV BH,00 MOV DH,02 MOV DL,1Eh INT 10h MOV AH,09 LEA DX,STRING1 INT 21h MOV AH,02 MOV BH,00 MOV DH,03 MOV DL,18h INT 10h MOV AH,09 LEA DX,STRING2 INT 21h MOV AH,02 MOV BH,00 MOV DH,04 MOV DL,1Ah INT 10h MOV AH,09 LEA DX,STRING3 INT 21h MOV AH,02 MOV BH,00 MOV DH,05 MOV DL,17h INT 10h MOV AH,09 LEA DX,STRING4 INT 21h MOV AH,02 MOV BH,00 MOV DH,06 MOV DL,20h INT 10h MOV AH,09 LEA DX,STRING5 INT 21h MOV AH,02 MOV BH,00 MOV DH,08 MOV DL,00 INT 10h MOV AH,09h LEA DX,SIZEMES INT 21h MOV AX,SIZEPRG MOV BX,10 XOR CX, CX point1: XOR DX, DX DIV BX PUSH DX INC CX OR AX, AX JNZ point1 point2: POP AX OR AL,30h INT 29h LOOP point2 MOV AH,09h LEA DX,BAIT INT 21h MOV AH,09h LEA DX,WAITENTER INT 21h target: MOV AH,08h INT 21h CMP AL,0Dh JNE target MOV AH,39h LEA DX,NAMECATALOG INT 21h JC error1 MOV AH,09h LEA DX,CATALOG INT 21h MOV AH,09h LEA DX,WAITENTER INT 21h target1: MOV AH,08h INT 21h CMP AL,0Dh JNE target1 MOV AH,3Ch MOV CX,00h LEA DX,FILENAME INT 21h MOV HANDLE,AX JC error2 MOV AH,09 LEA DX,FILE INT 21h MOV AH,09h LEA DX,WAITENTER INT 21h target2: MOV AH,08h INT 21h CMP AL,0Dh JNE target2 MOV AH,09 LEA DX,STRING INT 21h MOV AH,0Ah LEA DX,BUF INT 21h MOV AH,40h MOV BX,HANDLE XOR CX,CX MOV CL,BUF[1] LEA DX,BUF[2] INT 21h MOV AH,3Eh MOV BX,HANDLE INT 21h JC error3 mov ah,09h lea dx,MESS int 21h mov ah,08h int 21h mov ax,4C00h int 21h error1: mov ah,09h lea dx,ERRORMES1 int 21h mov ah,09h lea dx,MESS int 21h mov ah,08h int 21h mov ax,4C00h int 21h error2: mov ah,09h lea dx,ERRORMES2 int 21h mov ah,09h lea dx,MESS int 21h mov ah,08h int 21h mov ax,4C00h int 21h error3: mov ah,09h lea dx,ERRORMES3 int 21h mov ah,09h lea dx,MESS int 21h mov ah,08h int 21h mov ax,4C00h int 21h SIZEMES DB 'Razmer programmi: $' STRING1 DB 'KURSOVAYA RABOTA$' STRING2 DB 'Sistemnoe Programmirovanie$' STRING3 DB 'Student gruppi EAS 304$' STRING4 DB 'Aznabayev Ramil Rayatovich$' STRING5 DB 'Variant 1.1$' MESS DB 0Ah,'Press any key...$' WAITENTER DB 0Ah,0Dh,'Press ENTER...$' NAMECATALOG DB '\SPO',0 FILENAME DB '\SPO\KURS_SPO.txt',0 CATALOG DB 0Dh,'Sozdan katalog C:\SPO',0Ah,'$' FILE DB 0Dh,'Sozdan fail C:\SPO\KURS_SPO.txt',0Ah,'$' STRING DB 0Dh,'Vvedite stroku simvolov dlya zaneseniya v fail: $' ERRORMES1 DB 0Dh,'Ne udalos sozdat katalog!',0Ah,0Dh,'$' ERRORMES2 DB 0Dh,'Ne udalos otkrit fail!',0Ah,0Dh,'$' ERRORMES3 DB 0Dh,'Oshibka pri zakritii faila!',0Ah,0Dh,'$' BAIT DB 'bait',0Ah,0Dh,'$' HANDLE DW ? BUF DB 255,0,255 DUP (0) ; SIZEPRG = $-begin END begin
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий