Определение типа ПК и версии DOS

Автор работы: Пользователь скрыл имя, 05 Октября 2013 в 10:05, лабораторная работа

Описание работы

Программа должна быть оформлена как загрузочный модуль типа .COM. Программа должна выводить на экран символьный код типа ПЭВМ, номер основной версии (X) и номер модификации (YY) должны выводится в виде десятичного числа в формате X.YY, серийный номер OEM и серийный номер пользователя.

Файлы: 1 файл

os_lab1.doc

— 51.50 Кб (Скачать файл)

Министерство образования  Российской Федерации

Санкт-Петербургский  Государственный Электротехнический Университет имени В.И. Ульянова (Ленина) «ЛЭТИ»

 

Кафедра МОЭВМ


 

 

 

 

 

 

 

 

 

 

Отчет

по лабораторной работе №1

 

Определение типа ПК и версии DOS.

 

 

 

 

 

Преподаватель:      Губкин А.Ф.

Студент гр. 7304:      Монько А.О.

 

 

 

 

 

 

 

 

 

 

Санкт-Петербург

2009

Цель Работы: получение навыков программирования модуля типа .COM и изучения функций, определяющих тип ПК и версию DOS.

 

  1. Постановка задачи

 

Программа должна быть оформлена как загрузочный модуль  типа .COM. Программа должна  выводить  на экран символьный код типа ПЭВМ, номер основной версии (X) и номер модификации (YY) должны выводится в виде десятичного числа в формате X.YY, серийный номер OEM и серийный номер пользователя.

 

  1. Текст программы

___________________________________________________________________________________________________

;-------------

PCInfo segment

;{

assume cs:PCInfo, ds:PCInfo, es:nothing, ss:nothing

org 100h

 

start: jmp short main

 

;тут данные:

DosVerMsg db  'DOS Version: $' 

OemMsg  db  'OEM: $'

SerialMsg db  'Serial Number: $'

IBMPCMsg db 'IBM PC with code: $'

CR_LF  db  0dh,0ah,'$'  ;знак перехода на новую строку

OutBuf  db  32 dup(?)  ;буфер вывода

L dw 32 ;максимальная длина буфера вывода

L_32 dd 32

ver  db  0   ;номер версии X

modif  db  0   ;номер модификации YY

oem db 0 ;номер OEM

serialp1 dw 0 ;серийный номер пользователя

serialp2 dw 0

 

main proc near

;{

.386 ; хотим 32 бита

 

;чтение  номера версии

mov ah,30h

int 21h

mov ver,al

mov modif,ah

mov oem,bh

 

mov al,bl

mov serialp1, ax

mov serialp2, cx

 

call newLine

;вывод сообщения 'DOS Version: '

lea dx, DosVerMsg

call outputDX

 

;преобразование  номера версии в строку

lea bx,OutBuf

mov ah,0

mov al,ver

call BIN_ASCII_32 

;вывод  полученной строки после преобразования

lea dx,[bx]

call outputDX

 

;вывод точки

mov dl,'.'

call outCharDL

 

 

;преобразование номера модификации  в строку

lea bx,OutBuf

mov ah,0

mov al,modif

call BIN_ASCII_32 

;вывод  полученной строки после преобрахования

lea dx,[bx]

call outputDX

 

call newLine

 

;вывод сообщения 'OEM: '

lea dx, OemMsg

call outputDX  

;преобразование  номера OEM в строку

lea bx,OutBuf

mov ah,0

mov al,oem

call BIN_ASCII_32  

;вывод  полученной строки после преобрахования

lea dx,[bx]

call outputDX

 

call newLine

 

;вывод сообщения 'Serial Number: '

lea dx, SerialMsg

call outputDX  

;преобразование  номера SN в строку

lea bx,OutBuf 

mov ax,serialp1

shl eax,16

mov ax,serialp2

call BIN_ASCII_32  

;вывод  полученной строки после преобразования

lea dx,[bx]

call outputDX

 

call newLine

 

;вывод сообщения 'IBM PC with code: '

lea dx, IBMPCMsg

call outputDX  

 

;преобразование  кода IBM PC в шестнадцатиричные симвлы

push ds

mov ax,0F000h

mov ds,ax

mov al,ds:0FFFEh

pop ds ; чтение байта по адресу 0F000h:0FFFEh (там хранится код типа)

call BYTE_TO_HEX

 

mov dl,al

call outCharDL

 

mov dl,ah

call outCharDL

 

call newLine

 

;выход в DOS

mov ah,4Ch

int 21h

;}

main endp

 

 

;-----------------------

outputDX proc near

;{

push ax

mov ah,9

int 21h

pop ax

ret

;}

outputDX endp

;-----------------------

 

 

;-----------------------

outCharDL proc near

;{

push ax

mov ah,2

int 21h

pop ax

ret

;}

outCharDL endp

;-----------------------

 

;-----------------------

newLine proc near

;{

push ax dx

lea dx, CR_LF

mov ah,9

int 21h

pop dx ax

ret

;}

newLine endp

;-----------------------

 

;-----------------------

BIN_ASCII_32 proc near

;{

push edx esi eax

mov cx,L

 

;очистка  буфера вывода(заполнение пробелами)

Clear_Buf_32:

;{

mov byte ptr [bx],' '

inc bx ; сдвигаем указатель буфера вправо

loop Clear_Buf_32

;}

 

 

dec bx

mov byte ptr [bx],'$'

inc cx

 

mov esi,10

 

NextNum_32:

;{

xor edx,edx

div esi  ;делим частное на 10

add edx,'0' ;остаток от деления преобразуем в символ

dec bx  ;двигаем указатель на буфер влево (ближе к началу)

mov byte ptr [bx],dl ;заносим полученный  символ в буфер

inc cx  ;увеличиваем счетчик кол-ва символов

or eax,eax ;частное = 0 ?

jnz NextNum_32 ;нет - продолжаем делить

;}

 

Exit_32:

;{

pop eax esi edx ; восстанавливаем исходные значения из стэка

ret

;}

;}

BIN_ASCII_32 endp

;-----------------------

 

;-----------------------

TETR_TO_HEX   PROC  near

;{

and AL,0Fh

cmp AL,09

jbe NEXT

add AL,07

NEXT: add AL,30h

            ret         

;}

TETR_TO_HEX ENDP

;-----------------------

 

 

;-----------------------

BYTE_TO_HEX   PROC  near

;{

; байт в AL переводится в два символа шестн. числа в AX

       push CX

       mov AH,AL

       call TETR_TO_HEX

       xchg AL,AH

       mov CL,4

       shr AL,CL

       call TETR_TO_HEX ;в AL старшая цифра

       pop CX          ;в AH младшая

       ret

;}

BYTE_TO_HEX  ENDP

;-----------------------

  

;}

PCInfo ends

;-------------

 

end start ;конец программы  с точкой входа start

___________________________________________________________________________________________________

 

  1. Результат работы программы

 

 

DOS Version: 5.0

OEM: 255

Serial Number: 1193046

IBM PC with code: FC

 

 

 


 

 

 

 

 


Информация о работе Определение типа ПК и версии DOS