Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 04.02.2019
Сообщений: 23
TASM

Как можно вывести строку на принтер?

14.05.2020, 01:43. Показов 3274. Ответов 3

Студворк — интернет-сервис помощи студентам
Мне нужно доделать задание, в котором по итогу полученная строка выводится не на экран, а на принтер. Объясните, пожалуйста, как это возможно. То есть я скомпилирую программу, запущу экзешник и принтер отреагирует? Звучит как фантастика. Или это правда так? Помогите, пожалуйста, уже форумы обошла, книгу Абеля по этой теме читала, но ничего реально работающего не выходит. Задание нужно сдать срочно, помогите, люди добрые.

Задание: Составить программу для ввода с клавиатуры строки символов. Записать строку в буфер buf и организовать вывод строки на принтер в обратном порядке. Программа должна работать под управлением MS DOS.

Пока есть только с выводом на экран:

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
.model small
.stack
.data
 
mess0   DB  13,10,' ENTER STRING  : $'
mess1   DB  13,10,' REVERSE STRING: $'
 
buf     DB 20,0,20 DUP (?)       ; буфер для сохранения ввода
 
.code
start:
 mov   ax,@data
 mov   ds,ax
 
 MOV   AH,9               ; запрос на ввод строки
 MOV   DX,offset mess0
 INT   21h
 MOV   AH,0Ah             ; читаем ввод до клавиши ENTER..
 MOV   DX, offset buf             ; ^^.. и сохраняем его в буфере
 INT   21h
 MOV   AH,9               ; подготовка к выводу строки
 MOV   DX,offset mess1
 INT   21h
 
 ;======== вывод зеркальной строки на экран
 XOR   CX,CX              ; вычисляем длину строки в буфере
 MOV   CL,BYTE PTR[buf+1]     ; CX = длинна строки
 MOV   SI,offset buf+1           ; SI = смещение строки в буфере
 ADD   SI,CX              ; SI = строка+длинна (конец строки)
 
 STD                      ; DF = 1 (флаг направления = обратный)
print:
 LODSB                    ; считать символ из буфера
 INT   29h                ; вывести его на экран
 LOOP  print              ; промотать цикл СХ-раз...
 
mov ax,4C00h        ;
int 21h     ;
end start
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2020, 01:43
Ответы с готовыми решениями:

Как можно убрать символы с экрана, или вывести пустую строку
Почему-то в случае отправки пустых строк из name, text Notice: Undefined index появляется, но это ладно, и вот это "- / "...

Как строку отправить на принтер
Предположим у меня есть набор строк S1, S2, ... , Sn, как их отправить на печать? Какие библиотеки и функции для этого нужно использовать?

Вывести сообщение "Можно", если из букв введенной строки X можно составить введенную строку Y
Не могу понять самой сути задания. Вывести сообщение "Можно", если из букв введенной строки X можно составить введенную строку Y,при...

3
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
14.05.2020, 05:08
Лучший ответ Сообщение было отмечено politoto как решение

Решение

Цитата Сообщение от Kate9399 Посмотреть сообщение
То есть я скомпилирую программу, запущу экзешник и принтер отреагирует? Звучит как фантастика. Или это правда так?
Да ничего фантастического. Когда-то именно так и делали. С настоящими трушными принтерами, которые подключались к компьютеру через LPT-порт.
А сейчас принтера подключаются через USB и с ними работает Винда через дрова. Чтобы из MS-DOS-овской программы печатать надо танцы с бубном танцевать. В Яндекс-поисковике набираешь "печать на USB принтер под ms-dos" и читаешь про бубны разных размеров.

Добавлено через 3 минуты
Сначала надо добиться, чтобы команда в командной строке
copy имя_текстового_файла PRN
приводила к печати этого файла. Если это будет, то и прога заработает.

А с прогой вроде как просто. В ней надо открыть устройство PRN как файл, записать в него текст для распечатывания и закрыть. Только как ее отладить не нашаманив чтобы реально работал принтер из под DOSBOX, хотя бы.
А то вон еще в 2007-м писали :
Информацию получил из первых рук. Первее некуда: из техподдержки HP:
Выпуск принтеров с официальной поддержкой печати в DOS прекращена! Печать в DOS на лазерных USB принтерах HP
Для младших моделей это принтер HP LaserJet 1015. Для старших — HP LaserJet 3210 соответственно.

Т.е. еще и от принтера зависит. Или надо комп постарее и принтер потрушнее. Или бубны, причем не факт.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
14.05.2020, 05:53
Лучший ответ Сообщение было отмечено politoto как решение

Решение

Не по теме:

Цитата Сообщение от Ethereal Посмотреть сообщение
С настоящими трушными принтерами, которые подключались к компьютеру через LPT-порт.
А то и через COM :swoon:


Можно ещё попытаться воспользоваться старинными функциями a la CP/M, посимвольно
Assembler
1
2
3
mov AH, 5
mov DL, al ; или '!'
int 21h
http://www.ctyme.com/intr/rb-2557.htm
Важно не забыть возвращать каретку и проматывать бумагу на новую строку!
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8657 / 4491 / 1670
Регистрация: 01.02.2015
Сообщений: 13,899
Записей в блоге: 12
14.05.2020, 09:08
Лучший ответ Сообщение было отмечено politoto как решение

Решение

Видя множество задач на особенности DOS (резиденты, универсальный исходник COM и EXE, вызов оверлея и прочие чудеса), предполагаю, что вывод на принтер нужно сделать через прерывание int 17h - и безразлично, будет реальная печать или нет.
http://www.codenet.ru/progr/dos/int_0016.php

Или же воспользоваться посимвольным выводом на печать, как предлагает politoto.

Т.е. просто заменяете вывод символа на экран (int 29h) выводом на принтер
Assembler
1
2
3
mov ah, 05h
mov dl, al
int 21h
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.05.2020, 09:08
Помогаю со студенческими работами здесь

Как вывести на принтер картинку?
Необходимо вывести на печать картинку. Пишу в MFC. Облазил все , нечего конкретного не нашел. Пожалуйста, подскажите как это можно сделать,...

Если C изображает цифру, то вывести строку «digit», если латинскую букву — вывести строку «lat», если русскую — вывести строку «rus»
Доброй ночи всем программерам, примитивная задачка, но в стрингах я не шарю, помогите плиз... String6. Дан символ C, изображающий цифру...

Как вывести все содержимое формы на принтер?
Kak vivesti vse soderjimoe formi na printer?

Как текстовый файл вывести на определённый принтер?
Как текстовый файл вывести на определённый принтер, и по возможности задать какие либо настройки. К примеру на сколько страниц печать. ...

Как вывести содержимое всего файла на экран, принтер, файл?
В книгах уйма информации, я уже не могу ее переваривать. А практику сдавть нужно завтра. Помогите если не сложно.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru