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

Сравнение длин строк и вывод их на экран

25.09.2012, 20:10. Показов 1681. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вообщем есть задание:
ввести 2 строки с клавиатуры. Если первая строка длинее чем вторая - в результирующую строку записать вторую строку в обратном порядке, если первая строка короче или равна второй - в результат записать первую строку в обратном порядке. Ну и вывести все 3 строки на экран.

Проблема в том, что при любом исходе выводится мусор, и я как понимаю - косяк в индексах ячеек строк, но не могу докумекать как сделать правильно. Помогите пожалуйста.
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
112
113
114
115
116
117
118
.model tiny
.data 
str_in db "Enter string", '$'
str_1 db 32 dup ('$')
str_2 db 32 dup ('$')
str_result db 32 dup ('$')
.code
 
org 100h
start:
 
xor dx,dx ; нулим регистры
xor si, si
 
enter_1:
 
mov ah, 09h
mov dx, offset str_in
int 21h ; приглашение на ввод строки 1
 
cycle_1:
xor ah,ah
xor al,al
int 16h ; биосовское прерывание для ввода
mov str_1[si], al; пишем в первую строку
inc si
 
mov ah, 02h
mov dl, al
int 21h ; вывод введеного символа на экран
 
cmp al, 0dh ; сравниваем с возвратом каретки
jne cycle_1 
 
push ax;  забрасываем длину первой строки в стек
 
 
xor dx,dx ; нулим регистры
xor si, si
enter_2:
 
mov ah, 09h
mov dx, offset str_in
int 21h ; приглашение на ввод строки 2
 
cycle_2:
xor ah,ah
xor al,al
int 16h ; биосовское прерывание для ввода
mov str_2[si], al; пишем вторую строку
inc si
mov ah, 02h
mov dl, al
int 21h ; вывод введеного символа на экран
 
cmp al, 0dh ; сравниваем с возвратом каретки
jne cycle_2 
 
pop bx; достаем длину первой строки в bx
mov cx, ax; забрасываем длину второй строки в cx потому что с ax дальше будут действия
sub ax, bx; сравниваем длину строк
js Lable1; результат отрицателен - первая строка длинее
 
Lable1:
    xor ax,ax 
    mov bx, 0 
    mov si, 0
    .while bx <= cx;   забрасываем в стек всю вторую строку
    mov al, str_2[si]
    push ax
    inc si
    inc bx
    .endw
 
  mov bx, 0
    mov si, 0
    .while bx <= cx;          достаем из стека вторую строку в обратном порядке
    pop ax
    mov str_result[si], al
    inc bx
    inc si
    .endw
    jmp exit ; выводим все 3 строки и выходим
xor cx,cx ;нулим регистр
 
mov cx , bx; забрасываем длину первой строки в сх
    mov bx, 0 
    mov si, 0
    .while bx <= cx
    mov al, str_1[si];   забрасываем в стек всю первую строку
    push ax
    inc si
    inc bx
    .endw
 
  mov bx, 0
    mov si, 0
    .while bx <= cx   ;          достаем из стека первую строку в обратном порядке
    pop ax
    mov str_result[si], al
    inc bx
    inc si
    .endw
    jmp exit ; выводим все 3 строки и выходим
 
exit: ; выводим все 3 строки и выходим
xor dx,dx
mov ah,09h
mov dx,offset str_1
int 21h
mov dx,offset str_2
int 21h
mov dx,offset str_result
 
int 21h
 
ret
end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.09.2012, 20:10
Ответы с готовыми решениями:

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

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

Вывод из файла и сравнение строк
Пишу автобнан для сервера. Суть в том что декодирует строку потом проверяет в ней наличие...

Сравнение строк и вывод одинаковых слов С++
Хочу чтобы пользователь вводил 2 строки, они сравнивались и выводились одинаковые слова с двух...

