Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
rock12
0 / 0 / 0
Регистрация: 17.10.2012
Сообщений: 2
#1

Работа с битами. Если принтер присоединен и занят, вывести сообщение об этом - Assembler

25.03.2014, 16:01. Просмотров 389. Ответов 1
Метки нет (Все метки)

Дан байт статуса принтера. Назначение разрядов:
Бит 0 – таймаут.
Бит 1,2 - не используется.
Бит 3 - ошибка ввода-вывода.
Бит 4-режим OffLine / ONLINE (00Н означает OffLine).
Бит 5 - нет бумаги.
Бит 6 - подтверждение (40Н - присоединен).
Бит 7 - не знят (0 - означает занятость.
Если принтер присоединен и зайнят, вывести сообщение об этом и запрос необходимости продолжения работы. В случае подтверждения продолжения, повторить проверку бита занятости. Если снова занят, установить в 1 биты ошибки и таймаута.

код написал, но программа виснет после ввода любого числа
не пойму в чем ошибка
этот же код работает у друга

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
.586;
.MODEL flat, stdcall;
OPTION CASEMAP:NONE;
include \masm32\macros\macros.asm;
include \masm32\include\kernel32.inc;
include \masm32\include\masm32.inc;
include \masm32\include\user32.inc;
include \masm32\include\msvcrt.inc;
 
includeLib \masm32\lib\kernel32.lib;
includeLib \masm32\lib\masm32.lib;
includeLib \masm32\lib\user32.lib;
includeLib \masm32\lib\msvcrt.lib;
.DATA;
 
.DATA?
buf DB 100 DUP (?);
Msg1 DB 100 DUP(?)
X   DW  ?
Check DW ?
.STACK 4096
.CODE
Start:
mov Check,3
rewrite:
 
XOR EAX, EAX
invoke wsprintf, offset buf, chr$("Enter printer status = ")
Invoke CharToOem,ADDR buf,ADDR Msg1    
Invoke StdOut,ADDR Msg1
Invoke StdIn,ADDR Msg1,LengthOf Msg1
invoke crt_atoi,ADDR Msg1
mov X,AX
 
 
bt   Ax,7 
jc   ready    
invoke wsprintf, offset buf, chr$("Printer is busy")
Invoke CharToOem,ADDR buf,ADDR Msg1    
Invoke StdOut,ADDR Msg1
 
cmp Check,3
Je first
OR X,00001001B
jmp finish
first:
 
invoke wsprintf, offset buf, chr$("Do you want retry?(1-yes, 0-no) ")
Invoke CharToOem,ADDR buf,ADDR Msg1    
Invoke StdOut,ADDR Msg1
Invoke StdIn,ADDR Msg1,LengthOf Msg1
invoke crt_atoi,ADDR Msg1
 
mov Check,Ax
cmp Ax,1
je rewrite
jmp finish
 
 
ready:
invoke wsprintf, offset buf, chr$("Printer is ready ")
Invoke CharToOem,ADDR buf,ADDR Msg1    
Invoke StdOut,ADDR Msg1
jmp finish
 
finish:
mov Ax,X
invoke wsprintf, offset Msg1, chr$("Result X = %d"), Ax
Invoke CharToOem,ADDR Msg1,ADDR buf 
Invoke StdOut,ADDR buf ; ????? ????????? ?????? ? ???????
Invoke StdIn, ADDR buf, 2
 
Invoke ExitProcess,0;
END Start;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2014, 16:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Работа с битами. Если принтер присоединен и занят, вывести сообщение об этом (Assembler):

Если a>b, то вывести дату рождения, если a=b, то вывести ФИО, если a<b, то вывести количество пальцев на руке
Добрый день, подскажите пожалуйста, что не так, ломаю голову не один час, а...

Даны числа a, b, c. Если все они равны нулю, вывести об этом сообщение, если среди чисел нет нулей, найти и вывести их произведение, в противном случа
Всем привет. Будьте добры, подсобите в написании программки: &quot;Даны числа a,...

Вывести позицию последнего вхождения заданной подстроки. Если подстрока отсутствует в строке, вывести сообщение об этом
Помогите пожалуйста.Не понимаю вообще что нужно сделать. вот условие:...

Если число не является степенью числа 2, то вывести об этом сообщение
Дано целое число N больше 0, являющееся степенью числа 2, F=2 в степени k....

Одинаковые с последним символы вывести на экран, а если таких нет, то выдать об этом сообщение
14.1 Написать программу, заносящую в файл 14 символов, введенных с...

Дана последовательность из n целых чисел. Определить количество нулей, если их нет, вывести сообщение об этом
Необходимо написать 2 кода. 1 с использованием цикла While. 2 с использованием...

1
Mikl___
Автор FAQ
11362 / 5905 / 533
Регистрация: 11.11.2010
Сообщений: 10,931
27.03.2014, 06:07 #2
rock12,
а с какой целью делается зарос "Enter printer status = "?Его же программа должна определить? Зачем мне этот статус вводить? Нажимаю "Enter" -- программа выдает "Printer is busy", если нажму на цифру выпадаю из программы
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.03.2014, 06:07
Привет! Вот еще темы с решениями:

Выяснить, имеется ли в строке пара соседствующих букв НО или ОН, если нет, то вывести на экран сообщение об этом
Выяснить имеется ли в строке пара соседствующих букв НО или ОН, если нет, то...

Дан массив NxN Обнулить элементы его центральной строки и столбца. если нет такого, то вывести сообщение об этом
Дан массив NxN Обнулить элементы его центральной строки и столбца. если нет...

Вычыслить количество слов в строке, длинна которых равна 3 символам и вывести их на экран, если же таких слов нет, то выдать об этом сообщение.
Вычыслить количество слов в строке, длинна которых равна 3 символам и вывести...

Сообщение если нет бумаги или не подключен принтер.
1)У меня стоит макрос на кнопочке для печати все работает (печатает) но мне еще...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru