Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.         cpu     8086
  2.         page    0
  3.  
  4.         in      ax,dx
  5.         in      al,dx
  6.         in      ax,50h
  7.         in      al,50h
  8.         out     dx,ax
  9.         out     dx,al
  10.         out     50h,ax
  11.         out     50h,al
  12.  
  13.         ; Play a bit with the new callback-based address mode parser,
  14.         ; introduced with build 261:
  15.  
  16.         ; Legal mod/rm combinations, in all permutations:
  17.  
  18.         mov     ax,[bx+si]              ; 00xxx000
  19.         mov     ax,[si+bx]
  20.         mov     ax,[bx+di]              ; 00xxx001
  21.         mov     ax,[di+bx]
  22.         mov     ax,[bp+si]              ; 00xxx010
  23.         mov     ax,[si+bp]
  24.         mov     ax,[bp+di]              ; 00xxx011
  25.         mov     ax,[di+bp]
  26.         mov     ax,[si]                 ; 00xxx100
  27.         mov     ax,[di]                 ; 00xxx101
  28.         mov     ax,[bp]                 ; 00xxx110 is [disp16], so converted to 01xxx110
  29.         mov     ax,[bx]                 ; 00xxx111
  30.         mov     ax,[1234h]              ;
  31.         mov     ax,[bx+si+12h]          ; 01xxx000
  32.         mov     ax,[bx+12h+si]
  33.         mov     ax,[si+12h+bx]
  34.         mov     ax,[si+bx+12h]
  35.         mov     ax,[12h+si+bx]
  36.         mov     ax,[12h+bx+si]
  37.         mov     ax,[bx+di+12h]          ; 01xxx001
  38.         mov     ax,[bx+12h+di]
  39.         mov     ax,[di+12h+bx]
  40.         mov     ax,[di+bx+12h]
  41.         mov     ax,[12h+di+bx]
  42.         mov     ax,[12h+bx+di]
  43.         mov     ax,[bp+si+12h]          ; 01xxx010
  44.         mov     ax,[bp+12h+si]
  45.         mov     ax,[si+12h+bp]
  46.         mov     ax,[si+bp+12h]
  47.         mov     ax,[12h+si+bp]
  48.         mov     ax,[12h+bp+si]
  49.         mov     ax,[bp+di+12h]          ; 01xxx011
  50.         mov     ax,[bp+12h+di]
  51.         mov     ax,[di+12h+bp]
  52.         mov     ax,[di+bp+12h]
  53.         mov     ax,[12h+di+bp]
  54.         mov     ax,[12h+bp+di]
  55.         mov     ax,[si+12h]             ; 01xxx100
  56.         mov     ax,[12h+si]
  57.         mov     ax,[di+12h]             ; 01xxx101
  58.         mov     ax,[12h+di]
  59.         mov     ax,[bp+12h]             ; 01xxx110
  60.         mov     ax,[12h+bp]
  61.         mov     ax,[bx+12h]             ; 01xxx111
  62.         mov     ax,[12h+bx]
  63.         mov     ax,[bx+si+1234h]        ; 10xxx000
  64.         mov     ax,[bx+1234h+si]
  65.         mov     ax,[si+1234h+bx]
  66.         mov     ax,[si+bx+1234h]
  67.         mov     ax,[1234h+si+bx]
  68.         mov     ax,[1234h+bx+si]
  69.         mov     ax,[bx+di+1234h]        ; 10xxx001
  70.         mov     ax,[bx+1234h+di]
  71.         mov     ax,[di+1234h+bx]
  72.         mov     ax,[di+bx+1234h]
  73.         mov     ax,[1234h+di+bx]
  74.         mov     ax,[1234h+bx+di]
  75.         mov     ax,[bp+si+1234h]        ; 10xxx010
  76.         mov     ax,[bp+1234h+si]
  77.         mov     ax,[si+1234h+bp]
  78.         mov     ax,[si+bp+1234h]
  79.         mov     ax,[1234h+si+bp]
  80.         mov     ax,[1234h+bp+si]
  81.         mov     ax,[bp+di+1234h]        ; 10xxx011
  82.         mov     ax,[bp+1234h+di]
  83.         mov     ax,[di+1234h+bp]
  84.         mov     ax,[di+bp+1234h]
  85.         mov     ax,[1234h+di+bp]
  86.         mov     ax,[1234h+bp+di]
  87.         mov     ax,[si+1234h]           ; 10xxx100
  88.         mov     ax,[1234h+si]
  89.         mov     ax,[di+1234h]           ; 10xxx101
  90.         mov     ax,[1234h+di]
  91.         mov     ax,[bp+1234h]           ; 10xxx110
  92.         mov     ax,[1234h+bp]
  93.         mov     ax,[bx+1234h]           ; 10xxx111
  94.         mov     ax,[1234h+bx]
  95.  
  96.         ; nesting
  97.  
  98.         mov     ax,[bx-(1234h-si)]      ; equal to...
  99.         mov     ax,[bx-1234h+si]
  100.         mov     ax,[12h-(-bx)]          ; equal to...
  101.         mov     ax,[bx+12h]
  102.  
  103.         ; that won't work, only adding of registers is possible...
  104.  
  105.         expect  1350
  106.         mov     ax,[bp-si]
  107.         endexpect
  108.  
  109.         ; ...and registers may not be used as not as function arg...
  110.  
  111.         expect  1350
  112.         mov     ax,[abs(bx)]
  113.         endexpect
  114.  
  115.         ; ...and each register may only be used once:
  116.  
  117.         expect  1350,1350
  118.         mov     ax,[bp+bx]
  119.         mov     ax,[si+di]
  120.         endexpect
  121.  
  122.         ; What made problems with the old "poor man's" parser:
  123.         ; Local symbols -/--/---/+/++/+++ were accidentally
  124.         ; split, and the initial fix was rather a kludge:
  125.  
  126. -       nop
  127. -       nop
  128. -       nop
  129.         mov     ax,cs:[-]
  130.         mov     ax,cs:[--]
  131.         mov     ax,cs:[---]
  132.  
  133.         ; ...and due to parentheses being allowed, this now also works:
  134.  
  135.         mov     ax,cs:[(--)-5]
  136.