0 / 0 / 0
Регистрация: 12.09.2016
Сообщений: 4
1

Объединение двух строк

12.09.2016, 19:22. Показов 4948. Ответов 7
Метки нет (Все метки)

Заданы 2 строки, в которых символы упорядочены в порядке возрастания кодов. Объединить их в одну строку, сохранив упорядоченность. Помогите пожалуйста , написал не пойму где неправильно.
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
.386
.model flat,stdcall
 option  casemap:none
      include   c:\masm32\include\windows.inc
      include   c:\masm32\include\user32.inc
      include   c:\masm32\include\kernel32.inc
      includelib c:\masm32\lib\user32.lib
      includelib c:\masm32\lib\kernel32.lib
      include c:\masm32\include\msvcrt.inc
        includelib c:\masm32\lib\msvcrt.lib
.data
    mas db -2,-7,-9,7   
    s1 db '456',0
    s2 db '123',0
    fmt db 'Hello mafaka',10,13,0
    string db 7 dup(?)
    
.code
start:
 
lea   si,s1       
lea   di,string
mov bx,di
lea di,s2
mov dx,0;
mov cx,0;
 
 
 
logic:
    lodsb;
    dec si;
    mov cl,al;
    or cl,cl;
    jz S2mS1;
 
    push si;
    mov si,di;
    lodsb;
    dec si;
    mov dl,al;
    or dl,dl;
    jz S1mS2;
    pop si;
 
    or si,di;
    jz printt
    sub dl,dl;
    sub cl,cl;
 
    
    cmpsb
    jz S1eS2;
    jb S1mS2;
    ja S2mS1;
    
 
 
S1mS2:
    dec si;
    lodsb;
    push di;
    mov di,bx;
    stosb;
    mov bx,di;
    pop di;
    jmp logic;
 
 
S2mS1:  
    push si;
    push di;
    mov si,di 
    dec si;
    lodsb;
    mov di,bx;
    stosb;
    mov bx,di;
    pop di;  
    pop si; 
    jmp logic;
    
S1eS2:
    push di;
    dec si;
    lodsb;
    mov di,bx;
    stosb;
    mov bx,di;
    pop di;
    push si;
    mov si,di;
    dec si;
    lodsb;
    pop si;
    push di;
    mov di,bx;
    stosb;
    mov bx,di;
    pop di;
    jmp logic;
 
printt:    
    mov al,0;
    mov di,bx;
    stosb;
 
invoke crt_printf,addr string
INVOKE    ExitProcess, 0 
 
end start
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2016, 19:22
Ответы с готовыми решениями:

Объединение двух символьных строк
Написать программу объединения двух символьных строк с использованием команды MOVSB. Необходимо...

Объединение двух строк
Всем привет! Прошу прощения за мою тупость, но вопрос такой: Необходимо отправить вот такой...

Выполнить объединение двух строк с помощью перегрузки оператора (*)
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> using namespace std; class...

Получить третью строку, как объединение двух строк следующим способом: если S1= “123” и S2= “abc”, то S3=“1a2b3c”
Даны две символьные строки S1 и S2. Получить третью строку, как объединение двух строк следующим...

7
Эксперт Hardware
5195 / 1851 / 347
Регистрация: 29.07.2014
Сообщений: 2,798
Записей в блоге: 5
12.09.2016, 20:27 2
Цитата Сообщение от MathLove Посмотреть сообщение
mas db -2,-7,-9,7
..а зачем эта переменная?
0
0 / 0 / 0
Регистрация: 12.09.2016
Сообщений: 4
12.09.2016, 20:37  [ТС] 3
Осталось просто, суть не в этом
0
Эксперт Hardware
5195 / 1851 / 347
Регистрация: 29.07.2014
Сообщений: 2,798
Записей в блоге: 5
12.09.2016, 20:44 4
А если строки будут такими, тогда какой должен быть результат?
Assembler
1
2
s1 db '345678',0
s2 db '123456',0
0
0 / 0 / 0
Регистрация: 12.09.2016
Сообщений: 4
12.09.2016, 21:08  [ТС] 5
123344556678,суть в чем получается, при таком коде ошибочка то, я теперь вообще в недоумении что да как и почему
Assembler
1
2
lea si,s1;
lodsb;
Добавлено через 6 минут
R71MT, както так
0
Эксперт Hardware
5195 / 1851 / 347
Регистрация: 29.07.2014
Сообщений: 2,798
Записей в блоге: 5
12.09.2016, 21:12 6
Лучший ответ Сообщение было отмечено MathLove как решение

Решение

Почитай про REP MOVSB (копирование строк) и о методах сортировки массивов.
Тебе нужно скопировать обе строки с переменную "стринг" и отсортировать по-возрастанию получившийся массив

Добавлено через 1 минуту
..и в модели памяти "flat" нужно использовать 32-битные регистры: ESI/EAX и т.д.
1
0 / 0 / 0
Регистрация: 12.09.2016
Сообщений: 4
12.09.2016, 21:15  [ТС] 7
R71MT, Такая идея была, но похоже решил усложнить себе жизнь, спасибо
0
Эксперт Hardware
5195 / 1851 / 347
Регистрация: 29.07.2014
Сообщений: 2,798
Записей в блоге: 5
12.09.2016, 21:45 8
Так можно склеить обе строки. Результат будет в переменной (S1)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
; Будем считать, что строки одинаковой длины
s1   db   '456',0          ;
s2   db   '123',0          ;
len  equ  ($-s2)-1         ;длина одной строки (без нуля в конце)
 
start:
     mov   ecx,len         ;ECX = кол-во байт для копирования.
     lea   edi,[s2]        ;приёмник -
     dec   edi             ;    - конец первой строки.
     lea   esi,[s2]        ;источник - вторая строка.
     rep   movsb           ;скопировать ECX-байт из ESI в EDI
     xor   al,al           ;AL = 0 (нуль-терминал)
     stosb                 ;вставим его в хвост строки.
     lea   ecx,[len*2]     ;длина новой строки (S1)
Дальше сортируешь строку (S1) и получаешь результат.
https://www.cyberforum.ru/asse... 90127.html
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.09.2016, 21:45

Объединение двух строк в одну, причем вторая присоединяется к первой, начиная с n-го элемента первой
Объединение двух строк в одну, причем вторая присоединяется к первой, начиная с n-го элемента...

Если сумма двух первых строк матрицы А меньше суммы элементов двух последних её строк
Если сумма двух первых строк матрицы А меньше суммы элементов двух последних её строк. Изменить...

Из двух строк сделать одну, в которой поочередно будут символы двух строк
Из двух строк сделать одну, в котором поочередно будут символы двух строк.

Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк.
Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.