home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / TM1632.ZIP / HEL3216A.ASM < prev    next >
Assembly Source File  |  1992-12-05  |  2KB  |  90 lines

  1. TITLE Simple OS/2 assembly language program to display Hello world!
  2. ; HEL3216A.ASM
  3. PAGE 0,80
  4. .386
  5.  
  6. N32  TYPEDEF PTR NEAR32
  7. F32  TYPEDEF PTR FAR32
  8. F16  TYPEDEF PTR FAR16
  9.  
  10. STACK32 SEGMENT DWORD STACK FLAT 'STACK'
  11. STACK32 ENDS
  12.  
  13. DATA32 SEGMENT DWORD PUBLIC FLAT 'DATA'
  14. DATA32 ENDS
  15.  
  16. DATA16 SEGMENT DWORD PUBLIC USE16 'DATA'
  17. msg  BYTE 0Dh,0Ah,'Hello World!',0Dh,0Ah ;length 16
  18. wlen DWORD ? ;receives number of bytes written
  19. OurStack FWORD ?
  20. OurDS    WORD  ?
  21. Stack16  DWORD ?
  22. ProgAddr DWORD ? 
  23. ReturnPoint FWORD ?       
  24. Entry16  DWORD ?
  25.  
  26. DATA16 ENDS
  27.  
  28. EXTERN DOS16WRITE:FAR16
  29. ASSUME ds:FLAT,ES:FLAT,SS:FLAT
  30.  
  31. CODE16 SEGMENT DWORD PUBLIC USE16 'CODE'
  32. Start16:
  33. call  F16 PTR FLAT:[ProgAddr]
  34. jmp   F32 PTR FLAT:[ReturnPoint]
  35.  
  36. CODE16 ENDS
  37.  
  38. CODE32 SEGMENT DWORD PUBLIC FLAT 'CODE'
  39. ;TASM would give error message for undefined symbol: FLAT
  40. EXTERN DOS32FLATTOSEL:NEAR
  41.  
  42. PRINT PROC NEAR
  43. push  ebp
  44. mov   ebp,esp
  45. push  ebx
  46. push  esi
  47. push  edi
  48. push  ebp
  49. mov   OurDS,ds
  50. mov   DWORD PTR OurStack,esp
  51. mov   WORD PTR OurStack+4,ss 
  52. mov   WORD PTR [Entry16+2],SEG Start16
  53. mov   WORD PTR [Entry16],OFFSET Start16
  54. mov   WORD PTR [ProgAddr+2],SEG DOS16WRITE
  55. mov   WORD PTR [ProgAddr],OFFSET DOS16WRITE
  56. mov   WORD PTR [ReturnPoint+4],cs
  57. mov   DWORD PTR [ReturnPoint],OFFSET Return1
  58. pushw 1; stdout handle
  59. push  DATA16
  60. push  OFFSET DATA16:msg ;segment & offset of msg
  61. pushw 16; length of data
  62. push  DATA16
  63. push  OFFSET DATA16:wlen ;16:16 pointer to number of bytes written
  64. mov   eax,esp
  65. call  DOS32FLATTOSEL
  66. mov   Stack16,eax
  67. lss   sp,Stack16                            
  68. ;call  Dos16Write ;OS/2 system function
  69. jmp   F16 PTR [Entry16]
  70. Return1:
  71. lss   esp,FLAT:OurStack
  72. mov   ds,FLAT:OurDS
  73. mov   es,FLAT:OurDS
  74. pop   ebp
  75. pop   edi
  76. pop   esi
  77. pop   ebx
  78. or    ax,ax; was write successful?
  79. jnz   Errer
  80. mov   eax,0 ;return success code
  81. leave
  82. ret
  83. Errer:
  84. mov   eax,1; return error code
  85. leave
  86. ret
  87. PRINT ENDP
  88. CODE32 ENDS
  89. END   PRINT
  90.