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

匯編源碼系列之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


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