Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2009, 13:49   #1
eu8cc
Пользователь
 
Регистрация: 30.10.2008
Сообщений: 17
По умолчанию Помогите с кодом

Программа вводит число или символ с клавиатуры и сканирует строку в соответствии с условием. Строку описать в сегменте данных.8. Вывести номера позиций указанного элемента в строке.
Цитата:
.model small
.386
.Stack 100h
.data
CR EQU 0Dh
LF EQU 0Ah

sLet1 DB '‚ ¬*ббЁўҐ $' ;в массиве
sLet2 DB ' н«Ґ¬Ґ*в®ў а*ў*ле зЁб«г 3$', LF, CR;элементов равнvх числу 3

Msg1 DB '€б室*®Ґ ЇаҐ¤«®¦Ґ*ЁҐ: $', LF, CR ;Lсходное предложение
Arr DB 'h3llo 12345 w0rld hkjdf3hgjkdfghjkd3fghdf3jkghdfj',LF , CR, '$'
Arr1 DB 42 dup (?)
ArrLen = $ - Arr

;bDigits db 0

Result DB "000", "$"
Result1 DB 0
Result2 DB 1
.code
start:

mov AX, @data
mov DS, AX
mov CX, ArrLen
mov di, offset Arr

L1:
; dec Result1
mov al, Result1
add al, Result2
mov Result1, al
mov al, [di]
cmp AL, '3'
je L2
jmp L3
L2:
mov DX, offset Result1
mov AX, 0900h
int 21h ;временная ячейка куда заносятся цифрv
L3:
mov Arr1[di], al
inc di
loop L1 ; будет переход на метку до тех пор пока регистр СХ не станет равным 0

mov DX, offset Msg1 ;исходное предложение
mov AX, 0900h
int 21h

mov DX, offset Arr
int 21h

mov DX, offset sLet1 ;в массиве
int 21h

; mov AL, bDigits
; mov DX, offset Result
; call ToDecimal
mov DX, offset Arr1 ;в массиве
mov AX, 0900h
int 21h

mov DX, offset sLet2 ;элементов равнvх числу 3
int 21h

mov AX, 4C00h
int 21h
eu8cc вне форума Ответить с цитированием
Старый 06.06.2009, 17:05   #2
eu8cc
Пользователь
 
Регистрация: 30.10.2008
Сообщений: 17
По умолчанию

C вводом с клавы разобрался, а как дальше?
Цитата:
.model small
.386
.Stack 100h
.data
CR EQU 0Dh
LF EQU 0Ah

sLet1 DB '‚ўҐ¤ЁвҐ бЁ¬ў®«: $'
sLet2 DB '‚ўҐ¤Ґ**л© бЁ¬ў®« §**Ё¬*Ґв Ї®§ЁжЁЁ ў бва®ЄҐ: $', LF, CR;элементов равнvх числу 3

Msg1 DB '€б室*®Ґ ЇаҐ¤«®¦Ґ*ЁҐ: $', LF, CR ;Lсходное предложение
Arr DB 'h3llo 12345 w0rld hkjdf3hgjkdfghjkd3fghdf3jkghdfj',LF , CR, '$'
Arr1 DB 42 dup (?)
ArrLen = $ - Arr
CharCode db 5 dup(?)

;bDigits db 0

Result DB "000", "$"
Result1 DB 0
Result2 DB 1
.code
start:
mov AX, @data
mov DS, AX
mov CX, ArrLen
mov di, offset Arr
mov DX, offset sLet1;вывод сообщения
mov AX, 0900h
int 21h;организация прерывания
mov ah,10h
int 16h
mov CharCode,al
mov DX, offset CharCode;вывод введенного символа на экран
mov AX, 0900h
int 21h

L1:
mov al, [di]
cmp AL, CharCode
je L2
jmp L3
L2:
mov DX, al
mov AX, 0900h
int 21h ;временная ячейка куда заносятся цифрv
L3:
mov Arr1[di], al
inc di
loop L1 ; будет переход на метку до тех пор пока регистр T- не станет равнvм 0


mov DX, offset Msg1 ;исходное предложение
mov AX, 0900h
int 21h

mov DX, offset Arr
int 21h

mov DX, offset Arr1 ;в массиве
mov AX, 0900h
int 21h

mov DX, offset sLet2 ;элементов равнvх числу 3
int 21h

mov AX, 4C00h
int 21h
eu8cc вне форума Ответить с цитированием
Старый 06.06.2009, 17:06   #3
eu8cc
Пользователь
 
Регистрация: 30.10.2008
Сообщений: 17
По умолчанию

Как найти позицию элемента в строке?
eu8cc вне форума Ответить с цитированием
Старый 06.06.2009, 17:28   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

в данном случае, я бы рекомендовал Вам не заморачиваться, а написать простой цикл по всей строке, сравнивая каждый элемент строки с Вашим заданным символом. Если совпадает - выводить индекс (счётчик) найденного символа.
продолжать цикл до конца строки (Вам надо выдать все позиции вхождения символа в строку).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.06.2009, 17:55   #5
eu8cc
Пользователь
 
Регистрация: 30.10.2008
Сообщений: 17
По умолчанию

подскажите как это сделать, я только начинаю разбираться
eu8cc вне форума Ответить с цитированием
Старый 06.06.2009, 18:50   #6
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Нужно использовать команды SCAS,SCASB, SCASW т.е. сканируете каждый символ. Вот взгляни здеся, там что то похожее
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 06.06.2009, 19:11   #7
eu8cc
Пользователь
 
Регистрация: 30.10.2008
Сообщений: 17
По умолчанию

где встречается символ, прога находит, а вот как вывести позицию на экран не знаю
eu8cc вне форума Ответить с цитированием
Старый 06.06.2009, 19:12   #8
eu8cc
Пользователь
 
Регистрация: 30.10.2008
Сообщений: 17
По умолчанию

как организовать простейший счетчик и вывести его значение на экран у меня не получается
eu8cc вне форума Ответить с цитированием
Старый 06.06.2009, 19:24   #9
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Я не понял вопроса. Ну да ладно!
Вот как вывести символ. Взял из методички:
Код:
PrintChar proc near
push dx
push si

mov dl,ds:CharOnScreen
mov dh,ds:CharAttrib

mov si,ds:CharPosition
mov es:[si],dx

pop si
pop dx

ret
PrintChar endp
CharPosition- позиция
CharAttrib- атрибут
CharOnScreen- символ
Задаются они примерно так:
data segment
CharPosition dw 0
CharOnScreen db '#'
CharAttrib db 00000111b
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 06.06.2009, 19:37   #10
eu8cc
Пользователь
 
Регистрация: 30.10.2008
Сообщений: 17
По умолчанию

спасибо, буду пробывать
eu8cc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с кодом DM_bite Помощь студентам 12 02.08.2008 11:40
Помогите с кодом Кронос Общие вопросы Delphi 6 04.05.2008 21:13
Помогите с кодом prostoCHEL Общие вопросы Delphi 4 02.03.2008 21:56