сканирование и замена, В ASSEMBLER |
Здравствуйте, гость ( Вход | Регистрация )
сканирование и замена, В ASSEMBLER |
May 12 2007, 18:53
Сообщение
#1
|
|
Новичок Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 |
люди помогите написать прогу для "сканирования и замена в тексте" на Assemblere, уж больно тяжелый язык....
надеюсь кто-нить сможет помочь мне решить эту задачку : ) |
|
|
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 |
Ассемблер - понятие растяжимое - даже под один кристал может иметь несколько версий с различным синтаксисом. никогда не задавался этим вопросом ...скорее всего turbo assembler, так как мы работали с tasm. писали в блокноте прогу, затем сохраняли в формете .asm и запускали через командную строку. |
|
|
May 13 2007, 01:24
Сообщение
#4
|
|
Мега постер Группа: Local moder Сообщений: 1,712 Регистрация: 21.8.2006 Пользователь №: 1,269 |
Формулировка задания размыта. Откуда берется текст, на предмет какой строки сканировать, откуда берется данная строка?
-------------------- |
|
|
May 13 2007, 11:40
Сообщение
#5
|
|
Новичок Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 |
Формулировка задания размыта. Откуда берется текст, на предмет какой строки сканировать, откуда берется данная строка? допустим человек вводит с клавиатуры какую либо строчку. Задача: замена определенных символов в строке на другие, путем сканирование строки естественно |
|
|
May 13 2007, 21:04
Сообщение
#6
|
|
Новичок Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 |
строка: scanirovanie i&zamena
искомый символ - &, его нада заменить на пробел. очень прошу!!! Help my plizzZZZ |
|
|
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 -------------------- |
|
|
May 14 2007, 12:34
Сообщение
#8
|
|
Новичок Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 |
Amp, спасибо тебе добрый человек! ОГРОМНЕЙШЕЕ!!!!!!!!!!!!!
|
|
|
May 14 2007, 16:23
Сообщение
#9
|
|
Новичок Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 |
не запускается твоя прога версии не совпадают скорее всего. В моем задаче нада использовать команду 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 если тебе не трудно не смог бы пожалуйста переделать как тут |
|
|
May 14 2007, 17:56
Сообщение
#10
|
|
Мега постер Группа: Local moder Сообщений: 1,712 Регистрация: 21.8.2006 Пользователь №: 1,269 |
не запускается твоя прога версии не совпадают скорее всего. Компилироваться должна masm-ом. Я собирал 9-м. В моем задаче нада использовать команду SCASB Ну да.. по логике нужно использовать строковые операции Переделывать мне не хочется. Я лишь показал алгоритм. -------------------- |
|
|
May 14 2007, 19:37
Сообщение
#11
|
|
Новичок Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 |
спасибо и на этом! это хорошо что есть такие люди
придется шевелить своими мозгами....если возникнут вопросы могу я к тебе обратиться? |
|
|
May 14 2007, 19:50
Сообщение
#12
|
|
Мега постер Группа: Local moder Сообщений: 1,712 Регистрация: 21.8.2006 Пользователь №: 1,269 |
спасибо и на этом! это хорошо что есть такие люди ;) придется шевелить своими мозгами....если возникнут вопросы могу я к тебе обратиться? Ok -------------------- |
|
|
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 А что делать дальше не знаю и еще не получается сделать основную процедуру - не с мог бы помочь |
|
|
May 19 2007, 01:47
Сообщение
#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 -------------------- |
|
|
May 19 2007, 09:29
Сообщение
#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 Один момент - предложенный тобой способ будет заменять только один символ, который первым встретится в строке и удовлетворяющий условию. а как правильно сделать? |
|
|
May 19 2007, 13:03
Сообщение
#16
|
|
Мега постер Группа: Local moder Сообщений: 1,712 Регистрация: 21.8.2006 Пользователь №: 1,269 |
Процессор NTVDM обнаружил недопустимую инструкцию. CS:0000 IP:0077 OP:f0 37 05 13 02 Прога неверно написана ) а как правильно сделать? Либо как я приводил код, либо (если команды строковой обработки принципиальны) использовать lodsb, stosb в цикле -------------------- |
|
|
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 а там шняга какая-то-набор символов |
|
|
Jun 8 2007, 12:35
Сообщение
#18
|
|
Мега постер Группа: Local moder Сообщений: 1,712 Регистрация: 21.8.2006 Пользователь №: 1,269 |
В отладчике уже не модно смотреть, что к чему? )
-------------------- |
|
|
Jun 8 2007, 13:20
Сообщение
#19
|
|
Новичок Группа: Members Сообщений: 23 Регистрация: 13.9.2006 Из: Чебоксары Пользователь №: 1,734 |
|
|
|
Гость_Shweed_* |
Aug 31 2007, 12:03
Сообщение
#20
|
Guests |
"Assembler в кривых руках это бомба" ©
Нада мазгами думать а не на форуме людей "некоторый текст отсутствует" ))))) |
|
|
Текстовая версия | Сейчас: 28th April 2024 - 15:08 |