Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
0 / 0 / 2
Регистрация: 07.12.2016
Сообщений: 35
1
emu8086

Ввод и сравнение двух строк

28.03.2017, 06:37. Показов 5004. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем снова здрасти! Поможете с задачей?
"Ввести с клавиатуры две строки символов(6-7 символов нужно ввести), одна в основном сегменте, вторая в ES. Сравнить строки, не совпадающие символы строки приемника заменить на символ "5". Вывести на экран число не совпадающих символов и вывести новую строку".
Почему-то препод дал задание, которое НИКТО из группы не знает как составить для него задание.

Добавлено через 11 часов 45 минут
Вот пытался сделать код хотя бы для ввода символов в строку. Выводит строку "Введите строку а" и потом символы русско-латинские, среди которых можно найти "Ошибка при вводе числаПереполнениеНЕТЦИФРЫu".
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
include io.asm
Sseg segment stack
db 256 dup (?)
Sseg ends
 
Dseg segment
str1 dw 6 dup (?)  ;
str2 dw 6 dup (?)  ;
 
str3 db 0dh,0ah,'‚Vvedite stroky a:'
str4 db 0dh,0ah,'‚Vvedite stroky b:''
Dseg ends
 
Cseg segment
assume CS:Cseg,DS:Dseg,SS:Sseg,ES:Dseg
start:
MOV AX,Dseg
MOV DS,AX
MOV ES,AX
 
LEA DX,str3
MOV AH,9H
INT 21H
MOV CX,6
m1:MOV SI,0
INCH str1[SI]
INC SI
LOOP m1
 
LEA DX,str4
MOV AH,9H
INT 21H 
MOV CX,6
m2:MOV SI,0
INCH str2[SI]
INC SI
LOOP m2
 
Cseg ends
end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2017, 06:37
Ответы с готовыми решениями:

Ввод двух строк и их сравнение
Доброго времени суток! Нужно написать программу в которой были реализованы следующие действия: Ввод...

Ввод и сравнение двух строк
Здравствуйте, прошу помочь, если есть какие-то идеи Задание такое: "ввести с клавиатуры две...

Сравнение двух строк
У меня есть две строки: buffer db 'bbbbb' tester db 'Hello' Нужно их сравнить. Как это можно...

Сравнение двух строк
помогите пожалуйста с заданием Даны две строки по длине не превышающие 255 символов. Определить...

19
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
28.03.2017, 08:09 2
При выводе строки при помощи int 21h ah=09h требуется, чтобы сама строка завершалась символом '$'.
Assembler
1
str3 db 0dh,0ah,'‚Vvedite stroky a:', '$'
Добавлено через 1 минуту
И в конце строки 11 - лишний апостроф. Поэтому получается несколько странная подсветка операторов.

Добавлено через 2 минуты
И нет кода завершения программы и передачи управления ОС.
Assembler
1
2
    mov ax, 4C00h
    int 21h
1
0 / 0 / 0
Регистрация: 10.10.2016
Сообщений: 20
28.03.2017, 10:19 3
Ну ввести-то, ввели, а как сделать что бы находить несовпадающие эл-ты и менять их на другие и после этого выводить новые строки??
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
28.03.2017, 16:12 4
Antony_Chet, а кто вы-то такой по отношению к SegaMD64BIT?
0
0 / 0 / 0
Регистрация: 10.10.2016
Сообщений: 20
28.03.2017, 16:18 5
Человек с такой же проблемой.
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
28.03.2017, 16:21 6
Тогда ЧеловекСТакойЖеПроблемой, приводите своё решение такой же проблемы, т.к. я не знаю, как у вас организована программа, называются переменные и прочее.
0
0 / 0 / 0
Регистрация: 10.10.2016
Сообщений: 20
28.03.2017, 16:26 7
Так поэтому мы и просим помощи т.к. не можем разобраться.
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
28.03.2017, 16:29 8
Стоять-бояться. Сообщение
Цитата Сообщение от Antony_Chet Посмотреть сообщение
Ну ввести-то, ввели, а как сделать что бы находить несовпадающие эл-ты и менять их на другие и после этого выводить новые строки??
можно трактовать лишь так - уже есть код, который решает половину задачи. И никак иначе. Так эту половину я и прошу привести. Или наберу без проверки в браузере несколько строк, которые считают разные элементы, а вы сами встроете их в свой код и отладите (т.е. не факт, что код без проверки заработает).
0
0 / 0 / 0
Регистрация: 10.10.2016
Сообщений: 20
28.03.2017, 16:39 9
Ну вообще я проверил код перед тем как писать вам. И все символы в строку вводятся(их 6-7), а дальше я не понимаю как сделать так что бы находить несовпадающие эл-ты, менять их на нули и записывать в строку заного. Так как вы не хотите разговаривать со мной, я уйду. Спасибо за помощь.
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
28.03.2017, 16:44 10
Я тоже не жажду общаться с человеком, который дважды игнорировал мою просьбу опубликовать наработки.

Успехов в учёбе!
0
0 / 0 / 2
Регистрация: 07.12.2016
Сообщений: 35
28.03.2017, 17:16  [ТС] 11
ФедосеевПавел, что вы так на него взъелись?Antony_Chet, мой одногруппник, и у него такое же задание и он тоже не знает как его решить.
Насчет задачи: спасибо за помощь в вводе, но теперь самое основное - замена, подсчет количества замен и вывод новой строки. Если не сложно и понимаете в этом - просьба помочь
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
28.03.2017, 18:02 12
SegaMD64BIT, я на него не взъелся. Но как вы себе представляете моё продолжение работы над кодом Antony_Chet, если он ни строчки не приводит? Хотя я дважды попросил его об этом.

Хотя бы вы опубликуйте тот код, что уже есть.

Или сразу говорите, что ничего нет, сегодня в ночной клуб идёте, а завтра лабу сдавать.

Добавлено через 34 минуты
Хорошо. Как вы просили - решение второй части. Но сопрягать с первой частью программы - не буду принципиально, так же как и вы принципиально игнорируете.
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
LOCALS
 
.model small
 
.stack 100h
 
.data
        X       db      '123486', '$'
        Y       db      '983684', '$'
        R       db      6 dup(0), '$'
        Count   db      0
        Len     dw      6
        CrLf    db      0Dh, 0Ah, '$'
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        mov     Count,  0
        mov     si,     offset X
        push    ds
        pop     es
        mov     di,     offset Y
        mov     bx,     offset R
        mov     cx,     Len
@@For:
        mov     al,     ds:[si] ;al - символ из строки X
        cmp     al,     es:[di] ;сравниваем его с символом из строки Y
        je      @@Equal
@@Different:                    ;если символы различны, то
        mov     al,     '5'     ;в результирующую строку записать символ '5'
        mov     ds:[bx],al
        inc     Count           ;увеличить счётчик разных символов на 1
        jmp     @@Next
@@Equal:                        ;если символы одинаковые, то
        mov     ds:[bx],al      ;записать это символ в результирующую строку
@@Next:
        inc     si              ;перейти к следующим символам в каждой из трёх строк
        inc     di
        inc     bx
        loop    @@For           ;команда цикла
 
        mov     ah,     09h     ;вывести результирующую строку на экран
        lea     dx,     R
        int     21h
 
        mov     ah,     09h     ;перевод строки
        lea     dx,     CrLf
        int     21h
 
        ;вывод значения различных символов на экран
        mov     dl,     Count
        add     dl,     '0'
        mov     ah,     02h
        int     21h
 
        mov     ax,     4C00h   ;завершение программы
        int     21h
main    endp
 
end     main
1
0 / 0 / 2
Регистрация: 07.12.2016
Сообщений: 35
28.03.2017, 19:03  [ТС] 13
ФедосеевПавел, Неее, мы не из таких мажорных студентов.
Простите, я час мучаюсь из виртуалки переместить файл в хост ОС
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
28.03.2017, 19:17 14
Какая виртуалка - VirtualBox?
0
0 / 0 / 2
Регистрация: 07.12.2016
Сообщений: 35
28.03.2017, 19:36  [ТС] 15
еееее, наконец-то
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
include io.asm
Sseg segment stack
db 256 dup (?)
Sseg ends
 
Dseg segment
a db 6 dup (?)  ;
b db 6 dup (?)  ;
 
str1 db 'Введите строку А'
str2 db 'Введите строку B'
Dseg ends
 
Cseg segment
assume CS:Cseg,DS:Dseg,SS:Sseg,ES:Dseg
start:
MOV AX,Dseg
MOV DS,AX
MOV ES,AX
 
LEA DX,str1
MOV AH,9H
INT 21H
MOV CX,6
MOV SI,0
m1:INCH a[SI]
INC SI
LOOP m1
 
LEA DX,str2
MOV AH,9H
INT 21H 
MOV CX,6
MOV SI,0
m2:INCH b[SI]
INC SI
LOOP m2
 
