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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2015, 21:15   #1
Harbinger
 
Регистрация: 08.04.2015
Сообщений: 6
По умолчанию Циклический сдвиг влево на один разряд (Assembler)

Здравствуйте, помогите пожалуйста разобрать задачу на Ассемблере. Содержание таково: Произвести циклический сдвиг влево на один разряд многобайтного кода, находящегося начиная с адреса 0900H. Количество байт в коде находится по адресу 0А00Н. Как я понимаю, что после ввода кода необходимо флаг на первый байт поставить. Попробовал написать код, но как-то не то выходит, но иду ли я в правильном направлении? Заранее спасибо
Код:
lxi h,0900
  mov a,m
  lxi b,m
Label 1:
  ral
  dcr b
  jnz Label 1
  lxi h, 0905
  mov m,a
Harbinger вне форума Ответить с цитированием
Старый 29.09.2015, 06:41   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

...это типа шифрования получается что-ли? Тогда так:
Код:
   MOV   CX,WORD[0A00h]            ; длинна многобайтного кода
   MOV   SI,0900h                  ; SI = адрес начала шифруемого участка кода
startCrypt:
   LODSB                           ; берём в AL следующий элемент кода из DS:SI
   ROL   AL,1                      ; сдвиг влево на 1 разряд
   DEC   SI                        ; возвращаемся назад
   MOV   BYTE[SI],AL               ; записываем изменённый байт
   INC   SI                        ; восстанавливаем SI
   LOOP  startCrypt                ; мотаем цикл CX-раз..

endCrypt:                          ; отработали CX-раз. Выводим мессагу..
   MOV   AX,'OK'                   ; текст в AX (расположен зеркально)
   INT   29h                       ; выводим на экран, что находится в AL
   ROL   AL,8                      ; меняем байты местами
   INT   29h
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 29.09.2015 в 06:47.
R71MT вне форума Ответить с цитированием
Старый 29.09.2015, 07:46   #3
AbakBarama
Пользователь
 
Регистрация: 12.05.2011
Сообщений: 57
По умолчанию

R71MT, вы пытаетесь на ассемблере 8086 писать, а товарищ на 8080 хочет. К тому же, надо не каждый отдельный байт на 1 бит вращать, а несколько последовательных байтов как единое целое.

Harbinger, задача же несложная, строк примерно 20 в итоге будет. Распишите сначала все действия по шагам, а потом под каждый шаг найдите подходящие ассемблерные команды. И с системой команд все-таки поглубже разберитесь.
AbakBarama вне форума Ответить с цитированием
Старый 29.09.2015, 10:15   #4
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

...поэтому надо уточнять задание
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Осуществить циклический сдвиг элементов массива влево на К позиций (Delphi) ALEXandr20333 Помощь студентам 8 13.02.2014 23:04
В квадратной матрице сделать циклический сдвиг стобцов влево на 1 Foxlin Помощь студентам 6 22.12.2013 14:52
Срочно! Сделать сдвиг на один влево в квадратной матрице (язык C) Foxlin Помощь студентам 0 19.12.2013 18:54
как сделать циклический сдвиг в массиве на к елементов вправо и влево на язеке с++???? zvir Общие вопросы C/C++ 7 13.11.2012 03:37
Не получается циклический сдвиг элементов списка влево Джиксер Общие вопросы C/C++ 5 02.06.2010 23:38