Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вводим биты, выводим их в виде АСКИИ кода  (Прочитано 8352 раз)
0 Пользователей и 1 Гость смотрят эту тему.
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« : 20-11-2007 18:09 » 

Добрый день. Завтра лабораторная-вот вопрос один возник.

Как лучше реализовать "ввод 8 битов- 0 и 1, а затем вывод их на экран." Более всего мне не понятен процесс соединения их в одном числе которое потом помещать в регистр для вывода.

Ввод думаю можно сделать через

Код:
  MAXLEN DB 9
  ACTLEN DB ?
  BUFF DB 8 DUP (' ')

  MOV AH,10
  LEA DX,MAXLEN
  INT 21H

Тогда в массиве BUFF с 0 до 7 элемента будет наша последовательность из 0 и 1. Возможно её как-то преобразовать в единое число или весь массив выводить ?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 20-11-2007 19:00 » 

а биты должны быть в младших битах байтов массива ?

тогда соединить можно так
Код:
(на си++)
a=0;
a= a OR buf[0];
a = a << 1;
a= a OR buf[1];
a = a << 1;
...

в цикле, естественно
код на асме сейчас не напишу Улыбаюсь  (не думается и мало навыка)

но это будет не аски -код, а просто байт из восьми введённых битов




« Последнее редактирование: 20-11-2007 19:03 от Алексей1153++ » Записан

FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 20-11-2007 19:51 » 

Ах еслиб с++ =) Курсовую сдал, и распрощался с ним в учебном процессе я думаю навсегда. Теперь Асм.

-=Need Help=-

Вот отрывок в котором попытался реализовать, но почему то постоянно теряет последний бит и получается


Данные:
Код:
  MAXLEN DB 9
  ACTLEN DB ?
  BUFF DB 9 DUP (' ')
  NUM DB 0
Ввод в строку кода:
Код:
  MOV AH,10
  LEA DX,MAXLEN
  INT 21H

Обработка введёной последовательности,-мы к NUM=00000000B в DL, каждой итерацией добавляем 1 или оставляем 0 в последнем бите,в зависимости от 1 или 0 в массиве, и сдвигаем его на позицию предпоследнего. В результате на выходе из цикла последний бит станет первым, предпоследний-вторым и т.д.

Код:
  MOV SI,0

  MOV CX,7
  MOV AH,2
 
  MOV DL,NUM

 M:
  MOV BL,BUFF[SI]
  CMP BL,48
  JZ NEXT
  OR DL,00000001B
NEXT: 
  SHL DL,1
  INC SI
 LOOP M

  MOV AH,2
  INT 21H

Результат работы программы:

Цитата
C:\MASM>l3
Input x:00110001
0
C:\MASM>l3
Input x:00110010
2
C:\MASM>l3
Input x:00110011
2
C:\MASM>l3
Input x:00110100
4
C:\MASM>l3
Input x:00110101
4
C:\MASM>l3
Input x:00110110
6
C:\MASM>
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 21-11-2007 04:18 » 

попробуй
Код:
MOV SI,0

  MOV CX,7
  MOV AH,2
 
  MOV DL,0 ;;; обнулили результат

 M:
  SHL DL,1;;;; сдвиг влево
  MOV BL,BUFF[SI]
  CMP BL,48
  JZ NEXT
  OR DL,00000001B
NEXT: 
  ;;;;SHL DL,1  а здесь не надо сдвигать
  INC SI
 LOOP M

  MOV AH,2
  INT 21H

« Последнее редактирование: 21-11-2007 04:20 от Алексей1153++ » Записан

FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 21-11-2007 11:05 » 

Спасибо что ответил но сделал уже на самой лабораторной через RCL (сдвиг с помещением в последний бит содержимого флага CF). Просто устанавливал флаг 1/0 в зависимости от значения в массие и сдвигал.

Тема боле не актуальна Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 21-11-2007 11:12 » 

тоже вариант )
Чисто ассемблерский вариант.
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines