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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2011, 20:36   #1
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию Выбрать MASM для такого кода.

Здравствуйте, чатлане. Прошу помощи. Написал прогу на коде, понятном masm . Для компилирования использую 2 exe - LINK и ML , и батник с таким содержимым:
Код:
ML /c 1.asm
pause
LINK16 1.obj;
Pause
Прога компилится, но пашет неправильно. Хочу трассировать прогу, а не просматривать содержимое переменных таким образом:
Код:
 mov dx, peremennaya
mov ax, 0Ah
int 21h
Скачал с http://masm32.com/ прог. среду masm32 v10, но он не хочет компилировать такой код:
Код:
.model small
.stack
.data

	msgEnterFName db "Enter #x file name: $"


	msgError   db "Error!",10,13,"$"
	
	msgErrorAccess db "Error access to output file!",10,13,"$"
	msgErrorIdent  db "Error ident of output file!",10,13,"$"
	
	msgErrorFileWrite  db "Error file write!$"
	msgErrorFileRead   db "Error file read!$"
	msgErrorFileOpen   db "Error file open!$"

	
	msgNoEr1 db "first in file open",10,13,"$"
	msgNoEr2 db "second in file open",10,13,"$"
	msgNoEr3 db "output file created",10,13,"$"
	
	msgComplite db 10,13,"Programm is complited",10,13,"$"
	
	
	fnameout db 'out.txt',0
	
	handlerIn1 dw ?
	handlerIn2 dw ?
	handlerOut dw ?
	
	
	
	fNameAdr db 254			; макс длинна строки (адрес начала строки)
	fNameLen db 0			; длинна строки
	db 254 dup (?)	 	 	; строка
	
	fbuf1 db 6 dup (?); 
	fbuf2 db 6 dup (?); 
		
	end_f1 db ?
	end_f2 db ?
	

	flagsEof db 0,0
	
.code
main   proc
   
   mov ax,@data
   mov ds,ax 
   xor ax,ax  


;;;;; Открытие первого фйала ;;;;;;;;;
;;;;; Принимаем имя для первого файла ;;; 
   
   ;; Подставляем номер файла в приглашение
   mov bx, offset msgEnterFName
   mov byte ptr [bx+7],31H 
   
   ;; Выводим приглашение
   mov ah,09h
   mov dx, offset msgEnterFName
   int 21h 
   
   ;; Принимаем имя первого файла 
   mov ah, 0ah
   mov dx, offset fNameAdr
   int 21h
 
                          ; Обрабатываем введенное значение, приводим его к имени файла
   xor bx,bx
   mov bl,ds:fNameLen     ; bl - длина введенной строки
   add bx,dx              ; получаем смещение к концу строки    
   mov byte ptr [bx+2],0  ; запишем 0 в конец строки
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    

  call NewStr ; перевод строки

 ;;;; Открываем первый файл ;;;;;;;;;;; 
   mov dx, offset fNameAdr
   add dx, 2 
   mov ah,3dh         ; Открыть файл
   mov al,0	      ; Режим доступа - только чтение
   int 21h            ; открываем первый файл
   
   jc erroFileOpen    ; уходим на ошибку если CF=1
 
   mov handlerIn1, ax ; сохраняем указатель на первый файл
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 


  
;;;;; Открытие второго фйала ;;;;;;;;;
;;;;; Принимаем имя для второго файла ;;; 
   
   ;; Подставляем номер файла в приглашение
   mov bx, offset msgEnterFName
   mov byte ptr [bx+7],32H 
   
   ;; Выводим приглашение
   mov ah,09h
   mov dx, offset msgEnterFName
   int 21h 
   
   ;; Принимаем имя второго файла 
   mov ah, 0ah
   mov dx, offset fNameAdr
   int 21h
 
   ;; Обрабатываем введенное значение, приводим его к имени файла
   xor bx,bx
   mov bl,ds:fNameLen     ; bl - длинна введенной строки
   add bx,dx              ; получаем смещение к концу строки    
   mov byte ptr [bx+2],0  ; запишем 0 в конец строки
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    

  call NewStr ; перевод строки

 ;;;; Открываем второй файл ;;;;;;;;;;; 
   mov dx, offset fNameAdr
   add dx, 2 	
   mov ah,3dh		; открыть файл
   mov al,0		; режим доступа - только чтение
   int 21h              ; открываем второй файл
   
   jc erroFileOpen    ; уходим на ошибку если CF=1
 
   mov handlerIn2, ax ; сохраняем указатель на второй файл
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   
;;;;;; Создаем третий файл для вывода ;;;;;;;;;;;
   mov ah,3ch   		; создать файл
   mov cx,0			; атрибуты - обычный файл
   mov dx, offset fnameout	; имя файла
   int 21h 	
   
   jc  erroFileOpen
 
   mov handlerOut,ax
   
   mov   ah,09h			; вывод сообщения на экран
   mov   dx, offset msgNoEr3 	; это выводим 
   int   21h   
   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;Логика;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   
   
;;;; Читаем файлы ;;;;
readFiles:

	  ;; обнуляем флаги окончания файлов
	  mov [flagsEof], 0
	  mov [flagsEof+1], 0

	  ;; обнуляем буфер чтения файлов
	  mov [fbuf1], 0
	  mov [fbuf2], 0
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 26.11.2011, 20:37   #2
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Код:
	  ;;;;;;;;;;;;;;;;;;считываем из первого;;;;;;;;;;;;;;;;;;;;
	  mov ah, 3fh
	  mov bx, handlerIn1
	  mov dx, offset fbuf1
	  mov cx, 6  
	  int 21h

			   mov  dx, offset fbuf2
			   mov  ah,0Ah
			   int  21h
			   call NewStr

  
 	 jnc File1NotEof_1 ; если чтение не удалось
	  mov [flagsEof], 6;

File1NotEof_1:
  
	  cmp ax,0 
	  jnz File1NotEof_2 ; если байт не считан
	  mov [flagsEof], 6;

File1NotEof_2:

	  ;;;;;;;;;;;;;;;;;;считываем из второго ;;;;;;;;;;;;;;;;;;;;;
	  mov ah, 3fh
	  mov bx, handlerIn2
	  mov dx, offset fbuf2
	  mov cx, 6 ; 
	  int 21h   

			   mov dx, offset fbuf2
			   mov ah,0Ah
			   int 21h
			   call NewStr


	  jnc File1NotEof1 ; если чтение не удалось
	  mov [flagsEof+1], 6; 

File1NotEof1:
  
	  cmp ax,0 
	  jnz File1NotEof2 ; если байт не считан
	  mov [flagsEof+1], 6; и

File1NotEof2:

	  ;; Если оба файла кончились, то выходим из цикла
	  mov dl, [flagsEof]
	  mov bl, [flagsEof+1]
	  and dl,bl
	  cmp dl,1
	  jz FilesWasEof  



			mov  cx, 6
			mov  si, offset fbuf2
			mov  di, offset fbuf1
			repe cmps ES:fbuf2,ES:fbuf1
			je readFiles
NoCmp:

	  mov dx, offset fbuf2
	  mov cx, 16
          mov ah, 40h
	  int 21h  
	  jc erroFileWrite
  
	  jmp readFiles ;прыгаем на повторное чтение
  
FilesWasEof: 
       
	   mov   ah,09h
	   mov   dx, offset msgComplite
	   int   21h
	   jmp Exit ;на выход
   
error:  
	   call NewStr 
	   mov   ah,09h
	   mov   dx, offset msgError
	   int   21h
	   jmp Exit ;на выход

erroFileRead:  
	   call NewStr 
	   mov   ah,09h
	   mov   dx, offset msgErrorFileRead
	   int   21h
	   jmp Exit ;на выход
   
erroFileOpen:  
	   call NewStr 
	   mov   ah,09h
	   mov   dx, offset msgErrorFileOpen
	   int   21h
	   jmp Exit ;на выход

erroFileWrite: 
	   cmp ax, 05h
	   jz errorAccess
   
	   cmp ax, 06h
	   jz errorIdent
 
	   mov   ah,09h
	   mov   dx, offset msgErrorFileWrite
	   int   21h
	   jmp Exit ;на выход
   
 errorAccess:  
	   mov   ah,09h
	   mov   dx, offset msgErrorAccess
	   int   21h 
	   jmp Exit ;на выход
 errorIdent:
	   mov   ah,09h
	   mov   dx, offset msgErrorIdent
	   int   21h 
	   jmp Exit ;на выход

Exit:  
	   mov ah,0Ah
	   int 21h

	   mov   ax,4c00h
	   int   21h   
   
   
main   endp

;***********Процедура перевода строки**********
NewStr proc
	mov dl,13
	mov ah,2
	int 21h

	mov dl,10
	mov ah,2
	int 21h
	ret
NewStr endp 
;***********/Процедура перевода строки**********

end main
Помогите, что делать?
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какие есть компоненты для Delphi для создания такого интерфейса? Marsel737 Свободное общение 7 24.09.2011 18:25
Посоветуйте, что выбрать для релизации RomanA Помощь студентам 3 11.08.2011 08:54
Что выбрать TASM или MASM для программирования на ассемблере? Alabay Помощь студентам 1 11.01.2009 11:48
Что выбрать для С++? argrus Помощь студентам 12 30.03.2008 13:58