MOV AX,4C00H
INT 21H 
Cseg ends
end start
Добавлено через 12 минут
ФедосеевПавел, а вы написали вторую часть под МАСМ? Мы просто используем ТАСМ и я не очень понимаю, чем они различаются, в чем различие по синтаксису, как оформить начало программы или сегмента и т.д.
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
28.03.2017, 19:40 16
Запускать DOS программы можно двумя путями
1. Виртуальная машина (VirtualBox)
2. Эмулятор DOSBox.

Для связи с виртуальной машиной VirtualBox я использовал виртуальный Floppy Disk - виртуальную дискету, когда файл размером 1474560 байт в Windows виден, как дискета A:. эту дискету можно подключить к виртуальной машине или в виде файла-образа или в виде дискеты.

Ну, а в DOSBox всё просто - выделил папку в качестве диска D: и обменивайся через неё файлами через проводник.

Добавлено через 1 минуту
Цитата Сообщение от SegaMD64BIT Посмотреть сообщение
вы написали вторую часть под МАСМ?
Нет. Это tasm 4.1.

Добавлено через 56 секунд
Проверяйте компиляцией и компоновкой (линковкой).
0
0 / 0 / 2
Регистрация: 07.12.2016
Сообщений: 35
28.03.2017, 20:32  [ТС] 17
ФедосеевПавел, Спасибо за вторую часть, завтра будем думать, подставлять.
А если вам не лень и есть желание - подстройте под ту первую часть, что я вам дал :3
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
28.03.2017, 22:53 18
Я пользовался http://www.ltr-data.se/opencode.html/#ImDisk.
https://sourceforge.net/projects/imdisk-toolkit/
В примечаниях у меня пометка "Установить ImDisk - это только драйвера, а затем ImDisk Tk - это оболочка для управления."

Создавал файл размером 1474560 байт. Назначал его образом дискеты. Форматировал уже как диск под Windows.
Из проводника записывал на него файлы. Подключал к VirtualBox. Только не помню - или как проброс дискеты или как файл-образ в виде дискеты.

Потом перешёл на DOSBox и забыл.
0
0 / 0 / 2
Регистрация: 07.12.2016
Сообщений: 35
29.03.2017, 07:28  [ТС] 19
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
mov ah, 09h ;перевод строки lea dx, CrLf int 21h ;вывод значения различных символов на экран mov dl, Count add dl, '0' mov ah, 02h
Я вот эту часть понять не могу, зачем она?

Добавлено через 17 минут
ФедосеевПавел, И у нас похоже или версии ТАСМ различаются, или я не знаю почему, но у меня все по-другому оформляется и выделяется
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
29.03.2017, 16:43 20
Думаю, что вам преподают с некоторым упрощением. Вместо прямого обращения к DOS API (int 21h) вы применяете именованные процедуры из библиотеки io.asm. А у меня нет этого самодельного файла от вашей кафедры, и на форуме спрашивают люди с другими методичками - поэтому я использую то, что будет компилироваться и работать.

Моя программа рабочая - можете проверить компиляцией.

Строки 48-50 - переход на новую строку, т.к. функция ah=0Ah int 21h строку не переводит и вывод строки наложиться на "старые" символы.

Строки 52-56 - преобразование числа Count в строку и вывод строки. Вернее, преобразование в символ цифры и вывод этого символа. Здесь просто. По условию Count ограниченно диапазоном от 0 до 7 - т.е. одной цифрой. Как получить символ цифры - прибавить к значению Count код символа '0'.

За подробностями работы DOS API (int 21h) - в справочник (я им всегда пользуюсь при написании учебных программ) http://www.codenet.ru/progr/dos/int_0026.php

Если у вас иначе оформление - так код обработки без изменения. Иначе вывод на экран - измените вывод на экран.
0
29.03.2017, 16:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2017, 16:43
Помогаю со студенческими работами здесь

Сравнение двух строк
Привет ,снова я)) ,сравнивается String и Raz ,когда первый символ строки не совпадает со второй т.е...

Сравнение двух строк
Написать подпрограмму сравнения двух строк. Адреса строк должны передаваться через стек. (Указание:...

Сравнение двух 0-терминированных строк
Разработать приложение на языке ассемблера, которое используя подпрограмму и цепочечные команды...

Вывод двух строк и сравнение их длин
помогите сделать лабу(хотя бы какието куски програмы)..нужно написать програму которая будет...

Ввод двух строк и их вывод
Есть задание - ввести две строки - выполнить с ними определённые действия, вывести. Ввести вроде...

Ввод двух векторов и их сравнение
Требуется получить два вектора и определить является ли один из них префиксом другого. Проблема во...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru