XMACRO-86 3.4 19-Dec-80 PAGE 1 1 00100 ; TEST86: 8086 DISPATCHED MNEMONICS TEST ASSEMBLY 2 00200 3 C 00210 INCLUDE SEG 4 C 00100 ; SEG.MAC --Macros for Multisegment 8086 Code 5 C 00200 IMPORT MACRO NAME 6 C 00300 EXT NAME 7 C 00400 CALL NAME 8 C 00500 RETS 9 C 00600 ENDM 10 C 00700 EXPORT MACRO NAME,SEG 11 C 00800 ENTRY NAME 12 C 00900 NAME: CALL X&NAME,SEG 13 C 01000 RET 14 C 01100 ENDM 15 00220 ORG 0 16 00230 IMPORT FOO 17 0000' E8 FFFD* + CALL FOO 18 0003' CB + RETS 19 00240 IMPORT SUB2 20 0004' E8 FFF9* + CALL SUB2 21 0007' CB + RETS 22 00250 23 1000 00300 NEWSEG EQU X'1000' 24 00400 25 0008' 37 00500 AAA ; 1 ASCII ADJUST FOR ADDITION 26 0009' D5 0A 00600 AAD ; 2 ASCII ADJUST FOR DIVISION 27 000B' D4 0A 00700 AAM ; 2 ASCII ADJUST FOR MULTIPLICATION 28 000D' 3F 00800 AAS ; 1 ASCII ADJUST FOR SUBTRACTION 29 00900 30 000E' 13 C3 01000 ADC AX,BX ; 11 ADD WITH CARRY WORD 31 0010' 12 E3 01100 ADCB AH,BL ; 11 BYTE 32 0012' 14 01 01200 ADCBI AL,1 ; 13 ADD WITH CARRY BYTE IMMEDIATE 33 0014' 15 0002 01300 ADCI AX,2 ; 12 WORD 34 01400 35 0017' 03 CA 01500 ADD CX,DX ; 11 ADD WORD 36 0019' 02 CE 01600 ADDB CL,DH ; 11 BYTE 37 001B' 80 C4 03 01700 ADDBI AH,3 ; 13 ADD BYTE IMMEDIATE 38 001E' 83 C3 04 01800 ADDI BX,4 ; 12 WORD 39 01900 40 0021' 23 06 01A2' 02000 AND AX,HERE ; 11 AND WORD 41 0025' 22 06 00CC' 02100 ANDB AL,THERE ; 11 BYTE 42 0029' 80 E7 05 02200 ANDBI BH,5 ; 13 AND BYTE IMMEDAITE 43 002C' 81 E1 0006 02300 ANDI CX,6 ; 14 WORD 44 02400 45 0030' E8 016F' 02500 CALL HERE ; 15.1 CALL WITHIN SEGMENT 46 0033' 9A 01A2' 02600 CALL HERE,NEWSEG ; 15.2 INTERSEGMENT DIRECT 47 0036' 1000 48 0038' FF 16 01A2' 02700 CALLI HERE ; 16 CALL INDIRECT 49 003C' FF 9F 01A2' 02800 CALLL HERE[BX] ; 16 CALL INDIRECT LONG 50 02900 51 0040' 98 03000 CBW ; 1 CONVERT BYTE TO WORD 52 0041' F8 03100 CLC ; 1 CLEAR CARRY FLAG 53 0042' FC 03200 CLD ; 1 CLEAR DIRECTION FLAG 54 0043' FA 03300 CLI ; 1 CLEAR INTERRUPT FLAG 55 0044' F5 03400 CMC ; 1 COMPLEMENT CARRY FLAG 56 03500 XMACRO-86 3.4 19-Dec-80 PAGE 1-1 57 0045' 3B 9F 01A2' 03600 CMP BX,HERE[BX] ; 11 COMPARE WORD 58 0049' 3A BF 00CC' 03700 CMPB BH,THERE[BX] ; 11 BYTE 59 004D' 80 F9 07 03800 CMPBI CL,7 ; 13 COMPARE BYTE IMMEDIATE 60 0050' A6 03900 CMPC ; 1 COMPARE BYTE STRINGS 61 0051' 83 FA 08 04000 CMPI DX,8 ; 12 COMPARE IMMEDAITE 62 0054' A7 04100 CMPW ; 1 COMPARE WORD STRINGS 63 04200 64 0055' 99 04300 CWD ; 1 CONVERT WORD TO DOUBLE WORD 65 0056' 27 04400 DAA ; 1 DECIMAL ADJUST FOR ADDITION 66 0057' 2F 04500 DAS ; 1 DECIMAL ADJUST FOR SUBTRACTION 67 04600 68 0058' 4B 04700 DEC BX ; 7 DECREMENT WORD 69 0059' FE C8 04800 DECB AL ; 3 DECREMENT BYTE 70 005B' F7 F0 04900 DIV AX ; 3 UNSIGNED DIVIDE WORD 71 005D' F6 F4 05000 DIVB AH ; 3 UNSIGNED DIVIDE BYTE 72 05100 73 005F' DE 26 00CC' 05200 ESC 38,THERE ; 22 ESCAPE OPCODE TO PERIPHERAL 74 0063' F4 05300 HLT ; 1 HALT 75 05400 76 0064' F7 FB 05500 IDIV BX ; 3 SIGNED DIVIDE WORD 77 0066' F6 FB 05600 IDIVB BL ; 3 SIGNED DIVIDE BYTE 78 05700 79 0068' F7 E9 05800 IMUL CX ; 3 SIGNED MULTIPLY WORD 80 006A' F6 ED 05900 IMULB CH ; 3 SIGNED MULTIPLY BYTE 81 06000 82 006C' ED 06100 IN ; 5 INPUT WORD 83 006D' E4 01 06200 INB 1 ; 5 INPUT BYTE 84 006F' FF 07 06300 INC [BX] ; 7 INCREMENT WORD 85 0071' FE C2 06400 INCB DL ; 3 INCREMENT BYTE 86 0073' CD 02 06500 INT 2 ; 5 INTERRUPT 87 0075' CE 06600 INTO ; 1 INTERRUPT ON OVERFLOW 88 06700 89 0076' CF 06800 IRET ; 1 INTERRUPT RETURN 90 06900 91 0077' 77 53 07000 JA THERE ; 8 JUMP ON ABOVE 92 0079' 73 52 07100 JAE THERE+1 ; 8 JUMP ON ABOVE OR EQUAL 93 007B' 72 51 07200 JB THERE+2 ; 8 JUMP ON BELOW 94 007D' 76 50 07300 JBE THERE+3 ; 8 JUMP ON BELOW OR EQUAL 95 007F' E3 4F 07400 JCXZ THERE+4 ; 8 JUMP ON CX COUNT ZERO 96 0081' 74 4E 07500 JE THERE+5 ; 8 JUMP ON EQUAL 97 0083' 7F 47 07600 JG THERE ; 8 JUMP ON GREATER 98 0085' 7D 45 07700 JGE THERE ; 8 JUMP ON GREATER OR EQUAL 99 0087' 7C 43 07800 JL THERE ; 8 JUMP ON LESS THAN 100 0089' 7E 41 07900 JLE THERE ; 8 JUMP ON LESS THAN OR EQUAL 101 08000 102 008B' E9 0114' 08100 JMP HERE ; 15.1 JUMP WITHIN SEGMENT 103 008E' EA 01A2' 08200 JMP HERE,NEWSEG ; 15.2 INTERSEGMENT DIRECT 104 0091' 1000 105 0093' FF A2 01A2' 08300 JMPI HERE[BP+SI] ; 16 JUMP INDIRECT 106 0097' FF 2B 08400 JMPL [BP][DI] ; 16 JUMP INDIRECT LONG 107 0099' EB 31 08500 JMPS THERE ; 8 JUMP SHORT REACH 108 08600 109 009B' 76 2F 08700 JNA THERE ; 8 JUMP ON NOT ABOVE 110 009D' 72 2D 08800 JNAE THERE ; 8 JUMP ON NOT ABOVE OR EQUAL 111 009F' 73 2B 08900 JNB THERE ; 8 JUMP ON NOT BELOW 112 00A1' 77 29 09000 JNBE THERE ; 8 JUMP ON NOT BELOW OR EQUAL XMACRO-86 3.4 19-Dec-80 PAGE 1-2 113 00A3' 75 27 09100 JNE THERE ; 8 JUMP ON NOT EQUAL 114 00A5' 7E 25 09200 JNG THERE ; 8 JUMP ON NOT GREATER 115 00A7' 7C 23 09300 JNGE THERE ; 8 JUMP ON NOT GREATER OR EQUAL 116 00A9' 7D 21 09400 JNL THERE ; 8 JUMP ON NOT LESS THAN 117 00AB' 7F 1F 09500 JNLE THERE ; 8 JUMP ON NOT LESS THAN OR EQUAL 118 00AD' 71 1D 09600 JNO THERE ; 8 JUMP ON NOT OVERFLOW 119 00AF' 7B 1B 09700 JNP THERE ; 8 JUMP ON NOT PARITY EVEN 120 00B1' 79 19 09800 JNS THERE ; 8 JUMP ON NOT SIGN 121 00B3' 75 17 09900 JNZ THERE ; 8 JUMP ON NOT ZERO 122 00B5' 70 15 10000 JO THERE ; 8 JUMP ON OVERFLOW 123 00B7' 7A 13 10100 JP THERE ; 8 JUMP ON PARITY EVEN 124 00B9' 7A 11 10200 JPE THERE ; 8 JUMP ON PARITY EVEN 125 00BB' 7B 0F 10300 JPO THERE ; 8 JUMP ON PARITY ODD 126 00BD' 78 0D 10400 JS THERE ; 8 JUMP ON SIGN 127 00BF' 74 0B 10500 JZ THERE ; 8 JUMP ON ZERO 128 10600 129 00C1' 9F 10700 LAHF ; 1 LOAD AH FROM FLAGS 130 00C2' C5 1E 01A2' 10800 LDS BX,HERE ; 4 LOAD POINTER TO DATA SEG REG 131 00C6' 8D 0F 10900 LEA CX,[BX] ; 4 LOAD EFFECTIVE ADDRESS TO REG 132 00C8' C4 16 00CC' 11000 LES DX,THERE ; 4 LOAD POINTER TO EXTRA SEG 133 11100 134 00CC' 11200 THERE: DS 6 135 11300 136 00D2' F0 11400 LOCK ; 1 BUS LOCK PREFIX 137 00D3' AC 11500 LODC ; 1 LOAD BYTE STRING 138 00D4' AD 11600 LODW ; 1 LOAD WORD STRING 139 11700 140 00D5' E2 F5 11800 LOOP THERE ; 8 REPEAT LOOP CX TIMES 141 00D7' E1 F3 11900 LOOPE THERE ; 8 WHILE EQUAL OR ZERO 142 00D9' E0 F1 12000 LOOPNE THERE ; 8 WHILE NOT EQUAL OR NON-ZERO 143 00DB' E0 EF 12100 LOOPNZ THERE ; 8 WHILE NOT EQUAL OFR NON-ZERO 144 00DD' E1 ED 12200 LOOPZ THERE ; 8 WHILE EQUAL OR ZERO 145 12300 146 00DF' 8C C8 12400 MOV AX,CS ; 21 MOVE WORD 147 00E1' 88 8F 00CC' 12500 MOVB THERE[BX],CL ; 20 MOVE BYTE 148 00E5' B7 03 12600 MOVBI BH,3 ; 19 MOVE BYTE IMMEDIATE 149 00E7' A4 12700 MOVC ; 1 MOVE BYTE STRING 150 00E8' C7 06 5000 12800 MOVI YONDER,YONDER ; 18 MOVE WORD IMMEDIATE 151 00EC' 5000 152 00EE' A5 12900 MOVW ; 1 MOVE WORD STRING 153 13000 154 00EF' F7 26 01A2' 13100 MUL HERE ; 3 UNSIGNED MULTIPLY WORD 155 00F3' F6 26 01A3' 13200 MULB HERE+1 ; 3 UNSIGNED MULTIPLY BYTE 156 13300 157 00F7' F7 1E 01A4' 13400 NEG HERE+2 ; 3 NEGATE WORD 158 00FB' F6 1E 01A5' 13500 NEGB HERE+3 ; 3 NEGATE BYTE 159 00FF' 90 13600 NOP ; 1 NO OPERATION 160 0100' F7 16 00CC' 13700 NOT THERE ; 3 COMPLEMENT WORD 161 0104' F6 16 00CD' 13800 NOTB THERE+1 ; 3 CONPLEMENT BYTE 162 13900 163 0108' 0B 8C 01A2' 14000 OR CX,HERE[SI] ; 11 OR WORD 164 010C' 0A AC 00CC' 14100 ORB CH,THERE[SI] ; 11 BYTE 165 0110' 80 CE 09 14200 ORBI DH,9 ; 13 OR BYTE IMMEDIATE 166 0113' 81 CC 000A 14300 ORI SP,10 ; 14 OR WORD IMMEDIATE 167 14400 168 0117' E7 03 14500 OUT 3 ; 5 OUTPUT WORD XMACRO-86 3.4 19-Dec-80 PAGE 1-3 169 0119' E6 04 14600 OUTB 4 ; 5 OUTPUT BYTE 170 14700 171 011B' 0F 14800 POP CS ; 6 POP FROM STACK 172 011C' 9D 14900 POPF ; 1 POP FLAGS FROM STACK 173 011D' FF B5 01A2' 15000 PUSH HERE[DI] ; 6 PUSH ONTO STACK 174 0121' 9C 15100 PUSHF ; 1 PUSH FLAGS ONTO STACK 175 15200 176 0122' D1 D0 15300 RCL AX ; 10 ROTATE THROUGH CARRY LEFT WORD 177 0124' D0 D4 15400 RCLB AH ; 10 BYTE 178 0126' D1 DB 15500 RCR BX ; 10 ROTATE THROUGH CARRY RIGHT WORD 179 0128' D0 DD 15600 RCRB CH ; 10 BYTE 180 15700 181 012A' F3 15800 REP ; 1 REPEAT STRING OPERATION 182 012B' F3 15900 REPE ; 1 183 012C' F2 16000 REPNE ; 1 184 012D' F2 16100 REPNZ ; 1 185 012E' F3 16200 REPZ ; 1 186 16300 187 012F' C3 16400 RET ; 17 RETURN 188 0130' C2 0005 16500 RET 5 ; 17 RETURN AND ADJUST STACK 189 16600 190 0133' CB 16700 RETS ; 17 RETURN INTER SEGMENT 191 0134' CA FFFE 16800 RETS -2 ; 17 RETURN INTER SEGMENT ADJ STKACK 192 16900 193 0137' D3 C3 17000 ROL BX,CL ; 10 ROTATE LEFT WORD 194 0139' D2 C3 17100 ROLB BL,CL ; 10 BYTE 195 013B' D3 C9 17200 ROR CX,CL ; 10 ROTATE RIGHT WORD 196 013D' D2 CD 17300 RORB CH,CL ; 10 BYTE 197 17400 198 013F' 9E 17500 SAHF ; 1 STORE AH INTO FLAGS 199 17600 200 0140' D1 26 01A2' 17700 SAL HERE ; 10 SHIFT LEFT WORD 201 0144' D0 26 00CC' 17800 SALB THERE ; 10 BYTE 202 0148' D1 3E 5000 17900 SAR YONDER ; 10 SHIFT ARITHMETIC RIGHT WORD 203 014C' D2 3E 01A2' 18000 SARB HERE,CL ; 10 BYTE 204 18100 205 0150' 1B 95 01A2' 18200 SBB DX,HERE[DI] ; 11 SUBTRACT WITH BORROW WORD 206 0154' 1A 95 00CC' 18300 SBBB DL,THERE[DI] ; 11 BYTE 207 0158' 80 DD 21 18400 SBBBI CH,33 ; 13 SUBTRACT BYTE WITH BORROW 208 015B' 83 DD 21 18500 SBBI BP,33 ; 12 WORD 209 18600 210 015E' AE 18700 SCAC ; 1 SCAN BYTE STRING 211 015F' AF 18800 SCAW ; 1 SCAN WORD STRING 212 18900 213 0160' D1 E2 19000 SHL DX ; 10 SHIFT LEFT WORD 214 0162' D0 E2 19100 SHLB DL ; 10 BYTE 215 0164' D1 ED 19200 SHR BP ; 10 SHIFT LOGICAL RIGHT WORD 216 0166' D0 EE 19300 SHRB DH ; 10 BYTE 217 19400 218 0168' F9 19500 STC ; 1 SET CARRY FLAG 219 0169' FD 19600 STD ; 1 SET DIRECTION FLAG 220 016A' FB 19700 STI ; 1 SET INTERRUPT FLAG 221 016B' AA 19800 STOC ; 1 STORE BYTE STRING 222 016C' AB 19900 STOW ; 1 STORE WORD STRING 223 20000 224 016D' 2B A2 01A2' 20100 SUB SP,HERE[BP][SI] ; 11 SUBTRACT WORD XMACRO-86 3.4 19-Dec-80 PAGE 1-4 225 0171' 2A A2 00CC' 20200 SUBB AH,THERE[BP+SI] ; 11 BYTE 226 0175' 80 EB 21 20300 SUBBI BL,33 ; 13 SUBTRACT BYTE IMMEDIATE 227 0178' 83 EE 21 20400 SUBI SI,33 ; 12 WORD 228 20500 229 017B' 85 A9 01A2' 20600 TEST BP,HERE[BX][DI] ; 11 TEST AND SET FLAGS WORD 230 017F' 84 B9 00CC' 20700 TESTB BH,THERE[BX+DI] ; 11 BYTE 231 0183' F6 C2 21 20800 TESTBI DL,33 ; 13 TEST BYTE IMMEDIATE 232 0186' F7 C7 0021 20900 TESTI DI,33 ; 14 WORD 233 21000 234 018A' 9B 21100 WAIT ; 1 WAIT STATE 235 018B' 92 21200 XCHG AX,DX ; 9 EXCHANGE CONTENTS WORD 236 018C' 86 A8 01A2' 21300 XCHGB HERE[BX][SI],CH ; 11 EXCHANGE CONTENTS BYTE 237 0190' D7 21400 XLAT ; 1 TRANSLATE 238 21500 239 0191' 31 B0 01A2' 21600 XOR HERE[BX][SI],SI ; 11 EXCLUSIVE OR WORD 240 0195' 30 B0 00CC' 21700 XORB THERE[BX+SI],DH ; 11 BYTE 241 0199' 34 21 21800 XORBI AL,33 ; 13 EXCLUSIVE OR BYTE IMMEDIATE 242 019B' 35 01A2' 21900 XORI AX,HERE ; 14 WORD 243 22000 244 019E' 2E 22100 $CS ; 1 CODE SEGMENT OVERRIDE 245 019F' 3E 22200 $DS ; 1 DATA SEGMENT OVERRIDE 246 01A0' 26 22300 $ES ; 1 EXTRA SEGMENT OVERRIDE 247 01A1' 36 22400 $SS ; 1 STACK SEGMENT OVERRIDE 248 22500 249 01A2' 22600 HERE: DS 4 250 22700 251 22800 ;--------------- 252 01A6' 22900 ASEG 253 23000 ORG X'5000' 254 5000 23100 YONDER: 255 23200 256 23300 END XMACRO-86 3.4 19-Dec-80 PAGE S Macros: EXPORT IMPORT Symbols: FOO 0001* HERE 01A2' NEWSEG 1000 SUB2 0005* THERE 00CC' YONDER 5000 No Fatal error(s) EXPORT 10# FOO 17# 17 HERE 40 45 46 48 49 57 102 103 105 130 154 155 157 158 163 173 200 203 205 224 229 236 239 242 249# IMPORT 5# 16 19 NEWSEG 23# 46 103 SUB2 20# 20 THERE 41 58 73 91 92 93 94 95 96 97 98 99 100 107 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 132 134# 140 141 142 143 144 147 160 161 164 201 206 225 230 240 YONDER 150 150 202 254# 4 155