EXTERNAL.DOC 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. ; * WARNING WARNING WARNING WARNING WARNING WARNING WARNING *
  2. ; Please do not try to use external procedures
  3. ; unless you are familiar with assembly language.
  4. ;
  5. ; IMPORTANT: Externals must be written in assembly language.
  6. ;
  7. ; The following example translates a string to upper case.
  8. ;
  9. ; Place the following code in a file: "STU.ASM"
  10. ;
  11. CODE SEGMENT
  12. ASSUME CS:CODE
  13. STU PROC NEAR
  14. PUSH BP ; SAVE ENVIRONMENT
  15. MOV BP,SP ; MANUAL PAGE 189
  16. LES DI,[BP+4] ; GET PARAMETER
  17. MOV CL,ES:[DI]
  18. INC CL
  19. L1: DEC CL
  20. JZ L2
  21. INC DI
  22. CMP ES:BYTE PTR[DI],'a'
  23. JB L1
  24. CMP ES:BYTE PTR[DI],'z'
  25. JA L1
  26. SUB ES:BYTE PTR[DI],20H
  27. JMP SHORT L1
  28. L2: MOV SP,BP ; RESTORE ENVIRONMENT
  29. POP BP ; MANUAL PAGE 190
  30. RET 4
  31. STU ENDP
  32. CODE ENDS
  33. END
  34. ; Now exit to PC-DOS and type:
  35. ;
  36. ; ASM STU
  37. ; LINK STU
  38. ; EXE2BIN STU.EXE STU.COM
  39. ;
  40. ; IGNORE MINOR ERRORS FROM ASM AND LINK
  41. To use, write the following program:
  42. type
  43. AnyString = string[255];
  44. var
  45. S: AnyString;
  46. I: integer;
  47. procedure STU(var S: AnyString); external 'STU.COM';
  48. begin
  49. readln(S);
  50. STU(S);
  51. writeln(S);
  52. end.
  53. ; The above external procedure is only an example. You
  54. ; can achieve the same result in Turbo-Pascal:
  55. ;
  56. ; procedure STU(var S: AnyString);
  57. ; var
  58. ; I: integer;
  59. ; begin
  60. ; for I:=1 to Length(S) do S[I]:=Upcase(S[I]);
  61. ; end;
  62. ;
  63.