Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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

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

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

..один из вариантов решения этой задачи.
На входе ждёт только цифры 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 на форуме   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


19:52.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru