.model small
.stack 100h
.data
max db 200
len db ?
stroka db max dup(?)
change db "1",0Dh,0Ah,'$'
m db 0
message1 db "Vvedite stroku ne bolee 200 simvolov",0Dh, 0Ah,'$'
message2 db 13,10,"Vvedennaya stroka", 0Dh, 0Ah, '$'
.code
begin:
mov ax,@data
mov ds,ax
mov ah,09h
lea dx,message1
int 21h
mov ah,0ah
lea dx,max
int 21h
mov bl,len
mov bh,0
mov [bx+stroka],'$'
mov ah,09h
lea dx,message2
int 21h
mov ah,09h
lea dx,stroka
int 21h
mov ah,4ch
int 21h
end begin
[Assembler] Вставка подстроки
Допустим существует некая строка str1, в len хранится ее длина, в регистре bx хранится позиция в строке в которую необходимо вставить подстроку str2. Собственно как произвести эту вставку?
P.S.Если нужна процедура,а не inline,то лучше все параметры через регистры/стек передавать,поэтому имена переменных в этом случае будут неважны:)
Цитата: @pixo $oft
Под какой ассемблер и ОСь пишешь?
Разумеется, в этом задании это крайне важно.
Цитата: @pixo $oft
P.S.Если нужна процедура,а не inline,то лучше все параметры через регистры/стек передавать,поэтому имена переменных в этом случае будут неважны:)
Насколько я понимаю, человеку нужно реализовать вставку некоторого количества символов в строку, с использованием ассемблера для процессора архитектуры x86. И все.
Разумеется,важно!Если под DOS,то придётся самому писать всё,а если под Windows,так там можно готовые функции использовать…если не прямо,то хотя бы косвенно(например,динамически память выделить для 1й части 1й строки,потом слинковать:) к ней 2ю строку,а к ней–2ю часть 1й строки)
Цитата:
Насколько я понимаю, человеку нужно реализовать вставку некоторого количества символов в строку, с использованием ассемблера для процессора архитектуры x86. И все.
Именно.
Цитата:
Разумеется,важно!Если под DOS,то придётся самому писать всё,а если под Windows,так там можно готовые функции использовать…если не прямо,то хотя бы косвенно(например,динамически память выделить для 1й части 1й строки,потом слинковать к ней 2ю строку,а к ней–2ю часть 1й строки)
Под Виндоус. Не подскажите какие это функции?
lstrcpy,lstrcat…Для выделения памяти GetProcessHeap,HeapAlloc и т.п.За подробностями–в MSDN;также советую скачать API guide
Видимо я неправильно объяснил. Речь идет о обычной консольной программе(самые азы)
Цитата: JKJ
Видимо я неправильно объяснил
Ясен перец,неправильно!Сначала ты написал,что под Windows,а потом приводишь код,в котором Int 21h.А это у нас что?–правильно,DOS:)
И ещё кое-что…В код особо не вчитывался,но обнаружил
Код:
mov bl,len
Цитата:
Значит,двигаем мы в регистр BL значение переменной len…которая до этих пор инициализирована не была.Стало быть,получаем мы в этом регистре 0…Это действие точно так важно?
В регистре мы получаем число равное длине строки.
Цитата: JKJ
В регистре мы получаем число равное длине строки
Где?Что-то я не замечаю
Смотрим по порядку:сначала переменная len не инициализирована,а потом до указанной мною строки кода эта переменная нигде более не используется.Как же там может храниться длина строки?
Код:
max db 200
len db ?
stroka db max dup(?)
len db ?
stroka db max dup(?)
Стандартный способ ввода строки. Это аналогично stroka db max,len,max dup(?)
Только желательно показать,в каком месте надо вставить строку(например,в коде поставить многоточие или ещё как).К тому же,в регистре BX на протяжении кода была только длина строки.Надо ввод позиции проработать,что ли…или задать её явно