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

Вывести строку на экран в обратном порядке

19.10.2010, 14:31. Показов 1268. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Masm32

есть строка. вывести ее на экран в обратном порядке.
Помогите плз.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2010, 14:31
Ответы с готовыми решениями:

Введенную с клавиатуры строку A записать в обратном порядке в строку B. Строку B вывести на экран
Введенную с клавиатуры строку A записать в обратном порядке в строку B. Строку B вывести на экран.

Введенную с клавиатуры строку A записать в обратном порядке в строку B. Строку B вывести на экран.
Введенную с клавиатуры строку A записать в обратном порядке в строку B. Строку B вывести на экран....

Введенную с клавиатуры строку A записать в обратном порядке в строку B. Строку B вывести на экран
Помогите решить от и до))

Вывести строку на экран по словам, причем каждое слово вывести в обратном порядке
Ввести строку, вывести на экран пословно, причем каждое слово вывести в обратном порядке.

7
65 / 65 / 1
Регистрация: 14.04.2010
Сообщений: 170
19.10.2010, 15:16 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
.386
.model flat, stdcall
option casemap :none
 
include \masm615\include\windows.inc
include \masm615\include\user32.inc
include \masm615\include\kernel32.inc
includelib \masm615\lib\user32.lib
includelib \masm615\lib\kernel32.lib
 
.data
stroka db 'stroka',0
len equ $-stroka
stdout DWORD ?
cWritten DWORD ?
 
.code
proga:
    invoke GetStdHandle ,STD_OUTPUT_HANDLE
    mov stdout,eax
    
    lea edx,stroka+len-2
    mov ecx,len
@@:
    push ecx
    push edx
    invoke WriteConsoleA,stdout,edx,\
       1,ADDR cWritten,NULL
    pop edx
    dec edx
    pop ecx
    loop @b
       
invoke ExitProcess,0
end proga
Добавлено через 25 минут
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CSEG segment
org 100h
 
proga:
lea bx,stroka+len-2
mov ah,2
mov cx,len-1
 
@@:
mov dl,[bx]
    int 21h
    dec bx
    loop @b
    
 
ret
stroka db 'stroka',0
len equ $-stroka
 
CSEG ends
end proga
2
5 / 5 / 2
Регистрация: 23.10.2009
Сообщений: 63
19.10.2010, 17:34  [ТС] 3
Thanks
0
159 / 16 / 0
Регистрация: 14.09.2010
Сообщений: 421
Записей в блоге: 6
21.10.2010, 21:41 4
Код
format PE Console
include '%fasm%\win32ax.inc'
section '.code' executable
start:
        invoke GetStdHandle,STD_OUTPUT_HANDLE
        mov [Stdout],eax
        len equ $-stroka
        lea edx,[stroka+len-2]
        mov ecx,len
@@:
        push ecx
        push edx
        invoke WriteConsoleA,[Stdout],edx,TRUE,cWritten,NULL
        pop edx
        dec edx
        pop ecx
        loop @r
exit:
        invoke ExitProcess,NULL

.end start

section '.data' readable writable

        stroka db 'stroka',0
        cWritten rd 6
        Stdout dd ?
Что-то глючит.
А вообще stroka+len-2 это stroka+$-stroka-2 то есть $-2 или это не так?
0
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
21.10.2010, 21:50 5
Для информации
$ - это текущий аддрес
stroka - аддрес метки stroka
len equ $-stroka - разница между текущим аддресом и аддресом метки stroka. Причем т.к. в 7 строке текущий аддрес меньше, то число получается не только бесполезным, так еще и отрицательным.
0
65 / 65 / 1
Регистрация: 14.04.2010
Сообщений: 170
21.10.2010, 21:53 6
len equ $-stroka надо вставить в сегменте данных сразу за stroka db 'stroka',0, чтобы определить её длину
1
159 / 16 / 0
Регистрация: 14.09.2010
Сообщений: 421
Записей в блоге: 6
21.10.2010, 23:03 7
Цитата Сообщение от assemb Посмотреть сообщение
надо вставить в сегменте данных сразу за stroka db 'stroka',0,
Да вроде бы работает, хотя экран скроллится и где-то внизу выводит, и даже один символ ненужный.

Но так как у меня сегмент данных идёт после, то нет возможности вставить там equ оператор.
А интересно, что в таком случае данные должны быть впереди? Это нельзя никак обойти?
0
65 / 65 / 1
Регистрация: 14.04.2010
Сообщений: 170
21.10.2010, 23:22 8
Assembler
1
2
3
.data
stroka db 'stroka',0    ;здесь правильнее без нуля
len equ $-stroka
и даже один символ ненужный
тоесть ноль занимает лишний байт и поэтому он учитывается в переменной len. len в данном случае равен не 6-ти, а 7 вместе с нулём. Потому и один символ ненужный.
Но так как у меня сегмент данных идёт после, то нет возможности вставить там equ оператор
почему нет возможности? Вроде можно и перед section '.code' поставить section '.data'
1
21.10.2010, 23:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2010, 23:22
Помогаю со студенческими работами здесь

Ввести строку, вывести на экран пословно, причем каждое слово вывести в обратном порядке
Задание: Ввести строку, вывести на экран пословно, причем каждое слово вывести в обратном порядке....

Ввести строку, вывести пословно на экран, но слова в обратном порядке
Ввести строку, вывести пословно на экран, но слова в обратном порядке.

Ввести строку, вывести пословно на экран, но слова в обратном порядке
если можно, с комментариями: Ввести строку, вывести пословно на экран, но слова в обратном порядке.

Вывести строку на экран в обратном порядке (1) и определить, входят ли в состав заданной строки числа (2)
1. Дана строка символов, заканчивающаяся точкой. Вывести ее на экран в обратном порядке без...


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

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