|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.11.2011, 17:58 | #1 |
Пользователь
Регистрация: 21.04.2010
Сообщений: 36
|
Ассемблер(TASM) проблема с вводом
Добрый вечер уважаемые программисты. У меня есть несколько вопросов по моей лабе.Работаю на ассемблере(TASM)
Задание: Ввести с клавиатуры 2 строки. 1)Имя файла(с указанием пути) 2)Новое имя файла(для переименования) Вот моя наработка Код HTML:
Seg_STACK SEGMENT PARA STACK 'STACK' DB 64 DUP (?) Seg_STACK ENDS Seg_DATA SEGMENT PARA PUBLIC 'DATA' fname1 Db ? fname2 Db ? Seg_DATA ENDS Seg_CODE SEGMENT PARA PUBLIC 'CODE' BEGIN PROC FAR ASSUME CS: Seg_CODE, DS: Seg_DATA, SS:Seg_STACK mov AH, 3Fh ;для ввода mov BX, 0 ;дискриптор клавиатуры mov cx,50 ;Максимальное число символов int 21h ;прерывание mov AH, 3Fh ;для ввода mov BX, 0 ;дискриптор клавиатуры mov cx,50 ;Максимальное число символов int 21h ;прерывание push DS ;настроим ES pop ES ;на сегмент данных mov AH, 56h ;для переименования mov DX, offset fname1 ;старое название файла mov DI, offset fname2 ;новое название файла int 21h ; прерываение BEGIN ENDP Seg_CODE ENDS END BEGIN |
18.11.2011, 18:27 | #2 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Когда вы подготавливаете вызов службы mov AH, 3Fh ;для ввода для прерывания 21h очевидно вы должны указать адрес области, куда будет считываться ввод. Смотрите описание этой функции. Там должно быть указано, какие регистры что должны хранить. Скорей всего в один из этих регистров, то ли SI, то ли DI, то ли еще какой вы должны указать смещение ваших байтовых строк, установив также сегментный регистр.
Со мной можно встретиться на www.clipper.borda.ru
|
18.11.2011, 18:32 | #3 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Во-первых, ты выделяешь для имен файлов по одному байту. Они туда не поместятся, очевидно )
Во-вторых, при использовании функций ввода нужно задавать адрес буфера, в который читать. В-третьих, нет вызова функции завершения программы. ... |
20.11.2011, 14:49 | #4 |
Пользователь
Регистрация: 21.04.2010
Сообщений: 36
|
Во-первых, ты выделяешь для имен файлов по одному байту. Они туда не поместятся, очевидно )
Для имён и пути Увеличил до dw Во-вторых, при использовании функций ввода нужно задавать адрес буфера, в который читать. В учебнике нашёл конструкцию описания буфера: Код HTML:
inbuf dw 256 dup ('*'),'$' Добавил: Код HTML:
mov AH,4Ch ; Функция 4Ch завершения программы mov AL,00h ; Код 0 успешного завершения int 21h ; Вызов DOS Код HTML:
Seg_STACK SEGMENT PARA STACK 'STACK' DB 64 DUP (?) Seg_STACK ENDS Seg_DATA SEGMENT PARA PUBLIC 'DATA' fname1 dw ? fname2 dw ? inbuf dw 256 dup ('*'),'$' Seg_DATA ENDS Seg_CODE SEGMENT PARA PUBLIC 'CODE' BEGIN PROC FAR ASSUME CS: Seg_CODE, DS: Seg_DATA, SS:Seg_STACK mov AH, 3Fh ;для ввода mov BX, 0 ;дискриптор клавиатуры mov cx,50 ;Максимальное число символов mov DX,offset inbuf;буфер int 21h ;прерывание mov fname1, offset inbuf;Адрес старого названия mov AH, 3Fh ;для ввода mov BX, 0 ;дискриптор клавиатуры mov cx,50 ;Максимальное число символов mov DX,offset inbuf;буфер int 21h ;прерывание mov fname2,offset inbuf;Адрес нового названия push DS ;настроим ES pop ES ;на сегмент данных mov AH, 56h ;для переименования mov DX, offset fname1 ;старое название файла mov DI, offset fname2 ;новое название файла int 21h ; прерываение mov AH,4Ch ; Функция 4Ch завершения программы mov AL,00h ; Код 0 успешного завершения int 21h ; Вызов DOS BEGIN ENDP Seg_CODE ENDS END BEGIN к тому же с помощью команды mov fname1, offset inbuf в переменную fname1 не переходит значение inbuf . Подскажите что с этим делать? |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ассемблер. tasm | alex(21) | Помощь студентам | 5 | 20.03.2011 23:50 |
Ассемблер(tasm) 8086 Построить кривую роза с параметрами, изменяемыми пользователем | karina74 | Фриланс | 6 | 30.11.2010 09:02 |
Ассемблер Tasm | Asya555 | Помощь студентам | 0 | 04.05.2009 22:02 |
[TASM]Ассемблер. Стек. | SoundMan | Помощь студентам | 4 | 29.11.2008 20:22 |