С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 16.11.2019
Сообщений: 10

Вывести количество цифр в строке или заменить символ на пустой символ или пробел

16.11.2019, 12:34. Показов 2633. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня считает только количество цифр, нужно еще их вивести их значение. С++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <string>
 
using namespace std;
 
int kol;
 
int main()
{
 char s[] = "hel7lo,1234wo8ld6";
 char s1;
 
 __asm
 {   pusha
  mov kol, 0
  mov ecx, 17
  lea esi, [s]
  @next:
  lodsb
  cmp al, '0'
  jb @skip
  cmp al, '9'
  ja @skip
  inc kol
  @skip:
  loop @next
  popa
 }
 
 cout << kol;
 getch();
 return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.11.2019, 12:34
Ответы с готовыми решениями:

Заменить каждый четный символ или на 'a', если символ не равен 'a' или 'b', или на 'c' в противном случае
Дана строка. Заменить каждый четный символ или на 'a', если символ не равен 'a' или 'b', или на 'c' в противном случае

Из строк, которые содержат символ '1' или '2', удалить первый встречающийся в строке символ, равный латинской букве 'a'
Дана матрица размером 4×3, элементами которой являются строки. Необходимо в системе Турбо-Паскаль написать программу, которая выполняет...

Вывести строки, в которых символ «*» встречается не менее 2 раз и заменить символ «*» на символ «_»
День добрый. Имеется условие лабы. Написать программу, в которой с клавиатуры вводится до 10 символьных строк. Вывести строки, в...

9
0 / 0 / 0
Регистрация: 16.11.2019
Сообщений: 10
16.11.2019, 13:09  [ТС]
Крашится и нужно вывести цифры, попробуйте сделать
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <string>
 
using namespace std;
 
int kol=0;
 
int main()
{
 char s[] = "h5el7lo,1234wo8l6d60";
 
 __asm
 {  pusha
mov eax, 0 // Кількість цифр на початку становить 0
mov edi, dword ptr [s] // Завантажити  в EDI адресу 1-го символу рядка s mov ecx, dword ptr k // Завантажити в лічильник довжину рядка у байтах cmp ecx, 0
//je @exit // Перевірка на порожній рядок
@next:
mov dl,byte ptr [edi] // Завантажити черговий символ рядка
lodsb
cmp dl,'0' // та перевірити його на інтервал цифр.
jl @sdvig // Якщо символ не є цифровий, тобто його код є менший за '0'
cmp dl,'9' // чи більший за '9', перейти на мітку @sdvig
jg @sdvig // для видалення цього символу
inc eax    // Інакше, збільшити значення кількості пробілів в EАX  на 1 та
jmp @skip    // перейти на мітку, обійшовши видалення нецифрових символів
@sdvig:
push ecx // Зберегти значення повторювань зовнішнього циклу (регістр ЕСХ)
push edi // та адресу символу (регістр EDI), який перевіряється, оскільки ці
// регістри використовуватимуться у внутрішньому циклі для видалення нецифрових символів
@nex: // З цієї мітки починається внутрішній цикл, в якому видалення
mov dh,byte ptr [edi+1] // відбувається за рахунок зсуву решти символів mov byte ptr [edi],dh // рядка. При цьому через регістр DH, починаючи inc edi // з нецифрового символу, почергово перевантажуються
loop @nex // (зсуваються) всі символи решти рядка
pop edi // Після видалення (зсуву) відновлюються значення регістрів EDI та
pop ecx // ЕСХ, щоб відновити перевірку, починаючи з номера символу,
dec edi // який було видалено, адже він набув нового значення
@skip:
inc edi  // Перейти на наступний символ, збільшивши адресу в EDI loop @next // Якщо ecx>0, перейти до опрацювання наступного символу @exit:
mov kol,eax // Завантажити обчислену кількість цифр до змінної kol
popa
 
 }
 
 cout << kol;
 getch();
 return 0;
}
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
16.11.2019, 13:32
Лучший ответ Сообщение было отмечено Sssembler как решение

Решение

Sssembler,
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
char s[] = "hel7lo,1234wo8ld6";
char s1[20];
 
__asm
{ pusha
mov kol, 0
mov ecx, 17
lea esi, [s]
lea edi,[s1]
@next:
lodsb
cmp al, '0'
jb @skip
cmp al, '9'
ja @skip
inc kol
stosb
@skip:
loop @next
popa
1
0 / 0 / 0
Регистрация: 16.11.2019
Сообщений: 10
17.11.2019, 00:58  [ТС]
а что будет выводить? где сама програма это лишь кусок кода
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
17.11.2019, 01:07
Sssembler,
так ты и допиши кусок кода, который будет что-либо выводить
0
0 / 0 / 0
Регистрация: 16.11.2019
Сообщений: 10
17.11.2019, 01:08  [ТС]
Нужно вывести только цифры. Не надо скидивать уривки кода. Нужен полный ответ. Спасибо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <string>
 
using namespace std;
 
int kol=0;
 
int main()
{
 char s[] = "h5el7lo,1234wo8l6d60";
 
 __asm
 {  pusha
mov eax, 0 
mov edi, dword ptr [s]
je @exit 
@next:
mov dl,byte ptr [edi] 
lodsb
cmp dl,'0' 
jl @sdvig 
cmp dl,'9' 
jg @sdvig 
inc eax    
jmp @skip  
@sdvig:
push ecx
push edi
@nex:
mov dh,byte ptr [edi+1] 
loop @nex 
pop edi 
pop ecx 
dec edi 
@skip:
inc edi  
mov kol,eax
popa
 
 }
 
 cout << kol;
 getch();
 return 0;
}
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
17.11.2019, 01:23
Sssembler,
добавь к фрагменту из #3 строку
C++
1
cout << s1
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 11
17.11.2019, 22:35
Sssembler, возможно вы имеете в виду вызов printf из ассемблерной вставки?
Тогда, Microsoft в статье Вызов функций C во встроенном коде на языке ассемблера
показывает следующий пример вызова printf
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// InlineAssembler_Calling_C_Functions_in_Inline_Assembly.cpp
// processor: x86
#include <stdio.h>
 
char format[] = "%s %s\n";
char hello[] = "Hello";
char world[] = "world";
int main( void )
{
   __asm
   {
      mov  eax, offset world
      push eax
      mov  eax, offset hello
      push eax
      mov  eax, offset format
      push eax
      call printf
      //clean up the stack so that main can exit cleanly
      //use the unused register ebx to do the cleanup
      pop  ebx
      pop  ebx
      pop  ebx
   }
}
1
0 / 0 / 0
Регистрация: 16.11.2019
Сообщений: 10
21.11.2019, 18:35  [ТС]
ФедосеевПавел, подскажите как редактировать сообщения или их удалять? Спасибо
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8647 / 4482 / 1669
Регистрация: 01.02.2015
Сообщений: 13,889
Записей в блоге: 11
21.11.2019, 18:42
Правила форума:
2.3 Сообщения и темы, а также другой контент, размещаемый на форуме, по просьбам пользователей не удаляется и не закрывается.
Т.е. вы - не можете.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2019, 18:42
Помогаю со студенческими работами здесь

В заданном тексте заменить символ пробел на символ запятая
В заданном тексте заменить символ пробел на символ запятая. Конечные символы удалить, не заменяя на запятые. Если в тексте встречается...

Заменить любой символ в строке на пробел в xPath
Здравствуйте, не могу решить проблему замены любого символа в текстовой строке на определенный символ (в моем случае пробел) функцией...

Заменить первый пробел в строке на символ переноса
Здравствуйте. Никогда не притрагивался к шарпу. Сейчас на компе из компиляторов только шарп. Помогите, пожалуйста, решить простенькую...

Заменить указанный символ на пробел во всей строке
Приветствую, форумчане. Нужна помощь с одной программкой: Заменить указанный символ на пробел во всей строке (Используя команду scas). ...

Определить количество пробелов и заменить каждый пробел на символ «?»
Определить количество пробелов и заменить каждый пробел на символ «?»


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru