![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#1
|
|
Новичок ![]() Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 ![]() |
люди помогите написать прогу для "сканирования и замена в тексте" на Assemblere, уж больно тяжелый язык....
![]() надеюсь кто-нить сможет помочь мне решить эту задачку : ) |
|
|
![]()
Сообщение
#2
|
|
PAUK-NET.RU TEAM ![]() Группа: Admin Сообщений: 4,715 Регистрация: 11.7.2005 Из: ЮЗР Пользователь №: 3 ![]() |
Ассемблер - понятие растяжимое - даже под один кристал может иметь несколько версий с различным синтаксисом.
|
|
|
![]()
Сообщение
#3
|
|
Новичок ![]() Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 ![]() |
Ассемблер - понятие растяжимое - даже под один кристал может иметь несколько версий с различным синтаксисом. никогда не задавался этим вопросом ![]() ![]() |
|
|
![]()
Сообщение
#4
|
|
![]() Мега постер ![]() Группа: Local moder Сообщений: 1,712 Регистрация: 21.8.2006 Пользователь №: 1,269 ![]() |
Формулировка задания размыта. Откуда берется текст, на предмет какой строки сканировать, откуда берется данная строка?
-------------------- |
|
|
![]()
Сообщение
#5
|
|
Новичок ![]() Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 ![]() |
Формулировка задания размыта. Откуда берется текст, на предмет какой строки сканировать, откуда берется данная строка? допустим человек вводит с клавиатуры какую либо строчку. Задача: замена определенных символов в строке на другие, путем сканирование строки естественно |
|
|
![]()
Сообщение
#6
|
|
Новичок ![]() Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 ![]() |
строка: scanirovanie i&zamena
искомый символ - &, его нада заменить на пробел. очень прошу!!! Help my plizzZZZ |
|
|
![]()
Сообщение
#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 -------------------- |
|
|
![]()
Сообщение
#8
|
|
Новичок ![]() Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 ![]() |
Amp, спасибо тебе добрый человек! ОГРОМНЕЙШЕЕ!!!!!!!!!!!!!
![]() ![]() |
|
|
![]()
Сообщение
#9
|
|
Новичок ![]() Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 ![]() |
![]() ![]() 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 если тебе не трудно не смог бы пожалуйста переделать как тут ![]() |
|
|
![]()
Сообщение
#10
|
|
![]() Мега постер ![]() Группа: Local moder Сообщений: 1,712 Регистрация: 21.8.2006 Пользователь №: 1,269 ![]() |
![]() ![]() Компилироваться должна masm-ом. Я собирал 9-м. В моем задаче нада использовать команду SCASB Ну да.. по логике нужно использовать строковые операции Переделывать мне не хочется. Я лишь показал алгоритм. -------------------- |
|
|
![]()
Сообщение
#11
|
|
Новичок ![]() Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 ![]() |
спасибо и на этом! это хорошо что есть такие люди
![]() придется шевелить своими мозгами....если возникнут вопросы могу я к тебе обратиться? |
|
|
![]()
Сообщение
#12
|
|
![]() Мега постер ![]() Группа: Local moder Сообщений: 1,712 Регистрация: 21.8.2006 Пользователь №: 1,269 ![]() |
спасибо и на этом! это хорошо что есть такие люди ;) придется шевелить своими мозгами....если возникнут вопросы могу я к тебе обратиться? Ok -------------------- |
|
|
![]()
Сообщение
#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 А что делать дальше не знаю ![]() и еще не получается сделать основную процедуру - не с мог бы помочь ![]() |
|
|
![]()
Сообщение
#14
|
|
![]() Мега постер ![]() Группа: Local moder Сообщений: 1,712 Регистрация: 21.8.2006 Пользователь №: 1,269 ![]() |
это пока заготовка...хотелось бы знать правильно ли я ее сделал? при компилировании ошибок не было. далее запустил через afd.exe файл a.obj. В строке CMD записал L a.asm Что за afd.exe-то? Сначала файло компилируется в объектный файл tasm-ом, затем объектный файл линуется tlink-ом. На выходе - exe или com в зависимости от ключей линковки. Один момент - предложенный тобой способ будет заменять только один символ, который первым встретится в строке и удовлетворяющий условию. Сообщение отредактировал Amp - May 19 2007, 01:49 -------------------- |
|
|
![]()
Сообщение
#15
|
|
Новичок ![]() Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 ![]() |
Что за 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 Один момент - предложенный тобой способ будет заменять только один символ, который первым встретится в строке и удовлетворяющий условию. а как правильно сделать? |
|
|
![]()
Сообщение
#16
|
|
![]() Мега постер ![]() Группа: Local moder Сообщений: 1,712 Регистрация: 21.8.2006 Пользователь №: 1,269 ![]() |
Процессор NTVDM обнаружил недопустимую инструкцию. CS:0000 IP:0077 OP:f0 37 05 13 02 Прога неверно написана ) а как правильно сделать? Либо как я приводил код, либо (если команды строковой обработки принципиальны) использовать lodsb, stosb в цикле -------------------- |
|
|
![]() ![]()
Сообщение
#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 а там шняга какая-то-набор символов |
|
|
![]()
Сообщение
#18
|
|
![]() Мега постер ![]() Группа: Local moder Сообщений: 1,712 Регистрация: 21.8.2006 Пользователь №: 1,269 ![]() |
В отладчике уже не модно смотреть, что к чему? )
-------------------- |
|
|
![]()
Сообщение
#19
|
|
Новичок ![]() Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 ![]() |
|
|
|
Гость_Shweed_* |
![]()
Сообщение
#20
|
Guests ![]() |
"Assembler в кривых руках это бомба" ©
Нада мазгами думать а не на форуме людей "некоторый текст отсутствует" ![]() |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 3rd July 2025 - 12:14 |