exid.asm
上传用户:xiaoan1112
上传日期:2013-04-11
资源大小:19621k
文件大小:22k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. page 49,132
  2. TITLE ExId - SImple Id Executors
  3. ;***
  4. ;exid.asm - executors for simple id references.
  5. ;
  6. ; Copyright <C> 1986, Microsoft Corporation
  7. ;
  8. ;Purpose:
  9. ;
  10. ;   This module contains all exId executors.
  11. ;
  12. ;   Simple variables may also be referenced by exVtRfxx executors.
  13. ;   These are always nops, and are maintained with the nonspeed-
  14. ;   critical nop executors.
  15. ;
  16. ;   In general, these executors are very speed critical.
  17. ;
  18. ;
  19. ;****************************************************************************
  20. .xlist
  21. include  version.inc
  22. IncludeOnce architec
  23. IncludeOnce context
  24. IncludeOnce executor
  25. IncludeOnce exint
  26. IncludeOnce extort
  27. IncludeOnce opaftqb4
  28. IncludeOnce opid
  29. IncludeOnce opstmt
  30. IncludeOnce pcode
  31. IncludeOnce pointers
  32. IncludeOnce qbimsgs
  33. IncludeOnce rtinterp
  34. IncludeOnce scanner
  35. IncludeOnce variable
  36. .list
  37. assumes cs, CODE
  38. assumes es, NOTHING
  39. assumes ss, DATA
  40. RestoreVarTable equ <mov ds,cx>
  41. sBegin CODE
  42. subttl Public Load
  43. ;Added with [15]
  44. ;End of [15]
  45. subttl Static Load
  46. MakeExe exIdISLd2,opIdLd,ET_Imp
  47. LODSWTX  ;Pick up variable address operand
  48. xchg ax,bx ;Move to base register
  49. DbChk oVar,bx
  50. push [pVarBx]
  51. DispMac  ;Dispatch to next executor
  52. MakeExe exIdESLdI2,opIdLd,ET_I2
  53. LODSWTX  ;Pick up variable address operand
  54. xchg ax,bx ;Move to base register
  55. DbChk oVar,bx
  56. push [pVarBx] ;Push the I2
  57. DispMac  ;Dispatch to next executor
  58. MakeExe exIdESLdI4,opIdLd,ET_I4
  59. SkipExHeader
  60. MakeExe exIdISLd4,opIdLd,ET_Imp
  61. LODSWTX
  62. xchg ax,bx ;Move to base register
  63. DbChk oVar,bx
  64. push [pVarBx+2]
  65. push [pVarBx]
  66. DispMac
  67. ;Added with [18]
  68. MakeExe exIdESLdR4,opIdLd,ET_R4
  69. SkipExHeader
  70. MakeExe exIdISLdR4,opIdLd,ET_Imp
  71. LODSWTX
  72. xchg ax,bx ;Move to base register
  73. DbChk oVar,bx
  74. fld dword ptr [pVarBx]
  75. DispMac
  76. MakeExe exIdESLdR8,opIdLd,ET_R8
  77. SkipExHeader
  78. MakeExe exIdISLdR8,opIdLd,ET_Imp 
  79. LODSWTX
  80. xchg ax,bx ;Move to base register
  81. DbChk oVar,bx
  82. fld qword ptr [pVarBx]
  83. DispMac
  84. ;End of [18]
  85. subttl Common Load
  86. MakeExe exIdECLdI2,opIdLd,ET_I2
  87. SkipExHeader
  88. MakeExe exIdICLd2,opIdLd,ET_Imp
  89. LODSWTX  ;Get oVar
  90. xchg ax,bx
  91. DbChk oVar,bx  ; Check for valid oVar
  92. mov ax,[pVarBx].COMREF_oValue ;Offset into common block
  93. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  94. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  95. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  96. add bx,ax ;Offset in block
  97. push [bx]
  98. DispMac
  99. MakeExe exIdECLdI4,opIdLd,ET_I4
  100. SkipExHeader
  101. MakeExe exIdICLd4,opIdLd,ET_Imp
  102. LODSWTX ;Get oVar
  103. xchg ax,bx
  104. DbChk oVar,bx  ; Check for valid oVar
  105. mov ax,[pVarBx].COMREF_oValue ;Offset into common block
  106. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  107. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  108. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  109. add bx,ax ;Offset in block
  110. push [bx+2]
  111. push [bx]
  112. DispMac
  113. ;Added with [18]
  114. MakeExe exIdECLdR4,opIdLd,ET_R4
  115. SkipExHeader
  116. MakeExe exIdICLdR4,opIdLd,ET_Imp
  117. LODSWTX ;Get oVar
  118. xchg ax,bx
  119. DbChk oVar,bx  ; Check for valid oVar
  120. mov ax,[pVarBx].COMREF_oValue ;Offset into common block
  121. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  122. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  123. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  124. add bx,ax ;Offset in block
  125. fld dword ptr [bx]
  126. DispMac
  127. MakeExe exIdECLdR8,opIdLd,ET_R8
  128. SkipExHeader
  129. MakeExe exIdICLdR8,opIdLd,ET_Imp 
  130. LODSWTX ;Get oVar
  131. DbChk oVar,ax  ; Check for valid oVar
  132. xchg bx,ax
  133. mov ax,[pVarBx].COMREF_oValue ;Offset into common block
  134. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  135. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  136. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  137. add bx,ax ;Offset in block
  138. fld qword ptr [bx]
  139. DispMac
  140. ;End of [18]
  141. subttl Indirect Load
  142. page
  143. MakeExe exIdEILdI2,opIdLd,ET_I2
  144. SkipExHeader
  145. MakeExe exIdIILd2,opIdLd,ET_Imp
  146. LODSWTX  ;Get oVar
  147. xchg ax,bx ;Move to base register
  148. DbChk oVar,bx  ; Check for valid oVar
  149. GetpFrame ;Get pointer into frame
  150. mov bx,[pFrame] ;Load address of variable
  151. push [bx] ;Push the I2
  152. DispMac
  153. MakeExe exIdEILdI4,opIdLd,ET_I4
  154. SkipExHeader
  155. MakeExe exIdIILd4,opIdLd,ET_Imp
  156. LODSWTX  ;Get oVar
  157. xchg ax,bx ;Move to base register
  158. DbChk oVar,bx  ; Check for valid oVar
  159. GetpFrame ;Get pointer into frame
  160. mov bx,[pFrame] ;Load address of variable
  161. push [bx+2]
  162. push [bx]
  163. DispMac
  164. ;Start of [18]
  165. MakeExe exIdEILdR4,opIdLd,ET_R4
  166. SkipExHeader
  167. MakeExe exIdIILdR4,opIdLd,ET_Imp
  168. LODSWTX  ;Get oVar
  169. xchg ax,bx ;Move to base register
  170. DbChk oVar,bx  ; Check for valid oVar
  171. GetpFrame ;Get pointer into frame
  172. mov bx,[pFrame] ;Load address of variable
  173. fld dword ptr [bx]
  174. DispMac
  175. MakeExe exIdEILdR8,opIdLd,ET_R8
  176. SkipExHeader
  177. MakeExe exIdIILdR8,opIdLd,ET_Imp 
  178. LODSWTX  ;Get oVar
  179. xchg ax,bx ;Move to base register
  180. DbChk oVar,bx  ; Check for valid oVar
  181. GetpFrame ;Get pointer into frame
  182. mov bx,[pFrame] ;Load address of variable
  183. fld qword ptr [bx]
  184. DispMac
  185. ;End of [18]
  186. subttl Frame Load and Indirect Reference
  187. page
  188. ;  The executors for loading two byte and four byte frame variables are
  189. ;  also used for references to indirect variables.  For a load of a frame
  190. ;  variable, the variable table contains the value which is pushed on the
  191. ;  stack.  For a reference to an indirect variable, the variable table
  192. ;  contains the address which is then pushed on the stack.  Since addresses
  193. ;  are either two or four bytes, only these entries serve two purposes.
  194. MakeExe exIdIIRfTyp,opIdLd,ET_Imp
  195. LODSWTX ;Get oVar
  196. xchg ax,bx ;Move to base register
  197. DbChk oVar,bx  ; Check for valid oVar
  198. mov bx,[pVarBx] ;Get oFrame
  199. add bx,bp ;oFrame to pFrame entry
  200. push ds
  201. push [bx]
  202. DispMac
  203. MakeExe exIdEIRfR8,opIdLd,ET_R8
  204. SkipExHeader
  205. MakeExe exIdEIRfSD,opIdLd,ET_SD
  206. SkipExHeader
  207. MakeExe exIdEIRfI4,opIdLd,ET_I4
  208. SkipExHeader
  209. MakeExe exIdEIRfR4,opIdLd,ET_R4
  210. SkipExHeader
  211. MakeExe exIdEFLdI2,opIdLd,ET_I2
  212. SkipExHeader
  213. MakeExe exIdIFLd2,opIdLd,ET_Imp
  214. LODSWTX  ;Get oVar
  215. xchg ax,bx ;Move to base register
  216. DbChk oVar,bx  ; Check for valid oVar
  217. GetpFrame ;Get pointer into frame
  218. push [pFrame] ;Push the I2
  219. DispMac
  220. MakeExe exIdEFLdI4,opIdLd,ET_I4
  221. SkipExHeader
  222. MakeExe exIdIFLd4,opIdLd,ET_Imp
  223. LODSWTX  ;Get oVar
  224. xchg ax,bx ;Move to base register
  225. DbChk oVar,bx  ; Check for valid oVar
  226. GetpFrame ;Get pointer into frame
  227. push [pFrame+2]
  228. push [pFrame]
  229. DispMac
  230. ;Added with [18]
  231. MakeExe exIdEFLdR4,opIdLd,ET_R4
  232. SkipExHeader
  233. MakeExe exIdIFLdR4,opIdLd,ET_Imp
  234. LODSWTX  ;Get oVar
  235. xchg ax,bx ;Move to base register
  236. DbChk oVar,bx  ; Check for valid oVar
  237. GetpFrame ;Get pointer into frame
  238. fld dword ptr [pFrame]
  239. DispMac
  240. MakeExe exIdEFLdR8,opIdLd,ET_R8
  241. SkipExHeader
  242. MakeExe exIdIFLdR8,opIdLd,ET_Imp 
  243. LODSWTX  ;Get oVar
  244. xchg ax,bx ;Move to base register
  245. DbChk oVar,bx  ; Check for valid oVar
  246. GetpFrame ;Get pointer into frame
  247. fld qword ptr [pFrame]
  248. DispMac
  249. ;End of [18]
  250. subttl Public Store
  251. page
  252. ;Added with [15]
  253. ;End of [15]
  254. subttl Static Store
  255. page
  256. MakeExe exIdESStSD,opIdSt,ET_SD
  257. SkipExHeader
  258. MakeExe exIdISStSD,opIdSt,ET_Imp
  259. LODSWTX  ;Get oVar
  260. DbChk oVar,ax  ; Check for valid oVar
  261.     add     ax,di ;ax = pSdStore
  262.     push    ax
  263. CALLRT B$SASS,DispMov
  264. MakeExe exIdISSt2,opIdSt,ET_Imp
  265. LODSWTX  ;Get oVar
  266. xchg ax,bx ;Move to base register
  267. DbChk oVar,bx  ; Check for valid oVar
  268. pop [pVarBx] ;Store stack in value
  269. DispMac
  270. MakeExe exIdESStI2,opIdSt,ET_I2
  271. LODSWTX  ;Get oVar
  272. xchg ax,bx ;Move to base register
  273. DbChk oVar,bx  ; Check for valid oVar
  274. pop [pVarBx] ;Store stack in value
  275. DispMac
  276. MakeExe exIdESStI4,opIdSt,ET_I4
  277. SkipExHeader
  278. MakeExe exIdISSt4,opIdSt,ET_Imp
  279. LODSWTX  ;Get oVar
  280. xchg ax,bx ;Move to base register
  281. DbChk oVar,bx  ; Check for valid oVar
  282. pop [pVarBx] ;Store stack in value
  283. pop [pVarBx+2]
  284. DispMac
  285. ;Added with [18]
  286. MakeExe exIdESStR4,opIdSt,ET_R4
  287. SkipExHeader
  288. MakeExe exIdISStR4,opIdSt,ET_Imp
  289. LODSWTX  ;Get oVar
  290. xchg ax,bx ;Move to base register
  291. DbChk oVar,bx  ; Check for valid oVar
  292. fstp dword ptr [pVarBx]
  293. fwait
  294. DispMac
  295. MakeExe exIdESStR8,opIdSt,ET_R8
  296. SkipExHeader
  297. MakeExe exIdISStR8,opIdSt,ET_Imp 
  298. LODSWTX  ;Get oVar
  299. xchg ax,bx ;Move to base register
  300. DbChk oVar,bx  ; Check for valid oVar
  301. fstp qword ptr [pVarBx]
  302. fwait
  303. DispMac
  304. ;End of [18]
  305. MakeExe exIdISStTyp,opIdSt,ET_Imp
  306. LODSWTX      ;Get oVar
  307. DbChk oVar,ax      ; Check for valid oVar
  308.     add     ax,di     ;oVar --> pVar
  309. xchg di,ax     ;Destination (points to value field)
  310. mov bx,[di-VAR_value].VAR_oTyp  ;Get oTyp
  311.     push    ds
  312. jmp MoveRec
  313. subttl Common Store
  314. page
  315. MakeExe exIdECStI2,opIdSt,ET_I2
  316. SkipExHeader
  317. MakeExe exIdICSt2,opIdSt,ET_Imp
  318. LODSWTX  ;Get oVar
  319. xchg ax,bx
  320. DbChk oVar,bx  ; Check for valid oVar
  321. mov ax,[pVarBx].COMREF_oValue ;Offset into common block
  322. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  323. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  324. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  325. add bx,ax ;Offset in block
  326. pop [bx]
  327. DispMac
  328. MakeExe exIdECStI4,opIdSt,ET_I4
  329. SkipExHeader
  330. MakeExe exIdICSt4,opIdSt,ET_Imp
  331. LODSWTX  ;Get oVar
  332. xchg ax,bx
  333. DbChk oVar,bx  ; Check for valid oVar
  334. mov ax,[pVarBx].COMREF_oValue ;Offset into common block
  335. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  336. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  337. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  338. add bx,ax ;Offset in block
  339. pop [bx]
  340. pop [bx+2]
  341. DispMac
  342. ;Added with [18]
  343. MakeExe exIdECStR4,opIdSt,ET_R4
  344. SkipExHeader
  345. MakeExe exIdICStR4,opIdSt,ET_Imp
  346. LODSWTX  ;Get oVar
  347. xchg ax,bx
  348. DbChk oVar,bx  ; Check for valid oVar
  349. mov ax,[pVarBx].COMREF_oValue ;Offset into common block
  350. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  351. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  352. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  353. add bx,ax ;Offset in block
  354. fstp dword ptr [bx]
  355. fwait
  356. DispMac
  357. MakeExe exIdECStR8,opIdSt,ET_R8
  358. SkipExHeader
  359. MakeExe exIdICStR8,opIdSt,ET_Imp 
  360. LODSWTX  ;Get oVar
  361. xchg ax,bx
  362. DbChk oVar,bx  ; Check for valid oVar
  363. mov ax,[pVarBx].COMREF_oValue ;Offset into common block
  364. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  365. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  366. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  367. add bx,ax ;Offset in block
  368. fstp qword ptr [bx]
  369. fwait
  370. DispMac
  371. ;End of [18]
  372. MakeExe exIdECStSD,opIdSt,ET_SD
  373. SkipExHeader
  374. MakeExe exIdICStSD,opIdSt,ET_Imp
  375. LODSWTX ;Get oVar
  376. xchg ax,bx
  377. DbChk oVar,bx  ; Check for valid oVar
  378. mov ax,[pVarBx].COMREF_oValue ;Offset into common block
  379. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  380. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  381. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  382. add bx,ax ;Offset in block
  383. push bx ;Push pSD
  384. CALLRT B$SASS,DispMov
  385. MakeExe exIdICStTyp,opIdSt,ET_Imp
  386. LODSWTX ;Get oVar
  387. xchg ax,bx
  388. DbChk oVar,bx  ; Check for valid oVar
  389. mov cx,[pVarBx].COMREF_oValue ;Offset into common block
  390. mov ax,[pVarBx].COMREF_oCommon ;oCommon
  391. mov bx,[pVarBx-VAR_value].VAR_oTyp ;Get oTyp
  392. add ax,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  393. xchg ax,di
  394. mov di,[di].COM_bdValue.BD_pb ;Common block
  395. add di,cx ;Offset in block
  396. push ds
  397. ;ax = saved di
  398. ;bx = oTyp of record
  399. ;di = offset of destination
  400. ;[sp] = segment of destination
  401. ;[sp+4]:[sp+2] = pointer to source
  402. jmp MoveRec
  403. subttl Frame Store
  404. page
  405. MakeExe exIdEFStI2,opIdSt,ET_I2
  406. SkipExHeader
  407. MakeExe exIdIFSt2,opIdSt,ET_Imp
  408. LODSWTX  ;Get oVar
  409. xchg ax,bx ;Move to base register
  410. DbChk oVar,bx  ; Check for valid oVar
  411. GetpFrame ;Get pointer into frame
  412. pop [pFrame]
  413. DispMac
  414. MakeExe exIdEFStI4,opIdSt,ET_I4
  415. SkipExHeader
  416. MakeExe exIdIFSt4,opIdSt,ET_Imp
  417. LODSWTX  ;Get oVar
  418. xchg ax,bx ;Move to base register
  419. DbChk oVar,bx  ; Check for valid oVar
  420. GetpFrame ;Get pointer into frame
  421. pop [pFrame]
  422. pop [pFrame+2]
  423. DispMac
  424. ;Added with [18]
  425. MakeExe exIdEFStR4,opIdSt,ET_R4
  426. SkipExHeader
  427. MakeExe exIdIFStR4,opIdSt,ET_Imp
  428. LODSWTX  ;Get oVar
  429. xchg ax,bx ;Move to base register
  430. DbChk oVar,bx  ; Check for valid oVar
  431. GetpFrame ;Get pointer into frame
  432. fstp dword ptr [pFrame]
  433. fwait
  434. DispMac
  435. MakeExe exIdEFStR8,opIdSt,ET_R8
  436. SkipExHeader
  437. MakeExe exIdIFStR8,opIdSt,ET_Imp 
  438. LODSWTX  ;Get oVar
  439. xchg ax,bx ;Move to base register
  440. DbChk oVar,bx  ; Check for valid oVar
  441. GetpFrame ;Get pointer into frame
  442. fstp qword ptr [pFrame]
  443. fwait
  444. DispMac
  445. ;End of [18]
  446. MakeExe exIdEFStSD,opIdSt,ET_SD
  447. SkipExHeader
  448. MakeExe exIdIFStSD,opIdSt,ET_Imp
  449. LODSWTX  ;Get oVar
  450. xchg ax,bx ;Move to base register
  451. DbChk oVar,bx  ; Check for valid oVar
  452. mov ax,[pVarBx] ;Get oBP
  453. add ax,bp ;ax = pSD
  454. push ax ;Push pSD
  455. CALLRT B$SASS,DispMov
  456. MakeExe exIdIFStTyp,opIdSt,ET_Imp
  457. LODSWTX      ;Get oVar
  458. DbChk oVar,ax      ; Check for valid oVar
  459.     add     ax,di     ;oVar --> pVar
  460. xchg bx,ax     ;pVar to bx
  461. xchg ax,di     ;Save di in ax
  462. mov di,[bx]      ;Get oBP
  463. add di,bp
  464. mov bx,[bx-VAR_value].VAR_oTyp  ;Get oTyp
  465.     push    ss
  466. jmp MoveRec
  467. subttl Indirect Store
  468. MakeExe exIdEIStI2,opIdSt,ET_I2
  469. SkipExHeader
  470. MakeExe exIdIISt2,opIdSt,ET_Imp
  471. LODSWTX  ;Get oVar
  472. xchg ax,bx ;Move to base register
  473. DbChk oVar,bx  ; Check for valid oVar
  474. GetpFrame ;Get pointer into frame
  475. mov bx,[pFrame]  ;Near address to bx
  476. pop [bx]
  477. DispMac  ;Dispatch to next executor
  478. MakeExe exIdEIStI4,opIdSt,ET_I4
  479. SkipExHeader
  480. MakeExe exIdIISt4,opIdSt,ET_Imp
  481. LODSWTX  ;Get oVar
  482. xchg ax,bx ;Move to base register
  483. DbChk oVar,bx  ; Check for valid oVar
  484. GetpFrame ;Get pointer into frame
  485. mov bx,[pFrame] ;Near address to bx
  486. pop [bx]
  487. pop [bx+2]
  488. DispMac  ;Dispatch to next executor
  489. ;Added with [18]
  490. MakeExe exIdEIStR4,opIdSt,ET_R4
  491. SkipExHeader
  492. MakeExe exIdIIStR4,opIdSt,ET_Imp
  493. LODSWTX  ;Get oVar
  494. xchg ax,bx ;Move to base register
  495. DbChk oVar,bx  ; Check for valid oVar
  496. GetpFrame ;Get pointer into frame
  497. mov bx,[pFrame] ;Near address to bx
  498. fstp dword ptr [bx]
  499. fwait
  500. DispMac  ;Dispatch to next executor
  501. MakeExe exIdEIStR8,opIdSt,ET_R8
  502. SkipExHeader
  503. MakeExe exIdIIStR8,opIdSt,ET_Imp 
  504. LODSWTX  ;Get oVar
  505. xchg ax,bx ;Move to base register
  506. DbChk oVar,bx  ; Check for valid oVar
  507. GetpFrame ;Get pointer into frame
  508. mov bx,[pFrame]  ;Near address to bx
  509. fstp qword ptr [bx]
  510. fwait
  511. DispMac  ;Dispatch to next executor
  512. ;End of [18]
  513. MakeExe exIdEIStSD,opIdSt,ET_SD
  514. SkipExHeader
  515. MakeExe exIdIIStSD,opIdSt,ET_Imp
  516. LODSWTX  ;Get oVar
  517. xchg ax,bx ;Move to base register
  518. DbChk oVar,bx  ; Check for valid oVar
  519. GetpFrame ;Get pointer into frame
  520. push [pFrame] ; Push pSD/handle
  521. CALLRT B$SASS,DispMov
  522. MakeExe exIdIIStTyp,opIdSt,ET_Imp
  523. LODSWTX  ;Get oVar
  524. DbChk oVar,ax  ; Check for valid oVar
  525.     add     ax,di ;oVar --> pVar
  526. xchg bx,ax ;pVar to bx
  527.     xchg    ax,di ;Save di in ax
  528. mov di,[bx]  ;Get oBP
  529. mov bx,[bx-VAR_value].VAR_oTyp ;Get oTyp
  530.     push    ds
  531. mov di,[bp+di] ;Near address to di
  532. jmp MoveRec
  533. subttl Public IdRf Executors
  534. page
  535. ;Added with [15]
  536. ;End of [15]
  537. subttl Static IdRf Executors
  538. page
  539. MakeExe exIdISRfTyp,opIdLd,ET_Imp
  540. LODSWTX  ;Get oVar
  541. DbChk oVar,ax  ; Check for valid oVar
  542. add ax,di ;oVar --> pVar
  543. push ds ;Push far pointer
  544. push ax
  545. DispMac
  546. MakeExe exIdESRfR8,opIdLd,ET_R8
  547. SkipExHeader
  548. MakeExe exIdESRfI4,opIdLd,ET_I4
  549. SkipExHeader
  550. MakeExe exIdESRfSD,opIdLd,ET_SD
  551. SkipExHeader
  552. MakeExe exIdESRfR4,opIdLd,ET_R4
  553. SkipExHeader
  554. MakeExe exIdESRfI2,opIdLd,ET_I2
  555. SkipExHeader
  556. MakeExe exIdISRf,opIdLd,ET_Imp
  557. LODSWTX  ;Get oVar
  558. DbChk oVar,ax  ; Check for valid oVar
  559.     add     ax,di ;oVar --> pVar
  560. push ax
  561. DispMac
  562. SameExe exIdISLdSD,exIdISRf
  563. SameExe exIdESLdSD,exIdESRfSD
  564. subttl Frame IdRf Executors
  565. page
  566. MakeExe exIdIFRfTyp,opIdLd,ET_Imp
  567. LODSWTX  ;Get oVar
  568. DbChk oVar,ax  ; Check for valid oVar
  569. xchg bx,ax ;Move to base register
  570. mov ax,[pVarBx] ;Get oFrame
  571. add ax,bp ;oFrame to pValue
  572. push ds
  573. push ax
  574. DispMac
  575. MakeExe exIdEFRfR8,opIdLd,ET_R8
  576. SkipExHeader
  577. MakeExe exIdEFRfSD,opIdLd,ET_SD
  578. SkipExHeader
  579. MakeExe exIdEFRfI4,opIdLd,ET_I4
  580. SkipExHeader
  581. MakeExe exIdEFRfR4,opIdLd,ET_R4
  582. SkipExHeader
  583. MakeExe exIdEFRfI2,opIdLd,ET_I2
  584. SkipExHeader
  585. MakeExe exIdIFRf,opIdLd,ET_Imp
  586. LODSWTX  ;Get oVar
  587. DbChk oVar,ax  ; Check for valid oVar
  588. xchg bx,ax ;Move to base register
  589. mov ax,[pVarBx] ;Get oFrame
  590. add ax,bp ;oFrame to pValue
  591. push ax
  592. DispMac
  593. SameExe exIdIFLdSD,exIdIFRf
  594. subttl Common IdRf Executors
  595. page
  596. MakeExe exIdICRfTyp,opIdLd,ET_Imp
  597. LODSWTX ;Get oVar
  598. DbChk oVar,ax  ; Check for valid oVar
  599. xchg bx,ax
  600. mov ax,[pVarBx].COMREF_oValue ;Offset into common block
  601. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  602. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  603. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  604. add bx,ax ;Offset in block
  605. push ds
  606. push bx
  607. DispMac
  608. MakeExe exIdECRfR8,opIdLd,ET_R8
  609. SkipExHeader
  610. MakeExe exIdECRfSD,opIdLd,ET_SD
  611. SkipExHeader
  612. MakeExe exIdECRfI4,opIdLd,ET_I4
  613. SkipExHeader
  614. MakeExe exIdECRfR4,opIdLd,ET_R4
  615. SkipExHeader
  616. MakeExe exIdECRfI2,opIdLd,ET_I2
  617. SkipExHeader
  618. MakeExe exIdICRf,opIdLd,ET_Imp
  619. LODSWTX ;Get oVar
  620. DbChk oVar,ax  ; Check for valid oVar
  621. xchg bx,ax
  622. mov ax,[pVarBx].COMREF_oValue ;Offset into common block
  623. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  624. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  625. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  626. add bx,ax ;Offset in block
  627. push bx
  628. DispMac
  629. SameExe exIdICLdSD,exIdICRf
  630. SameExe exIdECLdSD,exIdECRfSD
  631. subttl FS load/store/ref executors
  632. page
  633. MakeExe exIdESRfFS,opIdLd,ET_SD
  634. SkipExHeader
  635. MakeExe exIdISRfFS,opIdLd,ET_Imp
  636. LODSWTX ;Get oVar
  637. DbChk oVar,ax  ; Check for valid oVar
  638.     add     ax,di ;oVar --> pVar
  639. xchg bx,ax ;pVar to bx
  640.     push    ds
  641. push bx ;Far address to stack
  642. push [bx-VAR_value].VAR_cbFixed ; Push length of FS
  643. DispMac
  644. MakeExe exIdEIRfFS,opIdLd,ET_SD
  645. SkipExHeader
  646. MakeExe exIdIIRfFS,opIdLd,ET_Imp
  647. LODSWTX ;Get oVar
  648. xchg ax,bx ;Move to base register
  649. DbChk oVar,bx  ; Check for valid oVar
  650. mov ax,[pVarBx-VAR_value].VAR_cbFixed   ; Get length
  651. GetpFrame ;Get pointer into frame
  652. push ds
  653. push [pFrame] ;Push offset
  654. push ax ;Push cb in FS
  655. DispMac
  656. MakeExe exIdEFRfFS,opIdLd,ET_SD
  657. SkipExHeader
  658. MakeExe exIdIFRfFS,opIdLd,ET_Imp
  659. LODSWTX ;Get oVar
  660. DbChk oVar,ax  ; Check for valid oVar
  661. xchg bx,ax ;Move to base register
  662. mov ax,[pVarBx-VAR_value].VAR_cbFixed   ; Get length
  663. mov bx,[pVarBx] ;Get oFrame
  664. add bx,bp ;oFrame to pFrame entry
  665.     push    ss
  666. push bx
  667. push ax ;Push cb in FS
  668. DispMac
  669. MakeExe exIdESLdFS,opIdLd,ET_SD
  670. SkipExHeader
  671. MakeExe exIdISLdFS,opIdLd,ET_Imp
  672. LODSWTX ;Get oVar
  673. DbChk oVar,ax  ; Check for valid oVar
  674.     add     ax,di ;oVar --> pVar
  675. xchg bx,ax ;pVar to bx
  676.     push    ds
  677. push bx ;Far address to stack
  678. push [bx-VAR_value].VAR_cbFixed ; Push length of FS
  679. CALLRT B$LDFS,DispMovSd
  680. MakeExe exIdEILdFS,opIdLd,ET_SD
  681. SkipExHeader
  682. MakeExe exIdIILdFS,opIdLd,ET_Imp
  683. LODSWTX ;Get oVar
  684. DbChk oVar,ax  ; Check for valid oVar
  685. xchg bx,ax ;Move to base register
  686. mov ax,[pVarBx-VAR_value].VAR_cbFixed   ; Get length
  687. GetpFrame ;Get pointer into frame
  688. push ds
  689. push [pFrame] ;Push offset
  690. push ax ;Push cb in FS
  691. CALLRT B$LDFS,DispMovSd
  692. MakeExe exIdEFLdFS,opIdLd,ET_SD
  693. SkipExHeader
  694. MakeExe exIdIFLdFS,opIdLd,ET_Imp
  695. LODSWTX ;Get oVar
  696. DbChk oVar,ax  ; Check for valid oVar
  697. xchg bx,ax ;Move to base register
  698. mov ax,[pVarBx-VAR_value].VAR_cbFixed   ; Get length
  699. mov bx,[pVarBx] ;Get oFrame
  700. add bx,bp ;oFrame to pFrame entry
  701. push ss
  702. push bx
  703. push ax ;Push cb in FS
  704. CALLRT B$LDFS,DispMovSd
  705. MakeExe exIdESStFS,opIdSt,ET_SD
  706. SkipExHeader
  707. MakeExe exIdISStFS,opIdSt,ET_Imp
  708. LODSWTX ;Get oVar
  709. DbChk oVar,ax  ; Check for valid oVar
  710.     add     ax,di ;oVar --> pVar
  711. xchg bx,ax ;pVar to bx
  712.     push    ds
  713. push bx ;Far address to stack
  714. push [bx-VAR_value].VAR_cbFixed ; Push length of FS
  715. CALLRT B$LSET,Disp
  716. MakeExe exIdEIStFS,opIdSt,ET_SD
  717. SkipExHeader
  718. MakeExe exIdIIStFS,opIdSt,ET_Imp
  719. LODSWTX ;Get oVar
  720. DbChk oVar,ax  ; Check for valid oVar
  721. xchg bx,ax ;Move to base register
  722. mov ax,[pVarBx-VAR_value].VAR_cbFixed   ; Get length
  723. GetpFrame ;Get pointer into frame
  724. push ds
  725. push [pFrame] ;Push offset
  726. push ax ;Push cb in FS
  727. CALLRT B$LSET,Disp
  728. MakeExe exIdEFStFS,opIdSt,ET_SD
  729. SkipExHeader
  730. MakeExe exIdIFStFS,opIdSt,ET_Imp
  731. LODSWTX ;Get oVar
  732. DbChk oVar,ax  ; Check for valid oVar
  733. xchg bx,ax ;Move to base register
  734. mov ax,[pVarBx-VAR_value].VAR_cbFixed   ; Get length
  735. mov bx,[pVarBx] ;Get oFrame
  736. add bx,bp ;oFrame to pFrame entry
  737. push ss
  738. push bx
  739. push ax ;Push cb in FS
  740. CALLRT B$LSET,Disp
  741. MakeExe exIdICRfFS,opIdLd,ET_Imp
  742. SkipExHeader
  743. MakeExe exIdECRfFS,opIdLd,ET_SD
  744. LODSWTX ;Get oVar
  745. DbChk oVar,ax  ; Check for valid oVar
  746. xchg bx,ax
  747. mov ax,[pVarBx-VAR_value].VAR_cbFixed   ; Get length
  748. mov cx,[pVarBx].COMREF_oValue ;Offset into common block
  749. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  750. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  751. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  752. add bx,cx ;Offset in block
  753. push ds
  754. push bx
  755. push ax ;Push cb in FS
  756. DispMac
  757. MakeExe exIdICLdFS,opIdLd,ET_Imp
  758. SkipExHeader
  759. MakeExe exIdECLdFS,opIdLd,ET_SD
  760. LODSWTX ;Get oVar
  761. DbChk oVar,ax  ; Check for valid oVar
  762. xchg bx,ax
  763. mov ax,[pVarBx-VAR_value].VAR_cbFixed   ; Get length
  764. mov cx,[pVarBx].COMREF_oValue ;Offset into common block
  765. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  766. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  767. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  768. add bx,cx ;Offset in block
  769. push ds
  770. push bx
  771. push ax ;Push cb in FS
  772. CALLRT B$LDFS,DispMovSd
  773. MakeExe exIdICStFS,opIdSt,ET_Imp
  774. SkipExHeader
  775. MakeExe exIdECStFS,opIdSt,ET_SD
  776. LODSWTX ;Get oVar
  777. DbChk oVar,ax  ; Check for valid oVar
  778. xchg bx,ax
  779. mov ax,[pVarBx-VAR_value].VAR_cbFixed   ; Get length
  780. mov cx,[pVarBx].COMREF_oValue ;Offset into common block
  781. mov bx,[pVarBx].COMREF_oCommon ;oCommon
  782. add bx,[grs.GRS_bdtComBlk.BD_pb] ;pCommon
  783. mov bx,[bx].COM_bdValue.BD_pb ;Common block
  784. add bx,cx ;Offset in block
  785. push ds
  786. push bx
  787. push ax ;Push cb in FS
  788. CALLRT B$LSET,Disp
  789. SameExe exIdIIRf,exIdIFLd2
  790. SameExe exIdEIRfI2,exIdEFLdI2
  791. ;*************************************************************************
  792. MakeExe exStDim,opStDim
  793. inc si
  794. inc si ;Eat the operand
  795. DispMac
  796. sEnd CODE
  797. end