Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[Assembler] Вставка подстроки

17K
12 марта 2009 года
JKJ
32 / / 20.10.2007
Допустим существует некая строка str1, в len хранится ее длина, в регистре bx хранится позиция в строке в которую необходимо вставить подстроку str2. Собственно как произвести эту вставку?
7
12 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Под какой ассемблер и ОСь пишешь?
P.S.Если нужна процедура,а не inline,то лучше все параметры через регистры/стек передавать,поэтому имена переменных в этом случае будут неважны:)
9
12 марта 2009 года
Lerkin
3.0K / / 25.03.2003
Цитата: @pixo $oft
Под какой ассемблер и ОСь пишешь?


Разумеется, в этом задании это крайне важно.

Цитата: @pixo $oft

P.S.Если нужна процедура,а не inline,то лучше все параметры через регистры/стек передавать,поэтому имена переменных в этом случае будут неважны:)


Насколько я понимаю, человеку нужно реализовать вставку некоторого количества символов в строку, с использованием ассемблера для процессора архитектуры x86. И все.

7
13 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Разумеется,важно!Если под DOS,то придётся самому писать всё,а если под Windows,так там можно готовые функции использовать…если не прямо,то хотя бы косвенно(например,динамически память выделить для 1й части 1й строки,потом слинковать:) к ней 2ю строку,а к ней–2ю часть 1й строки)
17K
13 марта 2009 года
JKJ
32 / / 20.10.2007
Цитата:
Насколько я понимаю, человеку нужно реализовать вставку некоторого количества символов в строку, с использованием ассемблера для процессора архитектуры x86. И все.


Именно.

Цитата:
Разумеется,важно!Если под DOS,то придётся самому писать всё,а если под Windows,так там можно готовые функции использовать…если не прямо,то хотя бы косвенно(например,динамически память выделить для 1й части 1й строки,потом слинковать к ней 2ю строку,а к ней–2ю часть 1й строки)


Под Виндоус. Не подскажите какие это функции?

7
13 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
lstrcpy,lstrcat…Для выделения памяти GetProcessHeap,HeapAlloc и т.п.За подробностями–в MSDN;также советую скачать API guide
17K
14 марта 2009 года
JKJ
32 / / 20.10.2007
Видимо я неправильно объяснил. Речь идет о обычной консольной программе(самые азы)
Написана программа в таком "синтаксисе":
Код:
.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
7
14 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: JKJ
Видимо я неправильно объяснил

Ясен перец,неправильно!Сначала ты написал,что под Windows,а потом приводишь код,в котором Int 21h.А это у нас что?–правильно,DOS:)
И ещё кое-что…В код особо не вчитывался,но обнаружил

 
Код:
mov bl,len
Значит,двигаем мы в регистр BL значение переменной len…которая до этих пор инициализирована не была.Стало быть,получаем мы в этом регистре 0…Это действие точно так важно?;)
17K
22 марта 2009 года
JKJ
32 / / 20.10.2007
Цитата:
Значит,двигаем мы в регистр BL значение переменной len…которая до этих пор инициализирована не была.Стало быть,получаем мы в этом регистре 0…Это действие точно так важно?


В регистре мы получаем число равное длине строки.

7
22 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: JKJ
В регистре мы получаем число равное длине строки

Где?Что-то я не замечаю
Смотрим по порядку:сначала переменная len не инициализирована,а потом до указанной мною строки кода эта переменная нигде более не используется.Как же там может храниться длина строки?

17K
23 марта 2009 года
JKJ
32 / / 20.10.2007
 
Код:
max db 200
len db ?
stroka db max dup(?)

Стандартный способ ввода строки. Это аналогично stroka db max,len,max dup(?)
7
23 марта 2009 года
@pixo $oft
3.4K / / 20.09.2006
Всё,я понял,в чём дело:просто невнимательно читал код.Сейчас перечитал,глянул в описание функции 0Ah прерывания 21h и понял,о чём речь
Только желательно показать,в каком месте надо вставить строку(например,в коде поставить многоточие или ещё как).К тому же,в регистре BX на протяжении кода была только длина строки.Надо ввод позиции проработать,что ли…или задать её явно
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог