Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 8 
  Версия для печати (полностью) Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 02.11.2003
Откуда: Россия,Москва
Люди очень надо помогите для профи вроде Вас это не сложно.
2 задания...
1 задание
В массиве слов (байтов) указанного размера над каждым элементом проде-
лать операцию: сбросить два старших бита в элементе, если в нём трижды
встречается образец из трёх битов.
(Пример: 101 три раза встречается в слове 1101011110111100, поэтому оно
превращается в 00010111101111100).
2 задание

Если обе строки чётной длины, то сцепить первую половину первой строки
со второй половиной второй строки. Из полученной строки удалить все
цифры и сосчитать количество удалений и длину новой строки.
("Первая строка пуста", "Вторая строка пуста", "Первая строка нечётной
длины", "Вторая строка нечётной длины", "В новой строке нет цифр").

_________________
Ego potissimus. Если кто не понял - его проблемы... Правда - и я не допёр... Хотя догадываюсь.Типа на Латыне что то.....



Партнер
 

Member
Статус: Не в сети
Регистрация: 27.05.2004
Откуда: Москва
1.
Код:
text   segment 'code'
       assume CS:text, DS:text
       org 100h
main   proc
       mov ax, num
       mov bl, msk
       mov cx,14
       xor dl,dl
srch:  mov bh,al
       and bh,111b
       xor bh,bl
       jnz nfnd
       inc dl
       cmp dl,3
       je fnd
nfnd:  shr ax,1
       loop srch
       jmp exit
fnd:   and  num, 11111111111111b
exit:  mov ax,4C00h
       int 21h
  num  dw 1101011110111100b
  msk db 101b
main   endp
text   ends
end main

 

_________________
Надо просто осознать, что вы не крупный специалист, прежде чем обманывать (c) Du Volon


 

Advanced member
Статус: Не в сети
Регистрация: 23.10.2003
Откуда: Иркутск/Майкоп
Оффтоп удален, переношу во флейм.

_________________
Края каждого совершенно нового крышка процессора не на 100% гладкая. Это связано с тем, что следов мастерства не избежать. (c) Али.


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 02.11.2003
Откуда: Россия,Москва
А есть точно такой же код для точно такой же проги но что бы самому вводить числа и прога сама бы отсортировалала бы(ну как в задани).
???А то как я понял сдесь только с 1 числом можно работать..

_________________
Ego potissimus. Если кто не понял - его проблемы... Правда - и я не допёр... Хотя догадываюсь.Типа на Латыне что то.....


 

Member
Статус: Не в сети
Регистрация: 27.05.2004
Откуда: Москва
2.
Код:
text   segment 'code'
       assume CS:text, DS:data
main   proc
       mov ax,data
       mov ds,ax
       mov es,ax
       mov di,offset str1
       call strlen

       cmp al,0
       je err1
       test al,1
       jnz err3
       push ax

       mov di, offset str2
       call strlen

       cmp al,0
       je err2
       test al,1
       jnz err4
       
       mov si,offset str1
       pop cx
       shr cx,1
       mov di,offset str3
       rep movsb
       
       mov cx,ax
       shr cx,1
       mov si,offset str2
       add si,cx
       rep movsb
       
       inc di
       mov byte ptr [di],0
       mov di,offset str3
       call strlen
       
       mov cx,ax
       xor bx,bx
   sr: cmp byte ptr [di],'0'
       jb next
       cmp byte ptr [di],'9'
       ja next
       mov byte ptr [di],' '
       inc bx
 next: inc di
       loop sr

       ;В bx - количество удаленных цифр.

       cmp bx,0
       jne bxnz
       call err5

 bxnz: mov di,offset str3
       call prints
       jmp exit
       
       
err1:  mov di,offset errs1
       call prints
       jmp exit
err2:  mov di,offset errs2
       call prints
       jmp exit
err3:  mov di,offset errs3
       call prints
       jmp exit
err4:  mov di,offset errs4
       call prints
       jmp exit

err5:  mov di,offset errs5
       call prints
       ret
       
       
exit:  mov ax,4C00h
       int 21h
       
main   endp

strlen proc
       push cx
       push di
       xor  al,al
       mov cx,0FFFFh
 repnz scasb
       mov ax,0FFFEh
       sub ax,cx
       pop di
       pop cx     
       ret
strlen endp

prints proc
       push bx
       push cx
       push dx
       mov bx,1
       call strlen
       mov cx,ax
       mov ah,40h
       mov dx,di
       int 21h
       pop dx
       pop cx
       pop bx
       ret
prints endp
text ends
data segment
  str1 db 'string 1',0
  str2 db 'string 2',0

  errs1 db '1st string is empty',0
  errs2 db '2nd string is empty',0
  errs3 db '1st string has odd length',0
  errs4 db '2nd string has odd length',0
  errs5 db 'New string does not contain numbers',0

  str3 db 80 dup (?)
data ends
sseg segment stack
  dw 128 dup (?)
sseg ends 
end main

_________________
Надо просто осознать, что вы не крупный специалист, прежде чем обманывать (c) Du Volon


 

Member
Статус: Не в сети
Регистрация: 26.10.2004
Откуда: СПб
PaPa_CaRLO
Последний код вроде правильный, только когда собираешь файл надо досовскую libc.lib к нему прилинковать, есть например в составе BC++ 3.1


 

Member
Статус: Не в сети
Регистрация: 27.05.2004
Откуда: Москва
PaPa_CaRLO
Цитата:
А есть точно такой же код для точно такой же проги но что бы самому вводить числа

А ввод с клавы надо добавить. И перевод символьных строк в числа - тоже.
Ввод строки - это функция ДОС 3Fh
Примерно так:
Код:
 mov ah,3Fh
 mov bx,0
 mov cx,128;максимальное число вводимых символов
 mov dx,offset inbuf; адрес буфера ввода
 int 21h

На выходе: в ax-число введенных символов, по адресу inbuf (надо, естественно, объявить соответствующую область данных) - введенная строка.
А преобразование строки в число сводится к вычитанию из кода символа 0:
Код:
 sub al,'0';В al предварительно положили символ, взятый из строки

Далее - проверка на нахождение числа в допустимом диапазоне (не больше 1 для 2-ичных чисел). Примерно так:
Код:
 cmp al,1
 ja error ;на метке error - код, обрабатывающий ситуацию, когда число вне диапазона

Ну и если ввод в норме - то сдвигаем полученную цифру на соответствующую позицию и or'ом "вставляем" ее в получаемое число.

_________________
Надо просто осознать, что вы не крупный специалист, прежде чем обманывать (c) Du Volon


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 02.11.2003
Откуда: Россия,Москва
Ух а я и не заметил спасибо Вам люди!!!

_________________
Ego potissimus. Если кто не понял - его проблемы... Правда - и я не допёр... Хотя догадываюсь.Типа на Латыне что то.....


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 8 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Ханыга и гости: 21


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

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan