Людочка Гончаренко
Людочка Гончаренко

ввод/вывод и обращение к элементу строки в ASM

я совсем недавно начал изучать asm, и пока мои успехи не велики, поэтому прошу вашей помощи с небольшой программкой.
задание таково:
Ввести строку длиной 5 символов, ввести символ, заменить третий символ строки введенным символов и вывести полученную строку на экран.

компилю TASMом
вот мои нехитрые наработки:

STAK SEGMENT STACK
DB 256 DUP (?)
STAK ENDS
DATA SEGMENT

SYMB DB ?
STRX DB 10, ?,10 DUP ('$')

DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STAK
START:
MOV DX, OFFSET STRX
MOV AH, 0AH
INT 21H

MOV AH, 01h
INT 21H
MOV SYMB, AL

MOV STRX[2], SYMB

MOV DX, OFFSET STRX
MOV AH, 09H
INT 21H

CODE ENDS
END START

помогите, если не жалко времени на мою проблему.
заранее благодарен

Iroda
Iroda

STAK SEGMENT STACK
DB 256 DUP (?)
STAK ENDS

DATA SEGMENT
SYMB DB ?
;Вам нужно ввести строку длиной 5 символов
;зачем же вы выделяете буфер для 10 символов?
STRX DB 6, ?,7 DUP ('$');Почему 6 и 7 вместо 5 см. примечание
CRLF DB 0Dh,0Ah,'$'; Коды перевода строки CR и LF
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STAK
START:
;Вы не инициализируете сегментный регистр сегмента данных
mov ax,DATA
mov ds,ax

MOV DX, OFFSET STRX
MOV AH, 0AH
INT 21H

;Перевод строки чтобы при вводе они не налезали друг на друга (для красоты)
lea dx,CRLF
mov ah,9
int 21h

MOV AH, 01h
INT 21H
MOV SYMB, AL

;Снова перевод строки
lea dx,CRLF
mov ah,9
int 21h

;Сначала символ нужно загрузить в регистр, так как нет команды копирования байта из памяти в память
mov al, SYMB
MOV STRX[2+2], AL; Почему +2 см. примечание

MOV DX, OFFSET STRX+2; Почему +2 см. примечание
MOV AH, 09H
INT 21H

;И наконец, ваша программа не возвращает управление операционной системе
mov ah,4Ch
int 21h

CODE ENDS
END START

Примечание:
Из-за особенностей работы функции 0Ah прерывания DOS 21h с буфером ввода добавляется смещение.
Подробнее смотрите по ссылкам:
http://otvet.mail.ru/question/67371316
http://otvet.mail.ru/answer/317071344

Похожие вопросы
Программа на ввод-вывод
ввод-вывод средств (денег)!!!!
помогите с выводом строки C++
Поиск строки и вывод номера.
Элементы массива вводятся с клавиатуры. Как будет
что такое: оператор вывода и ввода?
Что за ошибка?? ? asm
Помогите с вводом и выводом массива!
Вводит с клавиатуры строку длиной не более 200 символов, ищет в ней самое длинное слово и выводит его.
Vb разработать программу, которая вводит с клавиатуры 5 строк, и для каждой строки выводит первую и последнюю букву.