IPB

Здравствуйте, гость ( Вход | Регистрация )

> сканирование и замена, В ASSEMBLER
гыгыгы)))
сообщение May 12 2007, 18:53
Сообщение #1


Новичок
*

Группа: Members
Сообщений: 23
Регистрация: 13.9.2006
Из: Чебоксары
Пользователь №: 1,734



люди помогите написать прогу для "сканирования и замена в тексте" на Assemblere, уж больно тяжелый язык.... rolleyes.gif
надеюсь кто-нить сможет помочь мне решить эту задачку : )
Вернуться к началу страницы
 
+Цитировать сообщение
 
Создать новую тему
Ответов (1 - 19)
SiMM
сообщение May 12 2007, 23:04
Сообщение #2


PAUK-NET.RU TEAM
Иконка группы

Группа: Admin
Сообщений: 4,715
Регистрация: 11.7.2005
Из: ЮЗР
Пользователь №: 3



Ассемблер - понятие растяжимое - даже под один кристал может иметь несколько версий с различным синтаксисом.
Вернуться к началу страницы
 
+Цитировать сообщение
гыгыгы)))
сообщение May 12 2007, 23:22
Сообщение #3


Новичок
*

Группа: Members
Сообщений: 23
Регистрация: 13.9.2006
Из: Чебоксары
Пользователь №: 1,734



Цитата(SiMM @ May 13 2007, 00:04) *
Ассемблер - понятие растяжимое - даже под один кристал может иметь несколько версий с различным синтаксисом.

никогда не задавался этим вопросом mellow.gif ...скорее всего turbo assembler, так как мы работали с tasm. писали в блокноте прогу, затем сохраняли в формете .asm и запускали через командную строку. smile.gif
Вернуться к началу страницы
 
+Цитировать сообщение
Amp
сообщение May 13 2007, 01:24
Сообщение #4


Мега постер
Иконка группы

Группа: Local moder
Сообщений: 1,712
Регистрация: 21.8.2006
Пользователь №: 1,269



Формулировка задания размыта. Откуда берется текст, на предмет какой строки сканировать, откуда берется данная строка?


--------------------
irc-капец

#КартинкА#
Вернуться к началу страницы
 
+Цитировать сообщение
гыгыгы)))
сообщение May 13 2007, 11:40
Сообщение #5


Новичок
*

Группа: Members
Сообщений: 23
Регистрация: 13.9.2006
Из: Чебоксары
Пользователь №: 1,734



Цитата(Amp @ May 13 2007, 02:24) *
Формулировка задания размыта. Откуда берется текст, на предмет какой строки сканировать, откуда берется данная строка?

допустим человек вводит с клавиатуры какую либо строчку. Задача: замена определенных символов в строке на другие, путем сканирование строки естественно
Вернуться к началу страницы
 
+Цитировать сообщение
гыгыгы)))
сообщение May 13 2007, 21:04
Сообщение #6


Новичок
*

Группа: Members
Сообщений: 23
Регистрация: 13.9.2006
Из: Чебоксары
Пользователь №: 1,734



строка: scanirovanie i&zamena
искомый символ - &, его нада заменить на пробел.

очень прошу!!! Help my plizzZZZ
Вернуться к началу страницы
 
+Цитировать сообщение
Amp
сообщение May 13 2007, 23:45
Сообщение #7


Мега постер
Иконка группы

Группа: Local moder
Сообщений: 1,712
Регистрация: 21.8.2006
Пользователь №: 1,269



Алгоритм следующий:
Код
.686
.model flat, stdcall
option casemap : none

include \masm32\include\windows.inc
include \masm32\macros\macros.asm

include \masm32\include\masm32.inc
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\masm32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data

in_str        db    "Hello, world!",0
rp_char        db    "l"

.code

start:

    
    mov    ebx, offset in_str
    
    print ebx
    print chr$(13,10)
    
    xor    ecx, ecx
    mov    dl, 'X'

l1:
    mov al, byte ptr [ebx+ecx]
    cmp al, 0
    je    l3
    cmp    al, rp_char
    jne    l2
    mov byte ptr [ebx+ecx], dl
l2:
    inc    ecx
    jmp    l1
l3:

    print ebx
    print chr$(13,10)

    ret
end start


В результате:
Цитата
PS D:\Development\Asm\test> ./main
Hello, world!
HeXXo, worXd!


Сообщение отредактировал Amp - May 13 2007, 23:45


--------------------
irc-капец

#КартинкА#
Вернуться к началу страницы
 
+Цитировать сообщение
гыгыгы)))
сообщение May 14 2007, 12:34
Сообщение #8


Новичок
*

Группа: Members
Сообщений: 23
Регистрация: 13.9.2006
Из: Чебоксары
Пользователь №: 1,734



Amp, спасибо тебе добрый человек! ОГРОМНЕЙШЕЕ!!!!!!!!!!!!! smile.gif smile.gif
Вернуться к началу страницы
 
+Цитировать сообщение
гыгыгы)))
сообщение May 14 2007, 16:23
Сообщение #9


Новичок
*

Группа: Members
Сообщений: 23
Регистрация: 13.9.2006
Из: Чебоксары
Пользователь №: 1,734



sad.gif не запускается твоя прога sad.gif версии не совпадают скорее всего. В моем задаче нада использовать команду SCASB, вот откопал пример:

STRLEN EQU 15 ;Длина поля STRING
STRING DB 'The time&is now'
...
CLD
MOV AL,'&' ;Искомый символ
MOV CX,STRLEN ;Длина поля STRING
LEA DI,STRING ;Адрес поля STRING
REPNE SCASB ;Сканировать
JNZ K20 ;Символ найден?
DEC DI ;Да - уменьшить адрес
MOV BYTE PTR[DI],20H ;Подставить пробел
K20: RET

если тебе не трудно не смог бы пожалуйста переделать как тут blush.gif
Вернуться к началу страницы
 
+Цитировать сообщение
Amp
сообщение May 14 2007, 17:56
Сообщение #10


Мега постер
Иконка группы

Группа: Local moder
Сообщений: 1,712
Регистрация: 21.8.2006
Пользователь №: 1,269



Цитата(гыгыгы))) @ May 14 2007, 17:23) *
sad.gif не запускается твоя прога sad.gif версии не совпадают скорее всего.

Компилироваться должна masm-ом. Я собирал 9-м.

Цитата(гыгыгы))) @ May 14 2007, 17:23) *
В моем задаче нада использовать команду SCASB

Ну да.. по логике нужно использовать строковые операции

Переделывать мне не хочется. Я лишь показал алгоритм.


--------------------
irc-капец

#КартинкА#
Вернуться к началу страницы
 
+Цитировать сообщение
гыгыгы)))
сообщение May 14 2007, 19:37
Сообщение #11


Новичок
*

Группа: Members
Сообщений: 23
Регистрация: 13.9.2006
Из: Чебоксары
Пользователь №: 1,734



спасибо и на этом! это хорошо что есть такие люди wink.gif
придется шевелить своими мозгами....если возникнут вопросы могу я к тебе обратиться?
Вернуться к началу страницы
 
+Цитировать сообщение
Amp
сообщение May 14 2007, 19:50
Сообщение #12


Мега постер
Иконка группы

Группа: Local moder
Сообщений: 1,712
Регистрация: 21.8.2006
Пользователь №: 1,269



Цитата(гыгыгы))) @ May 14 2007, 20:37) *
спасибо и на этом! это хорошо что есть такие люди ;)
придется шевелить своими мозгами....если возникнут вопросы могу я к тебе обратиться?

Ok


--------------------
irc-капец

#КартинкА#
Вернуться к началу страницы
 
+Цитировать сообщение
гыгыгы)))
сообщение May 16 2007, 20:55
Сообщение #13


Новичок
*

Группа: Members
Сообщений: 23
Регистрация: 13.9.2006
Из: Чебоксары
Пользователь №: 1,734



page 60,132
TITLE EXRING (COM) Сканирование и замена
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
ORG 100H
BEGIN:
;----------------------------------------------------------------------------
STRLEN EQU 30 ;Длина поля STRING
STRING DB 'Hello, world !'
; Поиск буквы l в строке:
; -----------------------
D10SCAS PROC
CLD
MOV AL,'l'
MOV CX,30 ;Длина сканирования - 30
LEA DI,STRING
REPNE SCASB
JE D20
MOV AL,20H ; нет стереть l в AL
D20: RET
D10SCAS ENDP
CODESG ENDS
END BEGIN

это пока заготовка...хотелось бы знать правильно ли я ее сделал?
при компилировании ошибок не было. далее запустил через afd.exe файл a.obj. В строке CMD записал L a.asm А что делать дальше не знаю sad.gif

и еще не получается сделать основную процедуру - не с мог бы помочь smile.gif
Вернуться к началу страницы
 
+Цитировать сообщение
Amp
сообщение May 19 2007, 01:47
Сообщение #14


Мега постер
Иконка группы

Группа: Local moder
Сообщений: 1,712
Регистрация: 21.8.2006
Пользователь №: 1,269



Цитата(гыгыгы))) @ May 16 2007, 21:55) *
это пока заготовка...хотелось бы знать правильно ли я ее сделал?
при компилировании ошибок не было. далее запустил через afd.exe файл a.obj. В строке CMD записал L a.asm

Что за afd.exe-то? Сначала файло компилируется в объектный файл tasm-ом, затем объектный файл линуется tlink-ом. На выходе - exe или com в зависимости от ключей линковки.

Один момент - предложенный тобой способ будет заменять только один символ, который первым встретится в строке и удовлетворяющий условию.

Сообщение отредактировал Amp - May 19 2007, 01:49


--------------------
irc-капец

#КартинкА#
Вернуться к началу страницы
 
+Цитировать сообщение
гыгыгы)))
сообщение May 19 2007, 09:29
Сообщение #15


Новичок
*

Группа: Members
Сообщений: 23
Регистрация: 13.9.2006
Из: Чебоксары
Пользователь №: 1,734



Цитата(Amp @ May 19 2007, 02:47) *
Что за afd.exe-то? Сначала файло компилируется в объектный файл tasm-ом, затем объектный файл линуется tlink-ом. На выходе - exe или com в зависимости от ключей линковки.


tlink.exe a.obj выдает:
Turbo Link Version 3.01 Copyright © 1987, 1990 Borland International
Warning: No stack

создаются два файла: a.exe и a.map, запускаю exe и выходит ошибка:
D:\....\Tasm\a.exe
Процессор NTVDM обнаружил недопустимую инструкцию.
CS:0000 IP:0077 OP:f0 37 05 13 02

Цитата(Amp @ May 19 2007, 02:47) *
Один момент - предложенный тобой способ будет заменять только один символ, который первым встретится в строке и удовлетворяющий условию.


а как правильно сделать?
Вернуться к началу страницы
 
+Цитировать сообщение
Amp
сообщение May 19 2007, 13:03
Сообщение #16


Мега постер
Иконка группы

Группа: Local moder
Сообщений: 1,712
Регистрация: 21.8.2006
Пользователь №: 1,269



Цитата(гыгыгы))) @ May 19 2007, 10:29) *
Процессор NTVDM обнаружил недопустимую инструкцию.
CS:0000 IP:0077 OP:f0 37 05 13 02

Прога неверно написана )


Цитата(гыгыгы))) @ May 19 2007, 10:29) *
а как правильно сделать?

Либо как я приводил код, либо (если команды строковой обработки принципиальны) использовать lodsb, stosb в цикле


--------------------
irc-капец

#КартинкА#
Вернуться к началу страницы
 
+Цитировать сообщение
гыгыгы)))
сообщение Jun 7 2007, 18:11
Сообщение #17


Новичок
*

Группа: Members
Сообщений: 23
Регистрация: 13.9.2006
Из: Чебоксары
Пользователь №: 1,734



page 60,132
TITLE STRING (EXE) Сканирование и замена в тексте
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
BEGIN: JMP SHORT MAIN
;--------------------------------------------------------
MAXNLEN DB 30 ;Длина поля STRING
ACTNLEN DB ? ;максимальная длина
STRFLD DB 30 DUP(' ') ;Текст
PROMPT DB 'tekst', '$'
STRDSP DB 30 DUP(' '), 13, 10, '$'
;--------------------------------------------------
MAIN PROC NEAR ;Основная процедура
MOV AX,0600H
A10LOOP:
CALL B10INPT ;Ввести текст с клавиатуры
TEST ACTNLEN,0FFH ;Нет имени? (т.е. конец)
JZ A90 ; да - выйти
CALL D10SCAS ;Найти l
CMP AL, 'l' ;Найдена?
JE A10LOOP ; да - обойти
CALL A10LOOP
A90: RET
MAIN ENDP

;Вывод запроса для ввода текста:
; -----------------------------
B10INPT PROC
MOV AH,09
LEA DX,PROMPT ;Выдать текст запроса
INT 21H
RET
B10INPT ENDP
;Поиск звездочки в имени:
; -----------------------
D10SCAS PROC
CLD
MOV AL,'l'
MOV CX,30 ;Длина сканирования - 30
LEA DI,PROMPT
REPNE SCASB ;l найдена?
JE D20 ; да - выйти,
MOV AL,20H ; нет стереть l в AL
D20: RET
D10SCAS ENDP
CODESG ENDS
END BEGIN

Не могу понять где ошибка.....
При компиляции ошибок не было обнаружено, создал exe а там шняга какая-то-набор символов
Вернуться к началу страницы
 
+Цитировать сообщение
Amp
сообщение Jun 8 2007, 12:35
Сообщение #18


Мега постер
Иконка группы

Группа: Local moder
Сообщений: 1,712
Регистрация: 21.8.2006
Пользователь №: 1,269



В отладчике уже не модно смотреть, что к чему? )


--------------------
irc-капец

#КартинкА#
Вернуться к началу страницы
 
+Цитировать сообщение
гыгыгы)))
сообщение Jun 8 2007, 13:20
Сообщение #19


Новичок
*

Группа: Members
Сообщений: 23
Регистрация: 13.9.2006
Из: Чебоксары
Пользователь №: 1,734



Цитата(Amp @ Jun 8 2007, 13:35) *
В отладчике уже не модно смотреть, что к чему? )

не могу понять как пользоваться afd.exe sad.gif
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_Shweed_*
сообщение Aug 31 2007, 12:03
Сообщение #20





Guests






"Assembler в кривых руках это бомба" ©

Нада мазгами думать а не на форуме людей "некоторый текст отсутствует" smile.gif)))))
Вернуться к началу страницы
 
+Цитировать сообщение

ОтветитьСоздать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 28th April 2024 - 00:44