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