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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2010, 16:08   #1
DirtyBASS
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 10
По умолчанию Тестирование проги и доработка

Здравствуйте, вот код -
Код:
.model small 							; директива определения модели памяти программы
.stack 100    							; директива определения стека программы
.386
.data
								;ссобщения, ипользующиеся в программе
 NUMBER         db 'Chislo, poluchenoe iz porta 60','$'
 DISKS          db 'Chislo NGMD nakopitelei v sisteme: ','$'
 FLOPPY_PRESENT db 'NGMD prisutstvuet: ','$'
 YES db 'Yes','$'
 NO  db 'No ','$'
 MODE_MSG   db 'Videomode: ','$'
 MODE1      db '40x25 color','$'
 MODE2      db '80x25 color','$'
 MODE3      db '80x25 monochrome','$'
.code
include ioeasy.asm

.startup
   in   AL,61H          						;получаем значение из порта B
   or   AL,10000000B   						;устанавливаем бит 7 в 1
   out  61H,AL          						;заменяем байт
   in   AL,60H          						;получаем значение из порта A
   mov  DX, OFFSET NUMBER 					;выводим на экран сообщение о полученном числе
   OutStr	
   NewLine
   OutBH AL            						;и само число
   NewLine
   mov  DX, OFFSET FLOPPY_PRESENT 				;выводим сообщение про флоппи-дисковод
   OutStr
   NewLine
   xor  BX,BX                   						;обнуляем ВХ
   mov  BL, AL               						;Помещаем в BL прочитанное число, потому что в дальнейшем будем его модифицировать
   bt   BX,0							;Проверяем, равен ли 0-й бит единице
   jnc  NO_FLOPPY              						;если он равен 0, выводим сообщение о том, что дисковод отсутствует
   mov  DX, OFFSET YES          					;иначе, дисковод есть, выводим сообщение об этом
   jmp PRINT_FLOPPY
NO_FLOPPY:
   mov  DX, OFFSET NO
PRINT_FLOPPY:
   OutStr
   NewLine
   mov  dx, offset MODE_MSG 					;выводим сообщение о видео режиме
   OutStr
   shr  BL,4    							;сдвигаем 4-5 биты на 4 позиции
   and  BL,11B  							;обнуляем остальные биты логическим И
			   					; выводим тип видорежима
   cmp BL,01B  							; 01 - 40х25 цветной
   je  COLOR_40
   cmp BL,10B  							; 10 - 80х25 цветной
   je  COLOR_80
   cmp BL,11B  							; 11 - 80х25 монохромный
   je  MONO
COLOR_40:
   mov DX, offset MODE1
   jmp PRINT_MODE
COLOR_80:
   mov DX, offset MODE2
   jmp PRINT_MODE
MONO: 
   mov DX, offset MODE3
   jmp PRINT_MODE
PRINT_MODE:
   OutStr               
   NewLine
   shr  AL,6           							;сдвигаем биты на 6 позиций вправо, тк нас интересуют 6-7 биты
   INC  AL              							;начинаем счет с 1, а не с 0
   mov  DX, offset DISKS						;выводим сообщение о количестве дисков
   OutStr
   OutBDP AL							;выводим количество жестких дисков
   IN   AL,61H          						;подготовка к восстановлению порта B
   AND  AL,01111111B    						;сбрасываем бит 7
   OUT  61H,AL         						;восстанавливаем байт

.exit 0
end
Здесь осуществляется определение наличия флоппи-диска (или дискеты в флоппике - хз). У меня флоппика нет, поэтому пишет NO.
Определяется тип видеорежима, а также кол-во НЖМД. У меня 2 харддиска, но программа пишет "1".
Протестите пожалуйста, у кого есть флоппик и более одного жесткого диска. Сделано по Джордейну.
Ну и прошу помочь с тем, чтобы программка заработала верно.
DirtyBASS вне форума Ответить с цитированием
Старый 27.05.2010, 18:54   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

in, out под виндой не заработает в юзермоде.
p51x вне форума Ответить с цитированием
Старый 27.05.2010, 20:08   #3
DirtyBASS
Пользователь
 
Регистрация: 15.09.2009
Сообщений: 10
По умолчанию

не особо понимаю о чём Вы,
я компилирую и запускаю в cmd.exe с помощью tasm.exe и tlink.exe
DirtyBASS вне форума Ответить с цитированием
Старый 28.05.2010, 12:28   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

DirtyBASS
p51x верно заметил, под Windows ваша DOS-программа отработает под DOS-эмулятором и не факт, что значения, которые вы якобы прочитаете из 60h и 61h портов будут соответствовать действительности. Для запуска подобных программ нужно грузиться с дискеты, на которой установлен DOS. А для чтения портов ввода\вывода под Windows нужно писать драйвер
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Две проги. Порезка труб и движения коня по шахматной доске. По какому принципу работают такие проги? sadf Общие вопросы C/C++ 4 06.03.2010 20:04
Тестирование Panik666 Фриланс 8 26.01.2010 21:54
Доработка A93 Общие вопросы C/C++ 4 28.11.2009 13:29