8086/87/88/186 MACRO ASSEMBLER INIT 15:28:29 09/18/90 PAGE 1 DOS 3.30 (038-N) 8086/87/88/186 MACRO ASSEMBLER V2.1 ASSEMBLY OF MODULE INIT OBJECT MODULE PLACED IN INIT.OBJ ASSEMBLER INVOKED BY: C:\SCA^\PLM86\ASM86.EXE INIT.ASM LOC OBJ LINE SOURCE 1 2 ; -------------------------PROGRAM IDENTIFIER--------------------------- 3 ; 4 ; Project : PLM86 5 ; 6 ; Program : INIT.ASM 7 ; 8 ; Purpose : PLM86 Test Harness 9 ; 10 ; Author : Mr S.C.Agate 11 ; 12 ; 13 ; Date Modification Details 14 ; ---- -------------------- 15 ; 16 ; 14-Aug-90 : Creation 17 ; 18 ; ---------------------------------------------------------------------- 19 20 NAME init 21 000D 22 cr EQU 0DH 000A 23 lf EQU 0AH 0009 24 p_str EQU 09H 000E 25 print_chr EQU 0EH 0007 26 ascii_conv EQU 'A'-'9'-1 27 28 PUBLIC param_count 29 PUBLIC param_list 30 31 EXTRN main:NEAR 32 ---- 33 code SEGMENT PUBLIC 'CODE' 34 ASSUME CS:code, DS:data, SS:stack 35 0000 36 power_up PROC NEAR 37 0000 B8---- R 38 begin: MOV AX,data 0003 8ED8 39 MOV DS,AX 0005 B8---- R 40 MOV AX,stack 0008 8ED0 41 MOV SS,AX 42 000A BA000090 R 43 MOV DX,OFFSET hello ;Print Sign-on Message 000E B409 44 MOV AH,p_str 0010 CD21 45 INT 21H 46 0012 E84C00 47 CALL transfer ;Copy PSP 80H onwards 48 0015 E80000 E 49 CALL main ;Enter PLM86 code 0018 A2A000 R 50 MOV exit_code,AL 8086/87/88/186 MACRO ASSEMBLER INIT 15:28:29 09/18/90 PAGE 2 LOC OBJ LINE SOURCE 51 001B BA6D0090 R 52 MOV DX,OFFSET goodbye ;Print Sign-off Message 001F B409 53 MOV AH,p_str 0021 CD21 54 INT 21H 0023 A0A000 R 55 MOV AL,exit_code 0026 E80D00 56 CALL print_hex 0029 B048 57 MOV AL,'H' 002B B40E 58 MOV AH,print_chr 002D CD10 59 INT 10H 60 002F B44C 61 MOV AH,4CH ;Terminate Program 0031 A0A000 R 62 MOV AL,exit_code 0034 CD21 63 INT 21H 64 65 power_up ENDP 66 0036 67 print_hex PROC NEAR 68 0036 50 69 PUSH AX ;AX=Number to print 0037 53 70 PUSH BX 0038 51 71 PUSH CX 0039 B10C 72 MOV CL,12 ;Print 16 bits 003B B104 73 MOV CL,04 ;Print 8 bits 003D 8BD8 74 MOV BX,AX 003F 8BC3 75 nibble_out: MOV AX,BX 0041 D3E8 76 SHR AX,CL 0043 E80C00 77 CALL print_nibble 0046 80E904 78 SUB CL,4 0049 80F9FC 79 CMP CL,-4 004C 75F1 80 JNZ nibble_out 004E 59 81 POP CX 004F 5B 82 POP BX 0050 58 83 POP AX 0051 C3 84 RET 85 0052 240F 86 print_nibble: AND AL,0FH ;Low nibble of AL is printed 0054 3C09 87 CMP AL,9 0056 7E02 88 JLE digit 0058 0407 89 ADD AL,ascii_conv 005A 0430 90 digit: ADD AL,'0' 005C B40E 91 MOV AH,print_chr 005E CD10 92 INT 10H 0060 C3 93 RET 94 95 print_hex ENDP 96 0061 97 transfer PROC NEAR 98 0061 BE8000 99 MOV SI,80H ;Offset into PSP 0064 BFB60090 R 100 MOV DI,OFFSET table_start ;Offset into DS copy of PSP 0068 BBA20090 R 101 MOV BX,OFFSET param_list ;Offset into pointer table 006C 268A0C 102 MOV CL,ES:[SI] ;Number of chars to read 006F B501 103 MOV CH,1 ;Set "Last chr a space" flag 0071 46 104 INC SI ;Point to first char 105 8086/87/88/186 MACRO ASSEMBLER INIT 15:28:29 09/18/90 PAGE 3 LOC OBJ LINE SOURCE 0072 80F900 106 get_next_chr: CMP CL,0H ;Any more chars? 0075 7433 107 JZ no_more 0077 268A04 108 MOV AL,ES:[SI] ;Get next char 007A 46 109 INC SI 007B FEC9 110 DEC CL 007D 3C20 111 CMP AL,20H ;See if its a space 007F 7411 112 JZ its_a_space ;Jump if present char a space 113 0081 80FD01 114 CMP CH,1 ;Was last char a space? 0084 7505 115 JNZ in_param 0086 893F 116 MOV [BX],DI ;Store pointer 0088 83C302 117 ADD BX,2 008B 8805 118 in_param: MOV [DI],AL ;Copy char to DS 008D 47 119 INC DI 008E B500 120 MOV CH,0 0090 EBE0 121 JMP get_next_chr 122 0092 80FD01 123 its_a_space: CMP CH,1 ;Was last char a space? 0095 740F 124 JZ between_params 0097 C60500 125 MOV BYTE PTR [DI],0 ;No, so put in EOL marker 009A 47 126 INC DI 009B FE06A100 R 127 INC param_count 009F 803EA1000A R 128 CMP param_count,10 ;Check for max no of params 00A4 7411 129 JZ no_0_needed 00A6 B501 130 between_params: MOV CH,1H 00A8 EBC8 131 JMP get_next_chr 132 00AA 80FD01 133 no_more: CMP CH,1H 00AD 7408 134 JZ no_0_needed 00AF C60500 135 MOV BYTE PTR [DI],0 00B2 47 136 INC DI 00B3 FE06A100 R 137 INC param_count 00B7 C3 138 no_0_needed: RET 139 140 transfer ENDP 141 ---- 142 code ENDS 143 ---- 144 stack SEGMENT PUBLIC 'STACK' 0000 (256 145 DB 100H DUP(0) 00 ) ---- 146 stack ENDS 147 ---- 148 data SEGMENT PUBLIC 'DATA' 149 0000 3D3D3D3D3D3D3D 150 hello DB '======= PLM86 Test Harness =======',cr,lf 20504C4D383620 54657374204861 726E657373203D 3D3D3D3D3D3D 0022 0D 0023 0A 0024 56657273696F6E 151 DB 'Version 1.0 (C) S.Agate Aug 90',cr,lf 20312E30202020 8086/87/88/186 MACRO ASSEMBLER INIT 15:28:29 09/18/90 PAGE 4 LOC OBJ LINE SOURCE 28432920532E41 67617465202020 417567203930 0046 0D 0047 0A 0048 2D2D2D2D2D2D2D 152 DB '----------------------------------',cr,lf,'$' 2D2D2D2D2D2D2D 2D2D2D2D2D2D2D 2D2D2D2D2D2D2D 2D2D2D2D2D2D 006A 0D 006B 0A 006C 24 153 006D 0D 154 goodbye DB cr,lf 006E 0A 006F 3D3D3D3D3D3D3D 155 DB '==================================',cr,lf 3D3D3D3D3D3D3D 3D3D3D3D3D3D3D 3D3D3D3D3D3D3D 3D3D3D3D3D3D 0091 0D 0092 0A 0093 4578697420636F 156 DB 'Exit code = $' 6465203D2024 157 00A0 ?? 158 exit_code DB ? 159 00A1 00 160 param_count DB 0 00A2 (10 161 param_list DW 10 DUP(0) 0000 ) 00B6 (128 162 table_start DB 80H DUP(0) 00 ) 163 ---- 164 data ENDS 165 166 END CS:begin, DS:data, SS:stack ASSEMBLY COMPLETE, NO ERRORS FOUND