2014 dxdy logo

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

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




 
 Как обратить строку в линукс-ассемблере? [Упр]
Сообщение20.03.2011, 18:04 
Есть строка msg: .ascii "Hello world"
нужно вывести на экран обратную ей

 
 
 
 
Сообщение20.03.2011, 20:53 
Аватара пользователя
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 
Могу предложить вариант для 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 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group