Advertisement
Ladies_Man

#NUP mymacro.asm (for lab2!)

Jan 26th, 2015
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;by IVAN
  2. ;interrupt descriptor
  3. intdescriptor macro properties:vararg
  4.         _offset=0
  5.         _selector=0
  6.         _t=0
  7.         _use32=0
  8.         _dpl=0
  9.         _p=1
  10.  
  11.         for p, <properties>
  12.             _sep instr <p>, <=>
  13.             _name substr <p>, 1, _sep-1
  14.             _valid=1
  15.             for valid_name, <_offset, _selector, _t, _use32, _dpl, _p>
  16.                 ifidn _name, <valid_name>
  17.                     _valid=0
  18.                 endif
  19.             endm
  20.             if _valid eq 0
  21.                 p
  22.             else
  23.                 _emsg catstr <Wrong parameter name >, _name
  24.                     .ERR _emsg
  25.             endif
  26.         endm
  27.         dw  _offset AND 0FFFFh
  28.         dw  _selector
  29.         db  0
  30.         db  _t+110b+(_use32 SHL 3)+(_dpl SHL 5)+(_p SHL 7)
  31.         dw  _offset SHR 16
  32. endm
  33.  
  34. ;by IVAN
  35. smov    macro sreg, value, treg:vararg
  36.         _treg equ ax
  37.         for t, <treg>
  38.             t
  39.         endm
  40.         mov _treg, value
  41.         mov sreg, _treg
  42. endm
  43.  
  44. descriptor macro properties:vararg
  45.         _limit=0
  46.         _base=0
  47.         _g=0
  48.         _x=0
  49.         _l=0
  50.         _p=1
  51.         _dpl=0
  52.         _s=1
  53.         _d_c=0
  54.         _c_ed=0
  55.         _r_w=1
  56.         _a=0
  57.         _type=0
  58.  
  59.         for p, <properties>
  60.             _sep instr <p>, <=>
  61.             _name substr <p>, 1, _sep-1
  62.             _valid = 1
  63.  
  64.             for valid_name, <_limit,_base,_g,_x,_l,_p,_dpl,_s,_d_c,_c_ed,_r_w,_a,_type>
  65.                 ifidn _name, <valid_name>
  66.                     _valid=0
  67.                 endif
  68.             endm
  69.             if _valid eq 0
  70.                 p
  71.             else
  72.                 _emsg catstr <Wrong parameter name >, _name
  73.                     .ERR _emsg
  74.             endif
  75.         endm
  76.  
  77.         if _limit le 00100000h
  78.             dw  _limit MOD 10000h
  79.         else
  80.             dw  (_limit/4096) MOD 10000h
  81.         endif
  82.         dw  (_base) MOD 10000h
  83.         db  (_base/10000h) MOD 0100h
  84.  
  85.         if _s eq 0
  86.             if (_type eq 0) or (_type eq 8) or (_type eq 10) or (_type eq 13)
  87.                 _emsg   equ <Wrong type of system descriptor>
  88.                     .ERR _emsg
  89.             else
  90.                 db  _type+(_s SHL 4)+(_dpl SHL 5)+(_p SHL 7)
  91.             endif
  92.         else
  93.             db  _a+(_r_w SHL 1)+(_c_ed SHL 2)+(_d_c SHL 3)+(_s SHL 4)+(_dpl SHL 5)+(_p SHL 7)
  94.         endif
  95.         if _limit le 00100000h
  96.             db  (_g SHL 7) + (_x SHL 6) + (_l SHL 5) + ((_limit SHR 16) MOD 10h)
  97.         else
  98.             db  10000000b + (_x SHL 6) + (_l SHL 5) + ((_limit SHR 28) MOD 10h)
  99.         endif
  100.         db  (_base SHR 24) MOD 0100h
  101. endm
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement