Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2014, 14:49   #1
Alexscif
Новичок
Джуниор
 
Регистрация: 12.12.2014
Сообщений: 1
Восклицание Помогите написать програму на ассемблере

Дали задание и я не успеваю выучить ассемблер, чтобы его осилить . Нужно в строке из 20 символов поменять местами первые 10 символов со вторыми и вывести результат на экран. Буду рад любым соображениям на эту тему. Например как загнать эту строку в цикл, чтоб на 10 символе происходил перенос части строки в память,а потом обрабатывалась вторая половина строки и всё это соединялась и выводилось на экран как описано выше. Можно одну часть строки отправит в ah ,а другую в al, а потом вывести всё как ax?
Alexscif вне форума Ответить с цитированием
Старый 10.04.2015, 00:03   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

..один из вариантов решения этой задачи.
На входе ждёт только цифры 0-9 (лень писать остальные конверторы).

Пример окна:
Input string..: 01234567899876543210
Output string..: 98765432100123456789

Код:
use16
org 100h
jmp start

mUser1 db 13,10,' Input string..: $'
mUser2 db 13,10,'Output string..: $'

start:
   mov dx,mUser1
   call message     ; мессага юзеру

;-------используем строковые инструкции 'stosb/lodsb'
   cld              ; флаг направления
   mov  cx,20       ; длинна строки
   push di          ; 'stosb' пишет в ES:DI
   push es          ; ..сохраним их в стеке

;-------вводим и запоминаем строку------|
istr:
   xor  ax,ax
   int  16h         ; ждём символ
   or   al,30h      ; переводим его в DEC
   int  29h         ; ..и печатаем,
   stosb            ; ..с сохранением в ES:DI
loop istr           ; мотаем 20 раз

;-------вывод результата----------------|
   mov dx,mUser2
   call message     ; мессага юзеру

;-------'lodsb' читает из DS:SI---------|
   pop  ds          ; выталкиваем указатели из стека
   pop  si          ; ..теперь DS=ES, SI=DI
   mov  cx,10       ; выводим 10 символов,
   add  si,10       ; ..начиная со-второй половины.
   call ostr        ; печатаем через 'lodsb'

   mov  cx,10       ; ..и следом выводим первую половину. счётчик
   mov  si,-2       ; указываем на начало строки
   call ostr

;-------выход---------------------------|
   xor ax,ax
   int 16h
   ret
;-------(под)программа чтения символа и перевода его в DEC
ostr:
   lodsb
   or  al,30h
   int 29h
loop ostr
ret
;-------(под)программа вывода сообщений
message:
   mov ah,9
   int 21h
ret
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Новичок,помогите написать програму Андрей3443 Паскаль, Turbo Pascal, PascalABC.NET 5 19.10.2014 12:57
Помогите написать програму AyzekUorren Паскаль, Turbo Pascal, PascalABC.NET 7 13.10.2014 21:48
Помогите написать програму RAVEN23 Паскаль, Turbo Pascal, PascalABC.NET 0 04.06.2009 17:15
Помогите написать програму TheVenny Помощь студентам 3 05.11.2008 19:52