]>
wirehaze git hosting - MS-DOS.git/blob - v2.0/source/DEBASM.ASM
3 ; Code for the ASSEMble command in the debugger
13 CODE SEGMENT PUBLIC BYTE 'CODE'
16 CONST
SEGMENT PUBLIC BYTE
18 EXTRN DBMN
:BYTE,CSSAVE
:WORD,REG8
:BYTE,REG16
:BYTE,SIZ8
:BYTE
19 EXTRN SYNERR
:BYTE,OPTAB
:BYTE,MAXOP
:ABS
23 DATA SEGMENT PUBLIC BYTE
25 EXTRN HINUM
:WORD,LOWNUM
:WORD,ASSEM_CNT
:BYTE
26 EXTRN ASSEM1
:BYTE,ASSEM2
:BYTE,ASSEM3
:BYTE,ASSEM4
:BYTE,ASSEM5
:BYTE
27 EXTRN ASSEM6
:BYTE,OPBUF
:BYTE,OPCODE
:WORD,REGMEM
:BYTE,INDEX
:WORD
28 EXTRN ASMADD
:BYTE,ASMSP
:WORD,MOVFLG
:BYTE,SEGFLG
:BYTE,TSTFLG
:BYTE
29 EXTRN NUMFLG
:BYTE,DIRFLG
:BYTE,BYTEBUF
:BYTE,F8087
:BYTE,DIFLG
:BYTE
30 EXTRN SIFLG
:BYTE,BXFLG
:BYTE,BPFLG
:BYTE,NEGFLG
:BYTE,MEMFLG
:BYTE
31 EXTRN REGFLG
:BYTE,AWORD
:BYTE,MIDFLD
:BYTE,MODE
:BYTE
35 DG GROUP
CODE,CONST
,DATA
38 CODE SEGMENT PUBLIC BYTE 'CODE'
39 ASSUME
CS:DG
,DS:DG
,ES:DG
,SS:DG
42 PUBLIC DB_OPER
,DW_OPER
,ASSEMLOOP
,GROUP2
,AA_OPER
,DCINC_OPER
43 PUBLIC GROUP1
,ESC_OPER
,FGROUPP
,FGROUPX
,FDE_OPER
,FGROUPZ
44 PUBLIC FD9_OPER
,FGROUP
,FDB_OPER
,FGROUPB
,FGROUP3
,FGROUP3W
45 PUBLIC FGROUPDS
,INT_OPER
,IN_OPER
,DISP8_OPER
,JMP_OPER
,NO_OPER
46 PUBLIC OUT_OPER
,L_OPER
,MOV_OPER
,POP_OPER
,PUSH_OPER
,ROTOP
47 PUBLIC TST_OPER
,EX_OPER
,GET_DATA16
,CALL_OPER
49 EXTRN INBUF
:NEAR,SCANB
:NEAR,SCANP
:NEAR,GETHX
:NEAR,GET_ADDRESS
:NEAR
50 EXTRN DEFAULT
:NEAR,OUTDI
:NEAR,BLANK
:NEAR,PRINTMES
:NEAR,TAB
:NEAR
53 ; Line by line assembler
57 MOV BP,[CSSAVE
] ; Default code segment
58 MOV DI,OFFSET DG
:ASMADD
; Default address
60 MOV WORD PTR [ASMADD
],DX ; Displacement of disassembly
61 MOV WORD PTR [ASMADD
+2],AX ; Segment
62 MOV [ASMSP
],SP ; Save sp in case of error
65 MOV SP,[ASMSP
] ; Restore sp in case of error
66 LES DI,DWORD PTR ASMADD
; GET PC
67 CALL OUTDI
; OUTPUT ADDRESS
68 CALL BLANK
; SKIP A SPACE
71 CALL INBUF
; GET A BUFFER
74 RET ; IF EMPTY JUST RETURN
76 ; At this point ds:si points to the opcode mnemonic...
78 OPLOOK: XOR CX,CX ; OP-CODE COUNT = 0
81 OPLOOP: MOV AL,[DI+BX]
85 INC CX ; INCREMENT OP-CODE COUNT
86 CMP CX,MAXOP
; CHECK FOR END OF LIST
89 OP1: INC DI ; SCAN FOR NEXT OP-CODE...
90 TEST BYTE PTR [DI-1],80H
94 OPMATCH:INC BX ; COMPARE NEXT CHAR
95 TEST BYTE PTR [DI+BX-1],80H
; ARE WE DONE?
96 JZ OPLOOP
; ..IF NOT KEEP COMPARING
101 ADD AX,OFFSET DG
:OPTAB
104 ; CX = COUNT OF CHARS IN OPCODE
105 ; BX = POINTER INTO OPCODE TABLE
108 MOV BYTE PTR [AWORD
],AL
109 MOV WORD PTR [MOVFLG
],AX ; MOVFLG + TSTFLG
110 MOV BYTE PTR [SEGFLG
],AL ; ZERO SEGMENT REGISTER FLAG
111 MOV AH,00001010B ; SET UP FOR AA_OPER
113 MOV WORD PTR [ASSEM1
],AX
114 MOV BYTE PTR [ASSEM_CNT
],1
116 ADD SI,CX ; SI POINTS TO OPERAND
119 ; 8087 INSTRUCTIONS WITH NO OPERANDS
131 MOV WORD PTR [ASSEM1
],AX
133 ; aad and aam instrucions
135 AA_OPER:INC BYTE PTR [ASSEM_CNT
]
137 ; instructions with no operands
157 POP1: MOV [ASSEM1
],AH
159 INC BYTE PTR [MOVFLG
] ; ALLOW SEGMENT REGISTERS
160 MOV BYTE PTR [AWORD
],2 ; MUST BE 16 BITS
167 CMP BYTE PTR [MOVFLG
],2
171 CMP BYTE PTR [MIDFLD
],0
178 CMP BYTE PTR [MIDFLD
],0
181 POP3: MOV BYTE PTR [DI+1],AL
184 ; ret and retf instructions
191 DEC BYTE PTR [ASSEM1
] ; CHANGE OP-CODE
192 ADD BYTE PTR [ASSEM_CNT
],2 ; UPDATE LENGTH
193 MOV WORD PTR [ASSEM2
],DX ; SAVE OFFSET
194 DATRET: JMP ASSEM_EXIT
206 INC BYTE PTR [ASSEM1
]
214 CMP AX,"A"+4C00H
; "AL"
216 CMP AX,"A"+5800H
; "AX"
219 IN_0: INC BYTE PTR [ASSEM1
]
221 CMP WORD PTR [SI],"D"+5800H
; "DX"
226 AND BYTE PTR [ASSEM1
],11110111B
234 CMP WORD PTR [SI],"D"+5800H
; "DX"
239 OUT_0: AND BYTE PTR [ASSEM1
],11110111B
243 INC BYTE PTR [ASSEM_CNT
]
244 MOV BYTE PTR [ASSEM2
],DL
247 CMP AX,"A"+4C00H
; "AL"
249 CMP AX,"A"+5800H
; "AX"
251 INC BYTE PTR [ASSEM1
]
258 INC BYTE PTR [TSTFLG
]
263 MOV BYTE PTR [ASSEM1
],11111111B
264 MOV BYTE PTR [MIDFLD
],AL
267 CMP BYTE PTR [MEMFLG
],0
269 CMP BYTE PTR [REGMEM
],-1
272 ; INDIRECT JUMPS OR CALLS
274 CALLJ1: CMP BYTE PTR [AWORD
],1
276 CMP BYTE PTR [AWORD
],4
278 OR BYTE PTR [DI+2],1000B
281 ; DIRECT JUMPS OR CALLS
283 CALLJ2: MOV AX,[LOWNUM
]
286 CMP BYTE PTR [NUMFLG
],0
289 ; BL = NUMBER OF BYTES IN JUMP
298 MOV AL,10011010B ; SET UP INTER SEGMENT CALL
299 CMP BYTE PTR [TSTFLG
],0
301 MOV AL,11101010B ; FIX UP FOR JUMP
302 CALLJ5: MOV BYTE PTR [DI+1],AL
303 CMP BL,4 ; FAR SPECIFIED?
307 CMP DX,WORD PTR [ASMADD
+2] ; DIFFERENT SEGMENT?
310 CALLJ6: MOV BYTE PTR [DI],3
311 MOV AL,11101000B ; SET UP FOR INTRASEGMENT
313 MOV BYTE PTR [DI+1],AL
316 SUB AX,WORD PTR [ASMADD
]
319 CMP BYTE PTR [TSTFLG
],0
329 MOV BYTE PTR [DI+1],11101011B
332 ASMEX4: JMP ASSEM_EXIT
334 ; conditional jumps and loop instructions
337 MOV BP,WORD PTR [ASMADD
+2] ; GET DEFAULT DISPLACEMENT
339 SUB DX,WORD PTR [ASMADD
]
345 DISPX: INC [ASSEM_CNT
]
346 MOV BYTE PTR [ASSEM2
],AL
347 ASMEX3: JMP ASSEM_EXIT
349 ; lds, les, and lea instructions
355 MOV DI,OFFSET DG
:REG16
357 JZ ERRV2
; CX = 0 MEANS NO REGISTER
361 MOV BYTE PTR [MIDFLD
],AL
364 CMP BYTE PTR [AWORD
],0
369 ; dec and inc instructions
372 MOV BYTE PTR [ASSEM1
],11111110B
373 MOV BYTE PTR [MIDFLD
],AL
376 TEST BYTE PTR [DI+1],1
385 ASEXV: JMP ASSEM_EXIT
407 ; 8087 arithmetic instuctions
411 ; OPERANDS THAT ALLOW THE REVERSE BIT
417 CMP BYTE PTR [MODE
],11000000B
422 OR [DI+1],AL ; IF D=1...
423 XOR BYTE PTR [DI+2],00001000B ; ...REVERSE THE SENSE OF R
427 ; Here when instruction could have memory or register operand
430 CALL SETMID
; THIS ENTRY POINT FOR 1 MEM OPER
431 MOV BYTE PTR [DIRFLG
],0
438 CMP BYTE PTR [MODE
],11000000B
444 FEXIT: JMP ASSEM_EXIT
446 ; These 8087 instructions require a memory operand
449 MOV AH,5 ; MUST BE TBYTE
452 MOV AH,2 ; MUST BE WORD
455 MOV AH,-1 ; SIZE CANNOT BE SPECIFIED
460 CMP BYTE PTR [MODE
],11000000B
466 ; These 8087 instructions require a register operand
468 FGROUPP: ; 8087 POP OPERANDS
469 MOV BYTE PTR [AWORD
],-1
472 CMP BYTE PTR [DIRFLG
],0
476 FGROUPZ: ; ENTRY POINT WHERE ARG MUST BE MEM
478 MOV BYTE PTR [DIRFLG
],0
480 CMP BYTE PTR [MODE
],11000000B
486 ; not, neg, mul, imul, div, and idiv instructions
489 MOV [ASSEM1
],11110110B
491 MOV BYTE PTR [MIDFLD
],AL
496 ; shift and rotate instructions
499 MOV [ASSEM1
],11010000B
500 MOV BYTE PTR [MIDFLD
],AL
504 CMP BYTE PTR [SI],"1"
506 CMP WORD PTR [SI],"LC" ; CL
509 ROTOP1: OR BYTE PTR [ASSEM1
],10B
510 ASMEXV1:JMP ASSEM_EXIT
515 INC BYTE PTR [TSTFLG
]
520 INC BYTE PTR [TSTFLG
]
526 INC BYTE PTR [MOVFLG
]
530 ; add, adc, sub, sbb, cmp, and, or, xor instructions
533 MOV BYTE PTR [ASSEM1
],10000000B
535 MOV BYTE PTR [MIDFLD
],AL
540 CALL SCANP
; POINT TO NEXT OPERAND
541 MOV AL,BYTE PTR [ASSEM_CNT
]
547 MOV BL,BYTE PTR [AWORD
]
552 OR BYTE PTR [DI+1],BL
554 CMP BYTE PTR [MEMFLG
],0
556 CMP BYTE PTR [NUMFLG
],0 ; TEST FOR IMMEDIATE DATA
558 CMP BYTE PTR [SEGFLG
],0
560 CMP BYTE PTR [TSTFLG
],2 ; XCHG?
565 ; SECOND OPERAND WAS IMMEDIATE
567 IMMED1: MOV AL,BYTE PTR [DI+2]
568 CMP BYTE PTR [MOVFLG
],0
572 JNZ GRP23
; not to a register
573 ; MOVE IMMEDIATE TO REGISTER
574 MOV AL,BYTE PTR [DI+1]
580 OR AL,BYTE PTR [DI+2] ; SET REGISTER
583 MOV BYTE PTR [DI+1],AL
584 MOV AX,WORD PTR [LOWNUM
]
585 MOV WORD PTR [DI+2],AX
591 NOTMOV1:AND AL,11000111B
593 JZ IMMACC
; IMMEDIATE TO ACC
595 CMP BYTE PTR [TSTFLG
],0
597 CMP BYTE PTR [MIDFLD
],1*8 ; OR?
599 CMP BYTE PTR [MIDFLD
],4*8 ; AND?
601 CMP BYTE PTR [MIDFLD
],6*8 ; XOR?
603 TEST BYTE PTR [DI+1],1 ; TEST IF BYTE OPCODE
610 JNZ GRP23
; SMALL ENOUGH?
614 OR BYTE PTR [DI+1],10B
617 IMMACC: MOV AL,BYTE PTR [DI+1]
619 CMP BYTE PTR [TSTFLG
],0
623 NOTTST: OR AL,BYTE PTR [MIDFLD
]
625 TEST1: MOV BYTE PTR [DI+1],AL
628 GRP23: MOV BL,BYTE PTR [DI]
632 MOV AX,WORD PTR [LOWNUM
]
635 TEST BYTE PTR [DI+1],1
640 ; SECOND OPERAND WAS MEMORY OR REGISTER
643 CMP BYTE PTR [SEGFLG
],0
644 JZ GRP28
; FIRST OPERAND WAS A SEGMENT REG
645 MOV AL,BYTE PTR [REGMEM
]
650 OR BYTE PTR [DI+2],AL
651 AND BYTE PTR [DI+1],11111110B
652 CMP BYTE PTR [MEMFLG
],0
656 GRP28: AND BYTE PTR [DI+2],11000111B
657 MOV AL,BYTE PTR [DI+1] ; GET FIRST OPCODE
659 CMP BYTE PTR [MOVFLG
],0
663 NOTMOV2:CMP BYTE PTR [TSTFLG
],0
666 CMP BYTE PTR [TSTFLG
],2
669 NOTTST2:OR AL,BYTE PTR [MIDFLD
] ; MIDFLD IS ZERO FOR TST
670 MOV1: MOV BYTE PTR [DI+1],AL
671 CMP BYTE PTR [MEMFLG
],0
674 ; SECOND OPERAND WAS A REGISTER
676 MOV AL,BYTE PTR [REGMEM
]
677 TEST AL,10000B ; SEGMENT REGISTER?
679 CMP BYTE PTR [MOVFLG
],0
681 MOV BYTE PTR [DI+1],10001100B
687 OR BYTE PTR [DI+2],AL
689 ; SPECIAL FORM OF THE EXCHANGE COMMAND
691 CMP BYTE PTR [TSTFLG
],2
693 TEST BYTE PTR [DI+1],1
696 MOV AL,BYTE PTR [DI+2]
698 CMP AL,11000000B ; MUST BE REGISTER TO REGISTER
707 SHR BYTE PTR [DI+2],CL
711 MOV BYTE PTR [DI+1],AL
715 ; SECOND OPERAND WAS A MEMORY REFERENCE
717 GRP22: CMP BYTE PTR [TSTFLG
],0
719 OR BYTE PTR [DI+1],10B
720 TST2: MOV AL,BYTE PTR [DI+2]
721 CMP AL,11000000B ; MUST BE A REGISTER
723 CMP BYTE PTR [SEGFLG
],0
731 GRP222: OR AL,BYTE PTR [MODE
]
732 OR AL,BYTE PTR [REGMEM
]
733 MOV BYTE PTR [DI+2],AL
734 MOV AX,WORD PTR [LOWNUM
]
735 MOV WORD PTR [DI+3],AX
736 GRPSIZ: MOV BYTE PTR [DI],2
737 MOV AL,BYTE PTR [DI+2]
746 GRP24: INC BYTE PTR [DI]
747 GRP25: INC BYTE PTR [DI]
749 GRPEX: CMP BYTE PTR [MOVFLG
],0
752 ; TEST FOR SPECIAL FORM OF MOV AX,[MEM] OR MOV [MEM],AX
754 MOV AL,[DI+1] ; GET OP-CODE
758 CMP BYTE PTR [DI+2],00000110B ; MEM TO AX OR AX TO MEM
760 MOV AL,BYTE PTR [DI+1]
764 MOV BYTE PTR [DI+1],AL
767 MOV WORD PTR [DI+2],AX
773 ; Assem error. SI points to character in the input buffer
774 ; which caused error. By subtracting from start of buffer,
775 ; we will know how far to tab over to appear directly below
776 ; it on the terminal. Then print "^ Error".
779 SUB SI,OFFSET DG
:(BYTEBUF
-10) ; How many char processed so far?
780 MOV CX,SI ; Parameter for TAB in CX
781 CALL TAB
; Directly below bad char
782 MOV SI,OFFSET DG
:SYNERR
; Error message
786 ; assemble the different parts into an instruction
789 MOV AL,BYTE PTR [AWORD
]
795 OR BYTE PTR [DI+1],AL ; SET THE SIZE
797 BUILD2: CMP BYTE PTR [NUMFLG
],0 ; TEST FOR IMMEDIATE DATA
799 CMP BYTE PTR [MEMFLG
],0
802 BUILD3: MOV AL,BYTE PTR [REGMEM
]
805 TEST AL,10000B ; TEST IF SEGMENT REGISTER
807 CMP BYTE PTR [MOVFLG
],0
809 MOV WORD PTR [DI+1],10001110B
810 INC BYTE PTR [MOVFLG
]
811 INC BYTE PTR [SEGFLG
]
816 OR AL,BYTE PTR 11000000B
817 MOV BYTE PTR [DI+2],AL
820 BLD1: AND AL,00000111B
821 BLD4: OR AL,BYTE PTR [MODE
]
822 OR AL,BYTE PTR [MIDFLD
]
823 MOV BYTE PTR [DI+2],AL
824 MOV AX,WORD PTR [LOWNUM
]
825 MOV WORD PTR [DI+3],AX
829 MOV BYTE PTR [F8087
],0
833 MOV WORD PTR [LOWNUM
],AX ; OFFSET
834 MOV WORD PTR [DIFLG
],AX ; DIFLG+SIFLG
835 MOV WORD PTR [BXFLG
],AX ; BXFLG+BPFLG
836 MOV WORD PTR [NEGFLG
],AX ; NEGFLG+NUMFLG
837 MOV WORD PTR [MEMFLG
],AX ; MEMFLG+REGFLG
839 CMP BYTE PTR [F8087
],0
841 MOV AL,1 ; DEFAULT 8087 REG IS 1
842 PUTREG: MOV BYTE PTR [REGMEM
],AL
844 GETLOOP:MOV BYTE PTR [NEGFLG
],0
861 ; DETERMINE THE MODE BITS
863 GOMODE: MOV DI,OFFSET DG
:ASSEM_CNT
864 MOV BYTE PTR [MODE
],11000000B
865 MOV BYTE PTR [ASSEM_CNT
],2
866 CMP BYTE PTR [MEMFLG
],0
875 CMP AL,0DCH ; ARITHMETIC?
877 MOV BYTE PTR [DI+1],0DEH ; ADD POP TO NULL ARG 8087
881 GOMODE1:MOV BYTE PTR [MODE
],0
882 CMP BYTE PTR [NUMFLG
],0
886 MOV AX,WORD PTR [DIFLG
]
887 OR AX,WORD PTR [BXFLG
]
889 MOV BYTE PTR [REGMEM
],00000110B
892 GOMODE2:MOV BYTE PTR [MODE
],10000000B
897 MOV BYTE PTR [MODE
],01000000B
899 ; DETERMINE THE REG-MEM BITS
902 MOV BX,WORD PTR [BXFLG
]
903 MOV CX,WORD PTR [DIFLG
]
934 CMP BYTE PTR [MODE
],0
936 MOV BYTE PTR [MODE
],01000000B
939 GOREG1: INC DL ; BX+DISP
940 GOGO: MOV BYTE PTR [REGMEM
],DL
943 GETINFO:CMP AX,'EN' ; NEAR
954 MOV DI,OFFSET DG
:SIZ8
955 CALL CHKREG
; LOOK FOR BYTE, WORD, DWORD, ETC.
963 CMP BYTE PTR [F8087
],0
965 CMP AX,"TS" ; 8087 STACK OPERAND
967 CMP BYTE PTR [SI+2],","
969 MOV BYTE PTR [DIRFLG
],0
973 GETREG5:CMP AX,"HS" ; SHORT
978 CMP BYTE PTR [SI+2],"R"
986 GETREG6:INC BYTE PTR [MEMFLG
]
998 INC BYTE PTR [NEGFLG
]
1002 GETREG8: ; LOOK FOR A REGISTER
1003 CMP BYTE PTR [F8087
],0
1007 CMP BYTE PTR [SI+2],"("
1009 CMP BYTE PTR [SI+4],")"
1017 INC BYTE PTR [REGFLG
]
1019 CMP WORD PTR [SI],"S,"
1021 CMP BYTE PTR [SI+2],"T"
1028 MOV DI,OFFSET DG
:REG8
1030 JZ GETREG12
; CX = 0 MEANS NO REGISTER
1031 MOV BYTE PTR [REGMEM
],AL
1032 INC BYTE PTR [REGFLG
] ; TELL EVERYONE WE FOUND A REG
1033 CMP BYTE PTR [MEMFLG
],0
1039 NOSIZE: CMP AL,11 ; BX REGISTER?
1041 CMP WORD PTR [BXFLG
],0
1045 GETOK: INC BYTE PTR [BXFLG
]
1048 CMP AL,13 ; BP REGISTER?
1050 CMP WORD PTR [BXFLG
],0
1052 INC BYTE PTR [BPFLG
]
1055 CMP AL,14 ; SI REGISTER?
1057 CMP WORD PTR [DIFLG
],0
1059 INC BYTE PTR [SIFLG
]
1062 CMP AL,15 ; DI REGISTER?
1063 JNZ ASMPOP
; *** error
1064 CMP WORD PTR [DIFLG
],0
1066 INC BYTE PTR [DIFLG
]
1069 GETREG12: ; BETTER BE A NUMBER!
1070 MOV BP,WORD PTR [ASMADD
+2]
1071 CMP BYTE PTR [MEMFLG
],0
1077 CMP BYTE PTR [AWORD
],1
1079 CMP BYTE PTR [AWORD
],CL
1084 CMP BYTE PTR [NEGFLG
],0
1088 ADD WORD PTR [LOWNUM
],DX
1089 INC BYTE PTR [NUMFLG
]
1103 LES DI,DWORD PTR ASMADD
1104 MOV SI,OFFSET DG
:ASSEM_CNT
1110 MOV WORD PTR [ASMADD
],DI
1117 TEST AL,11000B ; 16 BIT OR SEGMENT REGISTER?
1121 CMP BYTE PTR [AWORD
],0
1123 CMP BYTE PTR [AWORD
],DL
1127 SETSIZ2:MOV BYTE PTR [AWORD
],DL
1130 ; DETERMINE IF NUMBER IN AX:DX IS 8 BITS, 16 BITS, OR 32 BITS
1143 ; get first character after first space
1145 SCANS: CMP BYTE PTR [SI],13
1147 CMP BYTE PTR [SI],"["
1156 ; Set up for 8087 op-codes
1159 MOV BYTE PTR [ASSEM1
],0D8H
1161 AND AL,111B ; SET MIDDLE BITS OF SECOND BYTE
1166 MOV AL,AH ; SET LOWER BITS OF FIRST BYTE
1171 MOV BYTE PTR [F8087
],1 ; INDICATE 8087 OPERAND
1172 MOV BYTE PTR [DIRFLG
],100B
1175 ; Set MF bits for 8087 op-codes
1177 SETMF: MOV AL,[AWORD
]
1178 TEST BYTE PTR [DI+1],10B
1180 AND BYTE PTR [DI+1],11111001B ; CLEAR MF BITS
1185 TEST BYTE PTR [DI+1],1
1191 SETMFI: CMP AL,3 ; DWORD?
1195 TEST BYTE PTR [DI+1],1
1199 OR BYTE PTR [DI+1],111B
1201 OR BYTE PTR [DI+1],011B
1202 OR BYTE PTR [DI+2],101000B
1205 OR BYTE PTR [DI+1],100B
1219 DBEN: MOV DI,OFFSET DG
:ASSEM_CNT
1225 DBEX: JMP ASSEM_EXIT
1228 MOV BH,BYTE PTR [SI]
1241 INC BYTE PTR [ASSEM_CNT
]
1256 INC BYTE PTR [ASSEM_CNT
]
1259 DB7: INC BYTE PTR [ASSEM_CNT
]