WMmail.ru - сервис почтовых рассылок

суббота, 2 января 2016 г.

RFpro.ru: Ассемблер? Это просто! Учимся программировать

 
Если выпуск не отображается, вы можете прочесть его на сайте
  

  
Clarion HDTV (9:16) 269/106" 132x234 M1300 (натяжн Clarion HDTV (9:16) 269/106" 132x234 M1300 (натяжн
Купить за 77834 руб. Подробнее...

  YST-SW030 black YST-SW030 black
Купить за 6489 руб. Подробнее...

  BS 70 (высота 70 см) silver BS 70 (высота 70 см) silver
Купить за 19000 руб. Подробнее...

 
  
     
   RFpro.ru: Ассемблер? Это просто! Учимся программировать
  

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 6610
• повысить рейтинг »
Асмик Гаряка
Статус: Советник
Рейтинг: 259
• повысить рейтинг »
Куликов Роман Евгеньевич
Статус: 1-й класс
Рейтинг: 0
• повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска: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!
Ваши вопросы - об одном и том же smile
"Неправильная" строка - результат непонимания строки-параметра для функции запроса строки
Ошибка в том, что было выделение памяти в двойных словах (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  

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 29.12.2015, 00:18
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!

 
     Прошлые выпуски
RFpro.ru: Ассемблер? Это просто! Учимся программироватьRFpro.ru: Ассемблер? Это просто! Учимся программироватьRFpro.ru: Ассемблер? Это просто! Учимся программироватьВсе выпуски рассылки
 
 
Subscribe.Ru / АО «Интернет-Проекты» / О компании / Политика конфиденциальности

Комментариев нет:

Отправить комментарий