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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2013, 14:12   #1
Never_Die
 
Регистрация: 29.04.2013
Сообщений: 6
По умолчанию Дано 16 битное слово. поменять местами 1 и 5 биты

Посмотрите,пожалуйста,в чем может быть ошибка,вроде по логике все правильно и компилится нормально
Код:
.model small
.386
.stack 100h
.data
x dw 4
.code
begin:
mov ax,@data
mov ds,ax
mov ax,x
test al,00100010b
met1:
xor al,00100010b
jpe met1
mov ax,4c00h
int 21h
end begin

Последний раз редактировалось Never_Die; 29.04.2013 в 14:15.
Never_Die вне форума Ответить с цитированием
Старый 29.04.2013, 15:53   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
вроде по логике все правильно и компилится нормально
только логика очень странная -- сперва идет проверка 1-ого и 5-ого бита, а не шестого как в условии, но после команды test должен быть условный переход, а его нет, затем 1-ый и 5-ый биты инвертируются и после этого идет условный переход внутрь программы, есть вероятность, что эта "наркоманская" программа зацикливается в "вечном кайфе"
Mikl___ вне форума Ответить с цитированием
Старый 29.04.2013, 16:00   #3
Never_Die
 
Регистрация: 29.04.2013
Сообщений: 6
Смех

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
только логика очень странная -- сперва идет проверка 1-ого и 5-ого бита, а не шестого как в условии, но после команды test должен быть условный переход, а его нет, затем 1-ый и 5-ый биты инвертируются и после этого идет условный переход внутрь программы, есть вероятность, что эта "наркоманская" программа зацикливается в "вечном кайфе"
Блин,я описалась,меняю 1 и 5 биты
Never_Die вне форума Ответить с цитированием
Старый 29.04.2013, 17:14   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Never_Die
блондинка что ли? на что меняешь-то? На спирт? 1 и 5-ые биты нужно сравнить между собой, если равны, тогда ничего менять не нужно, если не равны, тогда их значения нужно инвертировать, вот такая логика должна быть... Только программу пиши сама...
Mikl___ вне форума Ответить с цитированием
Старый 29.04.2013, 17:22   #5
Never_Die
 
Регистрация: 29.04.2013
Сообщений: 6
По умолчанию

Наверно,если была бы блондинкой вообще бы ничего не написала?Логично,нет?
Я прошу помочь в чем у меня ошибка,потому что считает по-видимому неправильно,а написано так как надо
По-моему для этого существует и форум,я не прошу написать за меня прогрумму с нуля
Never_Die вне форума Ответить с цитированием
Старый 29.04.2013, 17:33   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Never_Die,
на ошибки указал, программа точно ничего не считает, а не "считает по-видимому неправильно", поэтому и не написано "так как надо", просьбу о написании программы предвидел...
Mikl___ вне форума Ответить с цитированием
Старый 30.04.2013, 04:26   #7
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Код:
; masm dos exe #
.286
.model small
.stack 100h
.data 
x dw 0BADh
.code
start:	mov ax,@data
	mov ds,ax
	mov ax,x
;------------------------
;  c5 | c1
;  ---+---
;   0 | 0  ничего не меняем
;   0 | 1  меняем местами
;   1 | 0  меняем местами
;   1 | 1  ничего не меняем
;-------------------------
	test al,00100010b
	jz exit; оба нули
	test al,00100000b; проверяем на равенство нулю 5-ый
	jz a
	test al,00000010b; проверяем на равенство нулю 1-ый
	jnz exit; оба единицы
a:	xor  al,00100010b
exit:	mov ah,4Ch
	int 21h
end start

Последний раз редактировалось Mikl___; 30.04.2013 в 04:31.
Mikl___ вне форума Ответить с цитированием
Старый 30.04.2013, 09:40   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вау!
Mikl___, спасибо, я восхищён вашим решением!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.04.2013, 12:22   #9
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Never_Die, ещё вариант.
Код:
.model small
.stack 100h
.data 
x dw 0BADh
.code
start:

      mov ax,@data
      mov ds,ax
      mov ax,x

      test al,22h
      je exit
      xor al,22h
      jne exit
      xor al,22h
      
exit: mov ah,4Ch
	int 21h
end start
vadimych вне форума Ответить с цитированием
Старый 01.05.2013, 07:23   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

vadimych,
хорошее решение, только правильно будет так
Код:
      test al,22h
      je exit
      xor al,22h
      test al,22h
      jne exit
      xor al,22h      
exit:
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поменять местами первое слово со вторым.. 3 и 4 5 и 6 7 и 8 kiruka4 Qt и кроссплатформенное программирование С/С++ 1 03.01.2012 13:26
поменять местами первое слово со вторым.. 3 и 4 5 и 6 7 и 8 kiruka4 Общие вопросы C/C++ 0 22.12.2011 18:45
Зеркально поменять местами биты. Си. Аnтоn Помощь студентам 0 09.12.2010 16:22
дано 16-ти битное слово, найти первый ноль справа Alisssa Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 08.11.2010 11:54