| 网站首页 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛 |
 
| 技术教程首页 | 开发语言 | WEB开发 | .NET技术 | 数据库 | 操作系统 | 网页制作 |
 
 
您现在的位置: 编程中国 >> 技术教程 >> 开发语言 >> 汇编 >> 汇编源码 >> 正文
  ►  汇编源码--BURNOUT
汇编源码--BURNOUT
作者:佚名    阅读人次:……    文章来源:未知    发布时间:2006-1-31    网友评论()条
 
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


 

 
文章录入:静夜思    责任编辑:静夜思 
  • 上一篇文章:

  • 下一篇文章:

  •  
    相关文章
    原创地带
    24小时热门帖子