Консультация № 194431
15.01.2019, 10:38
0.00 руб.
0 8 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

Помогите решить задачу на ассемблер TASM. Посчитать количество символов 'o' в последнем слове строки. Строка статичная, латиница, вводить не нужно. Понимаю как делать логически а вот написать на ассемблере не могу. Помогите если возможно.

Обсуждение

давно
Посетитель
402031
115
15.01.2019, 13:42
общий
Так задача довольно простая.
Не знаю как это в TASM а в MASMe это делается примерно так:
Код :: выделить код

.data

Str db "Например слово оборотень",0 ; Строка для анализа

.code

Start:


lea esi,[offset Str] ; Заносим в регистр esi адрес строки
M3:
mov byte ptr al,[esi] ; читаем первый байт строки
cmp al," " ; сравниваем с пробелом (пробел разделитель слов в строке)
jz M1 ; если равно то перейти
cmp al,0 ; Смотрим не закочилась ли строка
jz M2 ; Переход если строка закончилась
inc esi
jmp M3 ; За следующим байтом
M1:
mov ecx,esi ; Адрес пробела
inc esi
jmp M3
M2:
xor ecx,ecx ; Обнулить ecx
lea esi,[offset Str+ecx+1] ; Адрес начала последнего слова
M5:
mov byte ptr al,[esi]
cmp al,"o"
jz M4 ; Переход если не "о" ледующий байт
cmp al,0
jz Exit ; слово закончилось
M4:
inc ecx ; В ecx количество искомых букв
inc esi
jmp M5 ; За следующим байтом
Exit:

end Start



Где то так.
В регистре ecx количество искомых букв. Далее распоряжайся сим достоянием на свое усмотрение.
можно конечно сделать и более оригинальней. Но это так на вскидку.
Удачи.
давно
Старший Модератор
31795
6196
15.01.2019, 13:48
общий
Адресаты:
Цитата: cain52
можно конечно сделать и более оригинальней.


[code lang=asm]model tiny
.code
org 100h
begin: lea di,dbStr
mov dx,szStr
std
add di,dx
mov cx,dx
mov al,' '
repne scasb
inc di
dec dx
xor bx,bx
sub dx,cx
mov al,'o'
mov cx,dx
cld
@@01: repne scasb
inc bx
or cx,cx
jnz @@01
mov ax,bx
add al,'0'
int 29h
xor ax,ax
int 16h
ret
dbStr db 'qwqwqwq wqwqwqwq qwqwqwqwo owowowowo'
szStr equ $-dbStr
end begin[/code]
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
402031
115
15.01.2019, 14:04
общий
Адресаты:


Так и я о том же. Главное включить фантазию. А решений можно найти массу.
А еще в основе, надо иметь желание. И это пожалуй основное.
давно
Старший Модератор
31795
6196
15.01.2019, 14:53
общий
Адресаты:
Раз Вы первый код написали, Вам и отвечать.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
402031
115
15.01.2019, 15:01
общий
Адресаты:

Да уж.
Значит встрял
давно
Посетитель
402031
115
15.01.2019, 15:02
общий
С новым годом !!!
И со старым Новым годом тоже!!!
давно
Посетитель
402031
115
15.01.2019, 15:09
общий
это ответ
Здравствуйте, fantom2307!

Решения данной проблемы не настолько и сложное.
Главное, что бы было желание найти это решение самостоятельно.
А вот как раз этого желания у вас и нет.
Достаточно просмотреть описание инструкций процессора х86 и там вы найдете
даже готовые примеры для решения задачи.
Вот посмотрите
Удачи в изучении Ассемблера.
Прикрепленные файлы:
ef9d9a7fd568b85bd54cbe7854fb4f5ec90ba443.7z
давно
Посетитель
402706
1
15.01.2019, 21:55
общий
Спасибо всем за помощь. Желание есть, но когда это проходится за пару лекций и практических на которых просто читается методичка,а после это требуется куча задач, то тупо не хватает времени чтобы изучить более подробно.
Форма ответа