7
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
26.09.2012, 04:29 2
eg01st, если model tiny, то должен быть создан COM-файл, а в нем не должно быть сегмента data, если всётаки создается ЕХЕ-файл, то должна быть другая модель памяти (small, huge, large и т.д.), но не tiny, строку org 100h нужно убрать, после метки start должны быть две строки
Assembler
1
2
mov ax,@data
mov ds,ax
и вместо ret нужно поставить mov ah,4Ch/int 21h
0
2 / 2 / 1
Регистрация: 16.11.2010
Сообщений: 84
26.09.2012, 12:09  [ТС] 3
Мне нужно было уточнить, что я в курсе о .сом файле. Мне как раз и нужно 16-ти битное приложение. Компилятор и линкер у меня есть, все компилится и линкуется так как надо. Проблема именно в выводе инфы на экран, там мусор, но я не не вижу пока что своей ошибки(



Я могу ошибаться, но в универе когда нам показывали работу в переменными - всегда(когда нужно было) создавали сегмент .data и все нормально работало. Сокурсник уже сделал свое задание, там тоже работа со строками, только немного другая, и у него тоже все работает с сегментом .data.
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
26.09.2012, 12:49 4
Цитата Сообщение от eg01st Посмотреть сообщение
Я могу ошибаться, но в универе когда нам показывали работу в переменными - всегда(когда нужно было) создавали сегмент .data и все нормально работало
Ошибаешься, СОМ-файл это стек, код и данные в одном сегменте, иначе это уже Экзе
0
2 / 2 / 1
Регистрация: 16.11.2010
Сообщений: 84
26.09.2012, 13:01  [ТС] 5
Нам дали такую схему: из текстового редактора сохраняем файл с расширением .asm, компилим его с помощью ml.exe, получаем файл с расширением .obj, потом используем компоновщик link16.exe, получаем .exe файл, потом используем exe2bin.exe и получаем .com файл.
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
26.09.2012, 13:15 6
eg01st, чтобы написать СОМ-файл используй следующую схему, кроме asm-файла в текстовом редакторе напиши bat-файл со следующим содержанием
Код
cls
set filename=имя_твоего_асм_файла_без_расширения
ml /AT /c %filename%.asm
link16 /T %filename%.obj,,,,,
при клике по твоему bat-файлу будет создаваться СОМ-файл, а еще крайне важно обзавестись отладчиком, чтобы находить ошибки самостоятельно
0
2 / 2 / 1
Регистрация: 16.11.2010
Сообщений: 84
27.09.2012, 00:51  [ТС] 7
Спасибо за рекомендацию, но у меня уже есть рабочая схема как создавать .сом файлы, и она нормально работает(там несколько батников задействованно) . Но мой вопрос так и остался открытым.

Добавлено через 9 часов 41 минуту
Есть у кого-то идеи по поводу моей проблемы?)
0
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
27.09.2012, 04:02 8
Цитата Сообщение от eg01st Посмотреть сообщение
но у меня уже есть рабочая схема как создавать .сом файлы, и она нормально работает(там несколько батников задействованно)
Ну-ну... предлагалось использовать единственный батник, а по поводу проблемы -- раздобудь отладчик (afdpro, td, codeview и т.д.) и привыкай искать собственные ошибки в программе самостоятельно
0
27.09.2012, 04:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.09.2012, 04:02
Помогаю со студенческими работами здесь

Сравнение двух строк и вывод общих символов
#include &lt;iostream&gt; using namespace std; void main() { char str; char strl;

Площадь. Умножение,Сравнение,вывод на экран
Определить площадь квадрата(со стороной а) и окружности (радиуса R).Определить,площадь какого из...

Сравнение чисел и вывод текста на экран
Помогите, пожалуйста, с решением задачи на языке C#: Необходимо ввести два числа с клавиатуры. Если...

Сравнение элементов с данными в TextBox и вывод строки(строк)
Товарищи, объявилась следующая проблема, не знаю как провернуть такую задачку: пользователь вводит...


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

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