;начало проги OutStr macro str ;макрос вывода строки push dx mov ah,09h lea dx,str int 21h pop dx endm ;-------- .model small .code org 100h begin: jmp start ; описание переменных Return db '',10,13,'$' Hello db 'Vvedite stroku:',10,13,'$' param label byte ;Список параметров для int 21h maxlen db 32 ;Максимальная длина вводимой строки - 32 символа reallen db ? ;Реальная длина string db 32 dup (' '),'$' ;Введенные символы stringOut db 32 dup (' '),'$' ;Выводимые символы ;--------------------- начало программы start: OutStr Hello ;приглашение к вводу mov ah,0Ah ;функция DOS считывания строки, param - параметры ввода lea dx,param int 21h OutStr return ;перевод строки xor cx,cx xor ax,ax xor bx,bx ;bx - индекс очередного символа для обработки ;(равен cx(уменьшается) при считывании и увел. при записи в строку) mov cl,reallen ;в cx - размер строки для цикла обработки loopLabel: push bx ;сохраняем индекс записи mov bx,cx ;и записываем в bx индекс чтения mov al,string[bx] pop bx mov stringOut[bx],al ;запись в выходную строку inc bx ;увеличим индекс чтения dec cx cmp cx,0 jge loopLabel OutStr stringOut ;вывод результата на экран ;[***выход***] exit: mov ax,4C00h int 21h END BEGIN ;конец проги ---- P.s.: Скачал этот файл вместе с уже скомпилированным файлом, но не знаю как скомпилировать, т.к. выдаёт ошибки: warning A4023: with /coff switch, leading underscore required for start address: begin. Слышал, что нужен старый MASM32, т.к. в новом нельзя сделать com-файлы Пожалуйста, помогите отладить эту программу, чтобы компилировалась.
в любом случае лучше использовать последний ml.exe для доса старый link.exe, для винды новый link.exe P.S. - для библиотек (lib.exe) такая же ботва насколько помню ...или использовать fasm links.rar
Писал я как-то такую вещь: Код (Text): mov cx,slr_len mov si,offset source mov di,end_of_destination label: cld lodsb std stosb loop label Вроде меньше и быстее. Да и размещение данных посреди кода не есть хорошо. Помести их лучше после вызода из программы. Ассемблируй лучше TASM'ом, меньше проблем будет.
Одним байтом больше, одним меньше Но можно и поменять местами, если критично: Код (Text): label: lodsb std stosb cld loop label