Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Eugene1222
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 44
1

Вывод версии DOS

10.11.2019, 20:16. Просмотров 1602. Ответов 9

Есть функция 3306 в прерывании 21h, которая возвращает данные, пример которых указан во вложении.
Как возможно возвращаемые значения вывести в консоль?

Assembler
1
2
3
4
5
6
7
org 100h
 
mov ax, 3306
int 21h
 
mov ah, 4Ch
int 21h
0
Миниатюры
Вывод версии DOS  
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2019, 20:16
Ответы с готовыми решениями:

Выведите на ASCII символы в расширенной версии DOS
В лабораторной такой вопрос: • выведите на ASCII символы в расширенной версии DOS Как это сделать,...

9

ФедосеевПавел
Модератор
4732 / 2633 / 1051
Регистрация: 01.02.2015
Сообщений: 8,616
Записей в блоге: 1
10.11.2019, 20:29 2
Воспользуйтесь процедурой OutInt или любой другой из темы
Ввод и вывод чисел в различных системах счисления

Добавлено через 3 минуты
А вы уверены в правильности функции сервиса DOS - ax=3306?
Я в справочнике вижу другой смысл этой функции - не номер версии DOS.
0
Eugene1222
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 44
10.11.2019, 20:32  [ТС] 3
В правильности я явно не уверен.
Просто было дано задание - реализовать вывод версии DOS и так же дали "наводку" на 3306h, по этому, его и пытаюсь использовать.

Так же, вырезка с одного сайта : "Как же получить правильный номер версии MS-DOS? Для этого необходимо использовать функцию 3306h прерывания INT 21h"
0
ФедосеевПавел
Модератор
4732 / 2633 / 1051
Регистрация: 01.02.2015
Сообщений: 8,616
Записей в блоге: 1
10.11.2019, 20:44 4
Лучший ответ Сообщение было отмечено Eugene1222 как решение

Решение

Какого сайта?

Я использую
http://www.codenet.ru/progr/dos/int_0026.php
http://www.ctyme.com/intr/int-21.htm

Добавлено через 2 минуты
Увидел
DOS 5+ - GET TRUE VERSION NUMBER
AX = 3306h

Return:
BL = major version
BH = minor version
DL = revision (bits 2-0, all others 0)
DH = version flags

bit 3:
DOS is in ROM

bit 4:
DOS is in HMA.
AL = FFh if true DOS version < 5.0
Используйте лучше ah=30h.

Добавлено через 5 минут
Вывод старшей части. Младшую выведете по аналогии.
Там еще и другие версии вывода есть - изучайте, разбирайтесь.
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
.model tiny
 
.code
 
        org     100h
main    proc
 
        jmp     start
 
        ;Данные
        DOSVer  dw      ?
start:
 
        mov     ah,     30h
        int     21h
        mov     [DOSVer],       ax
        mov     ah,     0
        call    OutInt
        mov     ah,     02h
        mov     dl,     '.'
        int     21h
        ;завершение программы
        int     20h
main    endp
 
OutInt proc
    aam
    add ax,3030h
    mov dl,ah
    mov dh,al
    mov ah,02
    int 21h
    mov dl,dh
    int 21h
    ret
OutInt endp
 
end     main
1
10.11.2019, 20:44
Eugene1222
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 44
10.11.2019, 20:54  [ТС] 5
Малость оффтопа. Как возможно удалить это сообщение? Т.к. задавал вопрос и лишь после его отправки увидел ваш обновлённый ответ.
0
ФедосеевПавел
Модератор
4732 / 2633 / 1051
Регистрация: 01.02.2015
Сообщений: 8,616
Записей в блоге: 1
10.11.2019, 21:03 6
Никак. Об этом в Правилах.
0
Eugene1222
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 44
10.11.2019, 21:03  [ТС] 7
При попытке компиляции вашего кода появляются следующие ошибки :
Это из-за отличия компиляторов? (nasm в моём случае)
0
Миниатюры
Вывод версии DOS  
ФедосеевПавел
Модератор
4732 / 2633 / 1051
Регистрация: 01.02.2015
Сообщений: 8,616
Записей в блоге: 1
10.11.2019, 21:44 8
Лучший ответ Сообщение было отмечено Eugene1222 как решение

Решение

Я привёл исходник для tasm - его синтаксис отличается, но инструкции процессора те же самые. Переделывайте.

Добавлено через 2 минуты
А содержимое консоли вы можете копировать? Чтобы вместо скриншота прикладывать.
Правая кнопка мыши по верхней рамке консоли, во всплывшем меню - "Изменить" - "Выделить всё", а потом аналогично "Копировать".

Добавлено через 32 минуты
Для nasm
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
        org     100h
 
        jmp     start
 
        ;Данные
        DOSVer  dw      0
start:
 
        mov     ah,     30h
        int     21h
        mov     [DOSVer],       ax
        mov     ah,     0
        call    OutInt
        mov     ah,     02h
        mov     dl,     '.'
        int     21h
        call    OutInt
        ;завершение программы
        int     20h
 
OutInt:
    aam
    add ax,3030h
    mov dl,ah
    mov dh,al
    mov ah,02
    int 21h
    mov dl,dh
    int 21h
    ret
0
Eugene1222
0 / 0 / 0
Регистрация: 22.01.2017
Сообщений: 44
10.11.2019, 21:56  [ТС] 9
Извиняюсь что не отвечал, просто как раз погрузился в разбор вашего кода из первого ответа. Спасибо огромное за помощь.
0
ФедосеевПавел
Модератор
4732 / 2633 / 1051
Регистрация: 01.02.2015
Сообщений: 8,616
Записей в блоге: 1
10.11.2019, 22:03 10
Я не полное решение привел - из двух частей (версия и подверсия) вывожу только версию. Подверсию выведете по аналогии - она вместе с версией уже сохранена в переменной DOSVer.
0
10.11.2019, 22:03
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2019, 22:03

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

Или воспользуйтесь поиском по форуму:

10
Ответ Создать тему
Опции темы

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