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

Как купить рекламу на форуме


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

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

Купить рекламу на форуме 20000 рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2017, 00:28   #1
Zhan1234
Новичок
Джуниор
 
Регистрация: 26.04.2017
Сообщений: 2
По умолчанию Исправить код программы: Ввести с клавиатуры 8-разрядное двоичное число Х, установить младший бит этого числа так, чтобы количество единичных бит в двоичном числе Х стало четным

Задание: Ввести с клавиатуры восьмиразрядное двоичное число Х, установить младший бит этого числа таким образом, чтобы количество единичных бит в двоичном числе Х стало четным. Результат преобразования вывести в файл в 16-ричной форме.
Помогите пожалуйста модернизировать код (сделать поменьше) и добавить вывод сообщений ("Введите число").
Вот мой код:
Код:
TITLE PROG
.model small
.stack 100h
.data
   bait       db   ?
   shesnads   db   16
   edinits    db   ?
   Name1      db   'txt.txt',0 
   FM         dw   ?  
   ras        db   ?
   dva        db   ?   
.code
begin:
     mov     ax,@data
     mov     ds,ax
     mov	cx,8
vv_0_1:
	mov	ah,1
	int	21h
	cmp	al,31h
	jz	vv1
	cmp	al,30h
	jz	vv0
	jmp	vv_0_1  ;если введен ни ноль и ни единица, то число не считывается и запрос повторяется
vv1:
	stc
	rcl	bait,1
	jmp	loo
vv0:
	clc
	rcl	bait,1
loo:
	loop	vv_0_1
	mov cx,8
	mov  bl,bait
m1:  
   rcl     bl,1
   jb      m2
   loop  m1
   jmp   nex
   m2:  
   inc    edinits
   loop  m1
nex:            ;проверка четного/нечетного количества единиц
   mov ah,0
   mov al,edinits
   mov cl,2
   div cl
   cmp ah,0
   jz  viv       ;если четно -- идем в viv
   rcr bait,1
   jc  craven1   ;проверка последнего бита
   stc           ;делаем последний бит единицей, если он равен 0
   rcl bait,1
   jmp viv             
craven1:
   clc           ;делаем последний бит 0, если он равен единице
   rcl bait,1
viv:             
   mov   ah,5bh  ;создание файла, если его еще нет, отсюда и до mov ah,4ch -- вывод в файл
   mov   cx, 0 
   lea   dx, Name1 
   int   21h 
   mov  ax,3D01h; открытие файла  
   lea    dx, Name1   
   int    21h                        
   mov FM, ax
   mov al,bait   ;разобъем 16ричное число на 2 байта
   mov ah,0
   div shesnads
   mov ras,al
   mov dva,ah    
   cmp ras,10    ;сделаем из числа его символьный код аски     
   jns bukvi1
   mov al,30h
   add ras,al
   jmp bek2
bukvi1:
   mov al,37h
   add ras,al
bek2:
   cmp dva,10
   jns bukvi2
   mov al,30h
   add dva,al
   jmp filen
bukvi2:
   mov al,37h
   add dva,al
filen:
   mov ah, 40h   ;запись первого байта в файл	
   mov bx, FM	
   lea dx, ras
   mov cx, 1
   int 21h
   mov ah, 40h   ;запись второго байта в файл	
   mov bx, FM	
   lea dx, dva
   mov cx, 1		
   int 21h
   mov ah, 3Eh   ;закрытие файла	
   mov bx, FM
   int 21h
   mov ah,4ch
   int 21h
end
_____
1) Название темы не соответствует правилам форума
Название темы должно адекватно отражать суть решаемой задачи/проблемы! (на первый раз я исправил)

2) Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 24.05.2017 в 09:40.
Zhan1234 вне форума Ответить с цитированием
Старый 24.05.2017, 09:45   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

Цитата:
Сообщение от Zhan1234 Посмотреть сообщение
добавить вывод сообщений ("Введите число")
это несложно:
в секции .data пишете:
Код:
.data
mess_ent db "Vvedite chislo:",'$'
потом в коде программы:
Код:
  lea dx, mess_ent
  mov ah, 9 
  int 21h
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.05.2017, 12:41   #3
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,418
По умолчанию

Код:
;FASM-code.. (.model tiny)
;---------------------------
org     100h
jmp     start

mes0    db    13,10,10,' Type BIN: $'
mes1    db    13,10,' Result..: $'
buff    db    9 dup('$')
fName   db    'out.txt',0

start:  mov   ah,9              ; запрос на ввод..
        mov   dx,mes0           ;
        int   21h               ;

        mov   cx,8              ; символов для ввода
        xor   bl,bl             ; счётчик единиц
        mov   di,buff           ; буфер для записи строки
@00:    mov   ah,8              ; ввод без эха
        int   21h               ;
        cmp   al,'0'            ; фильтр ввода
        jb    @00               ;
        cmp   al,'1'            ;
        ja    @00               ;
        int   29h               ; выводим символ на экран
        stosb                   ;   ..в буфер его (для записи в файл)
        sar   al,1              ; выталкиваем мл.бит во-флаг CF
        jnc   @next             ; если не единица..
        inc   bl                ; иначе: считаем их
@next:  loop  @00               ;

        dec   di                ; DI = последний символ; BL = кол-во единиц.
        test  bl,1              ; BL не чётное ???
        jz    @okey             ; чётное..
        xor   byte[di],1        ; иначе: обратить младший бит символа

@okey:  mov   ah,9              ; результ
        mov   dx,mes1           ;
        int   21h               ;
        mov   dx,buff           ; выводим BIN-строку из буфера
        int   21h               ;

;//------[ Здесь запись буфера в файл ] ----------//

@exit:  xor   ax,ax             ; ждём клаву
        int   16h               ;
        cmp   al,27             ; ESC ?
        jne   start             ; нет - мотаем сначала..
        retn                    ; bye!
Изображения
Тип файла: gif 1110.gif (2.0 Кб, 89 просмотров)
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходимо установить бит Некий Молла Общие вопросы C/C++ 6 02.12.2015 22:30
Вывести числа, из диапазона от n до m у которых, количество единичных разрядов в двоичном представлении числа нечетно sheff123 Помощь студентам 8 05.01.2012 14:35
Дано целое число Х. Посчитать количество бит равных 1 Preidman Общие вопросы C/C++ 2 29.03.2011 17:01
в поле ввести число и при нажатии кнопки получить рандом от этого числа NIQK HTML и CSS 4 03.03.2010 10:51
Как установить i-й бит целого числа qwerty09 Общие вопросы C/C++ 4 08.07.2009 23:20



Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS