2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Как обратить строку в линукс-ассемблере? [Упр]
Сообщение20.03.2011, 18:04 


13/04/09
77
Есть строка msg: .ascii "Hello world"
нужно вывести на экран обратную ей

 Профиль  
                  
 
 
Сообщение20.03.2011, 20:53 
Аватара пользователя


30/07/10
254
NiGHTeR способов много. Можно рекурсией воспользоваться, если памяти не жалко, можно 2 раза промотать строку: сначала вперёд, потом назад. Примерно так
код: [ скачать ] [ спрятать ]
Используется синтаксис ASM
    cld
    mov esi, str_hello_world
    mov ecx, esi
aa10:
    lodsb
    and al, al
    jnz aa10
    std
    dec esi
aa20:
    lodsb
    ... ; тут нужно вывести на экран содержимое регистра al - вызов апишки в зависимости от используемой ОС.
    cmp esi, ecx
    jbe aa20
;
str_hello_world db 'Hello world', 0
 

 Профиль  
                  
 
 
Сообщение20.03.2011, 21:24 


24/05/09

2054
Могу предложить вариант для MS DOS

код: [ скачать ] [ спрятать ]
Используется синтаксис ASM
str   db   'Hello world', 0

begin:

xor  cx, cx
xor  bx, bx
lea   si, str

met_10:

lodsb

or   al, al
je   met_20

inc   cx
push al
jmp met_10

met_20:

or   cx, cx
je   met_30

pop   al
mov  str[bx], al
inc    bx
dec   cx
jmp  met_20

met_30:

; теперь в строке str должно быть "dlrow olleH"
; но за правильность не ручаюсь, а проверить не могу
; т.к. ассемблера и MS DOS давно нету...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group