Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какой командой установить/сбросить бит ? 
:(
    Опции темы
Dreamuchiy
Дата 29.10.2011, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.12.2006

Репутация: нет
Всего: -1



Такие команды как BT, BTR и BTS при директиве .286 или вообще при ее отсутствии (masm 6.1) не воспринимаются компилятором, оно и понятно что такие команды появились в процах 386 и более поздних. Однако если поставить директиву .386, то компилятор компилирует помоему все команды как 32-х разрязные и получается хрень так как я пишу 16-разрядными командами. По крайней мере дебаггер CV.EXE так показывает. Чем можно заменить те команды?
--------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт...
PM MAIL   Вверх
iff
Дата 30.10.2011, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



1. 
Цитата(Dreamuchiy @  29.10.2011,  22:39 Найти цитируемый пост)
то компилятор компилирует помоему все команды как 32-х разрязные и получается хрень так как я пишу 16-разрядными командами.

Все 16-разрядные команды нормально выполняются 32-разрядным процессором.

2. 
Цитата(Dreamuchiy @  29.10.2011,  22:39 Найти цитируемый пост)
Чем можно заменить те команды? 

1) для установки бита в 1:
Код

or al, 00100000B

Этот код подходит только когда вам заранее известно какой бит установить в единицу (в качестве константы здесь указан не номер бита (как в BTS), а двоечное число, у которого нужный разряд равен единице). Что-бы установить нужный бит в единицу если его номер узнаётся только при выполнении программы, то:
Код

;cl - номер бита
mov bl, 1
shl bl, cl
or al, bl

2) для установки в 0:
Код

and al, 11011111B

Опять, этот код возможен когда номер бита известен ещё на этапе компиляции, в ином случае:
Код

;cl - номер бита
mov bl, 1
shl bl, cl
not bl
and al, bl



--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Dreamuchiy
Дата 30.10.2011, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.12.2006

Репутация: нет
Всего: -1



что бы вам было проще понять выкладываю написаную мной программу уже после публикации вопроса. В отрывке программы идет управление светодиодами на клавиатуре. В принципе они вроде включаются, но вот например если два диода горят то при выключении одного гасятся все или еще какая нибудь белиберда с ними получается. 
Код

scankey:
call prov8042                                  ;проверка готовности микросxемы 8042
jmp next_fun_key                           ;в данном случае не имеет значения
;--------------------
set_diode_key:
call prov8042
mov ax,0edh
out 60h,ax
call prov8042
mov al,[csn_on_off]                       ;загрузка значения из переменной D0-Caps lock 1=on, 0=off
                                                      ; D1-Scroll lock 1=on, 0=off. D2-Num lock 1=on, 0=off
out 60h,al
ret
;-------------------
caps:                                              ;Точка входа процедуры после нажатия клавиши Caps lock
                                                       ;тут проверяется состояние светодиодов на данный момент
                                                       ;переход на включение или выключение
mov al,[csn_on_off]
and bl,00000001b
and al,bl
cmp al,0
jnz caps_off
;
caps_on:                                       ;включение светодиода
mov al,[csn_on_off]
mov bl,00000001b    
xor al,bl
mov [csn_on_off],al    
call set_diode_key
jmp scankey
;----
caps_off:                                      ;выключение светодиода
mov al,[csn_on_off]
mov bl,00000000b
and al,bl
mov [csn_on_off],al
call set_diode_key
jmp scankey
;------------
scr:                                              ;те же процедуры но с другим светодиодом и другой клавишей и другим битом
mov al,[csn_on_off]
mov bl,00000010b
and al,bl
cmp al,0
jnz scr_off

scr_on:
mov al,[csn_on_off]
mov bl,00000010b
xor al,bl
mov [csn_on_off],al
call set_diode_key
jmp scankey
;----
scr_off:
mov al,[csn_on_off]
mov bl,00000000b
and al,bl
mov [csn_on_off],al
call set_diode_key
jmp scankey
;--------------
num:                                                 ;те же процедуры но с другим светодиодом и другой клавишей и другим битом
mov al,[csn_on_off]
mov bl,00000100b
and al,bl
cmp al,0
jnz num_off

num_on:
mov al,[csn_on_off]
mov bl,00000100b
xor al,bl
mov [csn_on_off],al
call set_diode_key
jmp scankey
;----
num_off:
mov al,[csn_on_off]
mov bl,00000000b
and al,bl
mov [csn_on_off],al
call set_diode_key
jmp scankey
;-------------------    
prov8042:                                  ;процедура проверки микросжемы на гтовность принять команду
mov cx,0
wait_loop:
in al,64h
and al,00000010b
loopnz wait_loop
ret




Написано на уровне портов потому что пишу маленькую ось под себя

P.S. есть ли команда вызова процедуры  по условию ? Когда я пиcал на асме под проц Z80, там была команда CALL Z и подобные а тут только JZ

Это сообщение отредактировал(а) Dreamuchiy - 30.10.2011, 20:32
--------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт...
PM MAIL   Вверх
iff
Дата 30.10.2011, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Цитата(Dreamuchiy @  30.10.2011,  20:26 Найти цитируемый пост)
пишу маленькую ось под себя

Цитата(Dreamuchiy @  30.10.2011,  20:26 Найти цитируемый пост)
 а тут только JZ

 smile Во-первых, вы вообще под IBM-совместимую ЭВМ пишите ОС?
Если да, то см. инструкции JA, JAE, JB, JBE, JE, JG, JGE, JL, JLE, JNA, JNAE, JNB, JNBE, JNE, JNG, JNGE, JNL, JNLE, JC, JNC, JNO, JNP, JNS, JNZ, JO, JP, JPE, JPO, JS, JZ, JCXZ, JECXZ

Добавлено через 1 минуту и 36 секунд
Цитата

Zilog Z80 — 8-разрядный микропроцессор, разработанный и производимый фирмой Zilog с 1976 года. Он широко использовался в домашних и персональных компьютерах, а также во встраиваемых и военных системах

 smile 


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Dreamuchiy
Дата 31.10.2011, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.12.2006

Репутация: нет
Всего: -1



Да, под IBM совместимую ! Она мне нужна для эксперементов и осваивания железа ! А Z-80 это вещь классная ! 
--------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт...
PM MAIL   Вверх
iff
Дата 1.11.2011, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 4
Всего: 16



Цитата(Dreamuchiy @  31.10.2011,  23:15 Найти цитируемый пост)
А Z-80 это вещь классная !  

Для своего времени да.


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Dreamuchiy
Дата 3.11.2011, 04:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 26.12.2006

Репутация: нет
Всего: -1



Его и сейчас можно применять и применяют для разных целей
--------------------
Мечтаю написать в карман Биллу Гейтсу... Или как минимум посмотреть крах Майкрософт...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.