WEB开发网
开发学院软件开发汇编语言 汇编源码系列之comint 阅读

汇编源码系列之comint

 2008-04-29 09:33:49 来源:WEB开发网   
核心提示:这个都是过去DOS时代的汇编源码,虽然已经过去了,汇编源码系列之comint,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究.......

;
;  Serial communications port interupt intercepter    AHA 8502.27
;
;  Functions:
;  al=0 then Disable communications interupt vector
;  al=1 then Enable communications interupt vector
;  Issue and int 44h
;
progseg segment para public 'CODE'
  public  setcom
  assume  cs:progseg, ds:progseg, es:progseg
  org  100h
doscall equ  21h
;
startup proc  far
  jmp  setup
;
setcom  proc  far
  push  ds
  push  es
  push  dx
  push  ax
  mov  ax,cs
  mov  ds,ax
  mov  es,ax
  pop  ax
  cmp  al,1    ;is function 1
  jz  enable    ;then enable
;
disable:
  mov  dx,offset interupt ;get new vector address
  mov  ax,cs
  mov  ds,ax    ;set segment
  mov  ah,25h    ;set interupt vector address function
  mov  al,14h    ;communications interupt vector
  int  doscall   ;set the interupt
  jmp  exit    ;exit
enable:
  mov  dx,word ptr vector   ;set old segment
  mov  ds,vector+2  ;set old communications vector
  mov  ah,25h    ;set interupt vector address function
  mov  al,14h    ;communications interupt vector
  int  doscall
exit:
  pop  dx
  pop  es
  pop  ds
;
interupt    proc  far
  sub  ax,ax    ;zero return status
  iret
interupt    endp
setcom  endp
;
msg  db  'Serial communications intercepter installed',0ah,0dh,'$'
msg1  db  'Serial communications intercepter is already installed',0ah,0dh,'$'
vector  db  8 dup(0)  ;only 4 needed 4 more for safety
;
setup:
  mov  ah,35h    ;get interupt vector address function
  mov  al,44h    ;communications interupt vector
  int  doscall   ;go get it
  cmp  bx,0    ;check if vector used
  jnz  lderr    ;if used then exit
  mov  ax,es    ;check segment
  cmp  ax,0
  jnz  lderr
;
  mov  dx,offset msg
  mov  ah,9
  int  doscall
;
  mov  ah,35h    ;get interupt vector address function
  mov  al,14h    ;communications interupt vector
  int  doscall   ;go get it
;
  mov  word ptr vector,bx   ;save offset
  mov  bx,es    ;get segment address
  mov  word ptr vector+2,bx   ;save segment
;
  mov  dx,offset setcom ;get new vector address
  mov  ax,cs
  mov  ds,ax    ;set segment
  mov  ah,25h    ;set interupt vector address function
  mov  al,44h    ;set to our new interupt vector
  int  doscall   ;set the interupt
;
  mov  dx,offset setup ;terminate and stay resident
  int  27h
lderr:
  mov  dx,offset msg1
  mov  ah,9
  int  doscall
  int  20h
startup endp
progseg ends
;
  end  startup


Tags:汇编 源码 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接