程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 匯編語言 >> 匯編源碼系列之burnout

匯編源碼系列之burnout

編輯:匯編語言

這個都是過去DOS時代的匯編源碼,雖然已經過去了,但是對於學習匯編還是有幫助的,匯編語言只是程序員一門基礎語言,大多人掌握即可,不一定要深入研究.......

COMMENT *
 Demo (and semi-useful) program to read/set burnout device parameters.
 Usage: burnout [ticks] [C+-] [V+-] [H+-]
 Parameters can be separated by almost anything.
 With no parameters, program simply returns current status.
 Examples:
  burnout 5000        (sets time to 5000 ticks)
  burnout 5000H+       (time=5000, use hardware blanking)
  burnout 5000,h+       (ditto, separators don't matter)
  burnout c+h-v+       (continuous clear, software, monitor video)
  burnout /C+ /H- /V+     (ditto)
  burnout           (return status only)
 Assembly/link:
  masm burnout;
  link burnout; (ignore NO STACK warning message)
  exe2bin burnout burnout.com
 By CJDunford 20-Mar-1985
   Compuserve 76703,2002
======================================================================
*
stdout equ 1              ; DOS output files
stderr equ 2
; ----- General equates
DOS     equ 21H           ; DOS interrupt
TERMINATE  equ 20H           ; Exit to DOS
PRINT    equ 09H           ; DOS "print" string to stdout
FOPEN    equ 3D02H          ; DOS file open, read/write
FREAD    equ 3FH           ; DOS file read
FWRITE   equ 40H           ; DOS file write
CR     equ 13           ; ASCII carriage return
LF     equ 10           ; ASCII line fine
code segment
assume cs:code,ds:code
org 80H                 ; Parm storage area in PSP
ParmLength label byte          ; Length of parms
org 81H
Parameters label byte          ; Start of parms
org 100H                ; Org for .COM
main proc far
    jmp start            ; Hate to execute data
DevName     db 'BRNDEV',0      ; Burnout device name
handle     dw ?          ; Storage for handle
Flush      db '@'         ; Char to flush device I/O
Execute     db '#'         ; Char to execute device commands
NotInstalled  db 'Burnout device is not installed',13,10
NotInstalledL  equ $ - NotInstalled
Status     db 'Current status: '  ; Status message
StatInsert   db 40 dup (?)      ; brndev will store status here
; ----- Open the device
start:
    mov dx,offset DevName      ; DS:DX => device name
    mov ax,FOPEN
    int DOS
    jnc A1             ; Continue if no error
    mov bx,stderr          ; Message to stderr
    mov cx,NotInstalledL
    mov dx,offset NotInstalled
    mov ah,FWRITE
    int DOS
    jmp exit
; ----- Flush any pending I/O to/from the device
A1:
    mov handle,ax          ; Save device handle
    mov dx,offset Flush       ; Point to the "@"
    mov cx,1            ; Writing one byte
    mov bx,handle          ; Device handle
    mov ah,FWRITE          ; Write "@" to device
    int DOS
; ----- Send and execute parameters if present
    mov cl,ParmLength        ; Parm length to CL
    or cl,cl            ; Any parms present?
    jz A2              ; Skip if not
    xor ch,ch            ; CX = parm length
    mov dx,offset Parameters    ; DS:DX => parms
    mov bx,handle          ; BX = device handle
    mov ah,FWRITE          ; Write parms to device
    int DOS
    mov dx,offset Execute      ; Execute the parms
    mov cx,1            ; Writing one byte
    mov bx,handle          ; Device handle
    mov ah,FWRITE          ; Write "#" to device
    int DOS
; ----- Get and display device status
A2:
    mov dx,offset StatInsert    ; DS:DX => where to put status
    mov cx,0FFH           ; Ask for lots of data; DOS will ...
                    ; ... fetch only until CR found.
    mov bx,handle          ; Device handle
    mov ah,FREAD          ; Read device info
    int DOS
    mov cx,ax            ; CX = actual # bytes read
    mov di,offset StatInsert    ; Where the stat data is stored
    add di,cx            ; Add length of input read
    mov al,CR            ; Store a CR/LF/'$' at end
    cld
    stosb
    mov al,LF
    stosb
    mov al,'$'
    stosb
    mov dx,offset Status      ; Write status to stdout
    mov ah,PRINT
    int DOS
exit:
    int TERMINATE          ; Exit to DOS
main endp
code ends
end main


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved