Advertisement
Guest User

Untitled

a guest
Feb 24th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. TESTPC     SEGMENT
  2.            ASSUME  CS:TESTPC, DS:TESTPC, ES:NOTHING, SS:NOTHING
  3.            org 100h
  4. START:     JMP     BEGIN
  5. ; ДАННЫЕ
  6. VERSION db "OS version:  $"
  7. MODIFICATION db 13, 10, "Modification number:  $"
  8. SERIAL db 13, 10, "Serial number:       $" ; 16 symbols
  9. OEM db 13, 10, "OEM:     $"; 6 sybmols
  10.  
  11. TYPEPCSTRING db 13, 10, "PC type: $"
  12. TYPEPC db "PC$"
  13. TYPEPCXT db "PC/XT$"
  14. TYPEAT db "AT$"
  15. TYPEPS2M30 db "PS2 (30 model)$"
  16. TYPEPS2M5060 db "PS2 (50 or 60 model)$"
  17. TYPEPS2M80 db "PS2 (80 model)$"
  18. TYPEPCJR db "PC jr$"
  19. TYPEPCCONV db "PC Convertible$"
  20.  
  21. ;ПРОЦЕДУРЫ
  22. ;-------------------------------
  23. WRITE PROC near
  24.     push ax
  25.     mov ah, 09h
  26.     int 21h
  27.     pop ax
  28.     ret
  29. WRITE ENDP
  30. ;-------------------------------
  31. OSVER PROC near
  32.     mov ah, 30h
  33.     int 21h
  34.     ; al - version number
  35.     ; ah - modification number
  36.     ; bh - OEM serial number
  37.     ; bl:cx - user serial number
  38.     push ax
  39.    
  40.     mov si, offset VERSION
  41.     add si, 12
  42.     call BYTE_TO_DEC
  43.     mov dx, offset VERSION
  44.     call WRITE
  45.    
  46.     mov si, offset MODIFICATION
  47.     add si, 23
  48.     pop ax
  49.     mov al, ah
  50.     call BYTE_TO_DEC
  51.     mov dx, offset MODIFICATION
  52.     call WRITE
  53.    
  54.     mov si, offset OEM
  55.     add si, 9
  56.     mov al, bh
  57.     call BYTE_TO_DEC
  58.     mov dx, offset OEM
  59.     call WRITE
  60.    
  61.     mov di, offset SERIAL
  62.     add di, 22
  63.     mov ax, cx
  64.     call WRD_TO_HEX
  65.     mov al, bl
  66.     call BYTE_TO_HEX
  67.     sub di, 2
  68.     mov [di], ax
  69.     mov dx, offset SERIAL
  70.     call WRITE
  71.     ret
  72. OSVER ENDP
  73. ;-------------------------------
  74. PCTYPE PROC near
  75.     mov ax, 0f000h
  76.     mov es, ax
  77.     mov al, es:[0fffeh]
  78.     mov dx, offset TYPEPCSTRING
  79.     call WRITE
  80.     cmp al, 0ffh
  81.     jz pc
  82.     cmp al, 0feh
  83.     jz pcxt
  84.     cmp al, 0fbh
  85.     jz pcxt
  86.     cmp al, 0fch
  87.     jz pcat
  88.     cmp al, 0fah
  89.     jz pcps2m30
  90.     cmp al, 0f8h
  91.     jz pcps2m80
  92.     cmp al, 0fdh
  93.     jz pcjr
  94.     cmp al, 0f9h
  95.     jz pcconv
  96.     pc:
  97.         mov dx, offset TYPEPC
  98.         jmp writestring
  99.     pcxt:
  100.         mov dx, offset TYPEPCXT
  101.         jmp writestring
  102.     pcat:
  103.         mov dx, offset TYPEAT
  104.         jmp writestring
  105.     pcps2m30:
  106.         mov dx, offset TYPEPS2M30
  107.         jmp writestring
  108.     pcps2m5060:
  109.         mov dx, offset TYPEPS2M5060
  110.         jmp writestring
  111.     pcps2m80:
  112.         mov dx, offset TYPEPS2M80
  113.         jmp writestring
  114.     pcjr:
  115.         mov dx, offset TYPEPCJR
  116.         jmp writestring
  117.     pcconv:
  118.         mov dx, offset TYPEPCCONV
  119.         jmp writestring
  120.     writestring:
  121.         call WRITE
  122.     ret
  123. PCTYPE ENDP
  124. ;-------------------------------
  125. TETR_TO_HEX   PROC  near
  126.            and      AL,0Fh
  127.            cmp      AL,09
  128.            jbe      NEXT
  129.            add      AL,07
  130. NEXT:      add      AL,30h
  131.            ret
  132. TETR_TO_HEX   ENDP
  133. ;-------------------------------
  134. BYTE_TO_HEX   PROC  near
  135. ; байт в AL переводится в два символа шестн. числа в AX
  136.            push     CX
  137.            mov      AH,AL
  138.            call     TETR_TO_HEX
  139.            xchg     AL,AH
  140.            mov      CL,4
  141.            shr      AL,CL
  142.            call     TETR_TO_HEX ;в AL старшая цифра
  143.            pop      CX          ;в AH младшая
  144.            ret
  145. BYTE_TO_HEX  ENDP
  146. ;-------------------------------
  147. WRD_TO_HEX   PROC  near
  148. ;перевод в 16 с/с 16-ти разрядного числа
  149. ; в AX - число, DI - адрес последнего символа
  150.            push     BX
  151.            mov      BH,AH
  152.            call     BYTE_TO_HEX
  153.            mov      [DI],AH
  154.            dec      DI
  155.            mov      [DI],AL
  156.            dec      DI
  157.            mov      AL,BH
  158.            call     BYTE_TO_HEX
  159.            mov      [DI],AH
  160.            dec      DI
  161.            mov      [DI],AL
  162.            pop      BX
  163.            ret
  164. WRD_TO_HEX ENDP
  165. ;--------------------------------------------------
  166. BYTE_TO_DEC   PROC  near
  167. ; перевод в 10с/с, SI - адрес поля младшей цифры
  168.            push     CX
  169.            push     DX
  170.            xor      AH,AH
  171.            xor      DX,DX
  172.            mov      CX,10
  173. loop_bd:   div      CX
  174.            or       DL,30h
  175.            mov      [SI],DL
  176.            dec      si
  177.            xor      DX,DX
  178.            cmp      AX,10
  179.            jae      loop_bd
  180.            cmp      AL,00h
  181.            je       end_l
  182.            or       AL,30h
  183.            mov      [SI],AL
  184.            
  185. end_l:     pop      DX
  186.            pop      CX
  187.            ret
  188. BYTE_TO_DEC    ENDP
  189. ;-------------------------------
  190. ; КОД
  191. BEGIN:
  192.            call OSVER
  193.            call PCTYPE
  194.            mov ah, 10h
  195.            int 16h
  196. ; Выход в DOS
  197.            xor     AL,AL
  198.            mov     AH,4Ch
  199.            int     21H
  200.            
  201. TESTPC    ENDS
  202. END       START     ;конец модуля, START - точка входа
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement