📄 mon88.lst
字号:
177 0472 B0 20 E8 42 0F WRSPACE
178 0477 FF 67 02 JMP [BX+2] ; Execute Command
179
180 047A 83 C3 04 NEXTCMD1: ADD BX,4
181 047D 81 FB D5 04 CMP BX,OFFSET ENDTAB1
182 0481 75 E9 JNE CMPCMD1 ; Continue looking
183
184 0483 E8 44 0F CALL RXCHAR ; Get Second Command Byte, DX=command
185 0486 E8 23 0F CALL TO_UPPER
186 0489 8A D0 MOV DL,AL
187
188 048B BB D7 04 MOV BX,OFFSET CMDTAB2
189 048E 8B 07 CMPCMD2: MOV AX,[BX]
190 0490 39 D0 CMP AX,DX
191 0492 75 08 JNE NEXTCMD2
192 0494 B0 20 E8 20 0F WRSPACE
193 0499 FF 67 02 JMP [BX+2] ; Execute Command
194
195 049C 83 C3 04 NEXTCMD2: ADD BX,4
196 049F 81 FB 0B 05 CMP BX,OFFSET ENDTAB2
197 04A3 75 E9 JNE CMPCMD2 ; Continue looking
198
199 04A5 BE 1B 2E MOV SI,OFFSET ERRCMD_MESS ; Display Unknown Command, followed by usage
message
200 04A8 E8 4B 0E CALL PUTS
201 04AB EB AE JMP CMD ; Try again
202
203 04AD 4C 00 67 09 CMDTAB1 DW 'L',LOADHEX ; Single char Command Jump Table
204 04B1 52 00 87 08 DW 'R',DISPREG
205 04B5 47 00 F8 06 DW 'G',EXECPROG
206 04B9 4E 00 E0 06 DW 'N',TRACENEXT
207 04BD 54 00 EC 06 DW 'T',TRACEPROG
208 04C1 55 00 A3 05 DW 'U',DISASSEM
209 04C5 48 00 D8 12 DW 'H',DISPHELP
210 04C9 3F 00 D8 12 DW '?',DISPHELP
211 04CD 51 00 E1 12 DW 'Q',EXITMON
212 04D1 0D 00 5B 04 DW CR ,CMD
213 04D5 20 00 ENDTAB1 DW ' '
214
215 04D7 4D 46 66 08 CMDTAB2 DW 'FM',FILLMEM ; Double char Command Jump Table
216 04DB 4D 44 A7 07 DW 'DM',DUMPMEM
217 04DF 50 42 0D 05 DW 'BP',SETBREAKP ; Set Breakpoint
218 04E3 42 43 36 05 DW 'CB',CLRBREAKP ; Clear Breakpoint
219 04E7 42 44 4D 05 DW 'DB',DISPBREAKP ; Display Breakpoint
220 04EB 52 43 51 06 DW 'CR',CHANGEREG ; Change Register
221 04EF 42 4F 62 07 DW 'OB',OUTPORTB
222 04F3 53 42 CE 06 DW 'BS',CHANGEBS ; Change Base Segment Address
223 04F7 57 4F 73 07 DW 'OW',OUTPORTW
224 04FB 42 49 84 07 DW 'IB',INPORTB
225 04FF 57 49 95 07 DW 'IW',INPORTW
226 0503 42 57 15 06 DW 'WB',WRMEMB ; Write Byte to Memory
227 0507 57 57 33 06 DW 'WW',WRMEMW ; Write Word to Memory
228 050B 3F 3F ENDTAB2 DW '??'
229
230 ;----------------------------------------------------------------------
231 ; Set Breakpoint
232 ;----------------------------------------------------------------------
233 050D BB 83 05 SETBREAKP: MOV BX,OFFSET BPTAB ; BX point to Breakpoint table
234 0510 E8 44 0E CALL GETHEX1 ; Set Breakpoint, first get BP number
235 0513 24 07 AND AL,07h ; Allow 8 breakpoints
236 0515 32 E4 XOR AH,AH
237 0517 D0 E0 SHL AL,1 ; *4 to get offset
238 0519 D0 E0 SHL AL,1
239 051B 01 C3 ADD BX,AX ; point to table entry
240 051D C6 47 03 01 MOV BYTE [BX+3],1 ; Enable Breakpoint
241 0521 B0 20 E8 93 0E WRSPACE
242 0526 E8 0C 0E CALL GETHEX4 ; Get Address
243 0529 89 07 MOV [BX],AX ; Save Address
244
245 052B 8B F8 MOV DI,AX
246 052D 26 8A 05 MOV AL,ES:[DI] ; Get the opcode
247 0530 88 47 02 MOV [BX+2],AL ; Store in table
248
249 0533 E9 17 00 JMP DISPBREAKP ; Display Enabled Breakpoints
250
251 ;----------------------------------------------------------------------
252 ; Clear Breakpoint
253 ;----------------------------------------------------------------------
254 0536 BB 83 05 CLRBREAKP: MOV BX,OFFSET BPTAB ; BX point to Breakpoint table
255 0539 E8 1B 0E CALL GETHEX1 ; first get BP number
256 053C 24 07 AND AL,07h ; Only allow 8 breakpoints
257 053E 32 E4 XOR AH,AH
258 0540 D0 E0 SHL AL,1 ; *4 to get offset
259 0542 D0 E0 SHL AL,1
260 0544 01 C3 ADD BX,AX ; point to table entry
261 0546 C6 47 03 00 MOV BYTE [BX+3],0 ; Clear Breakpoint
262
263 054A E9 00 00 JMP DISPBREAKP ; Display Remaining Breakpoints
264
265 ;----------------------------------------------------------------------
266 ; Display all enabled Breakpoints
267 ; # Addr
268 ; 0 1234
269 ;----------------------------------------------------------------------
270 054D E8 C6 0D DISPBREAKP: CALL NEWLINE
271 0550 BB 83 05 MOV BX,OFFSET BPTAB
272 0553 B9 08 00 MOV CX,8
273
274 0556 B8 08 00 NEXTCBP: MOV AX,8
275 0559 2A C1 SUB AL,CL
276
277 055B F6 47 03 01 TEST BYTE [BX+3],1 ; Check enable/disable flag
278 055F 74 1A JZ NEXTDBP
279
280 0561 E8 25 0E CALL PUTHEX1 ; Display Breakpoint Number
281 0564 B0 20 E8 50 0E WRSPACE
282 0569 8B 07 MOV AX,[BX] ; Get Address
283 056B E8 FF 0D CALL PUTHEX4 ; Display it
284 056E B0 20 E8 46 0E WRSPACE
285
286 0573 8B 07 MOV AX,[BX] ; Get Address
287 0575 E8 6C 00 CALL DISASM_AX ; Disassemble instruction & Display it
288 0578 E8 9B 0D CALL NEWLINE
289
290 057B 83 C3 04 NEXTDBP: ADD BX,4 ; Next entry
291 057E E2 D6 LOOP NEXTCBP
292 0580 E9 D8 FE JMP CMD ; Next Command
293
294 ;----------------------------------------------------------------------
295 ; Breakpoint Table, Address(2), Opcode(1), flag(1) enable=1, disable=0
296 ;----------------------------------------------------------------------
297 0583 00 00 00 00 BPTAB DB 4 DUP 0
298 0587 00 00 00 00 DB 4 DUP 0
299 058B 00 00 00 00 DB 4 DUP 0
300 058F 00 00 00 00 DB 4 DUP 0
301 0593 00 00 00 00 DB 4 DUP 0
302 0597 00 00 00 00 DB 4 DUP 0
303 059B 00 00 00 00 DB 4 DUP 0
304 059F 00 00 00 00 DB 4 DUP 0
305
306 ;----------------------------------------------------------------------
307 ; Disassemble Range
308 ;----------------------------------------------------------------------
309 05A3 E8 7D 0D DISASSEM: CALL GETRANGE ; Range from BX to DX
310 05A6 E8 6D 0D CALL NEWLINE
311
312 05A9 52 LOOPDIS1: PUSH DX
313
314 05AA 8B C3 MOV AX,BX ; Address in AX
315 05AC E8 BE 0D CALL PUTHEX4 ; Display it
316
317 05AF 8D 1E 90 34 LEA BX,DISASM_CODE ; Pointer to code storage
318 05B3 8D 16 60 34 LEA DX,DISASM_INST ; Pointer to instr string
319 05B7 E8 B1 05 CALL disasm_ ; Disassemble Opcode
320 05BA 8B D8 MOV BX,AX ;
321
322 05BC 50 PUSH AX ; New address returned in AX
323 05BD B0 20 E8 F7 0D WRSPACE
324 05C2 BE 90 34 MOV SI,offset DISASM_CODE
325 05C5 E8 2E 0D CALL PUTS
326 05C8 E8 1A 0D CALL STRLEN ; String in SI, Length in AL
327 05CB B4 0F MOV AH,15
328 05CD 2A E0 SUB AH,AL
329 05CF E8 80 02 CALL WRNSPACE ; Write AH spaces
330 05D2 BE 60 34 MOV SI,offset DISASM_INST
331 05D5 E8 1E 0D CALL PUTS
332 05D8 E8 3B 0D CALL NEWLINE
333 05DB 58 POP AX
334
335 05DC 5A POP DX
336 05DD 3B D3 CMP DX,BX
337 05DF 73 C8 JNB LOOPDIS1
338
339 05E1 E9 77 FE EXITDIS: JMP CMD ; Next Command
340
341 ;----------------------------------------------------------------------
342 ; Disassemble Instruction at AX and Display it
343 ; Return updated address in AX
344 ;----------------------------------------------------------------------
345 05E4 06 DISASM_AX: PUSH ES ; Disassemble Instruction
346 05E5 56 PUSH SI
347 05E6 52 PUSH DX
348 05E7 53 PUSH BX
349 05E8 50 PUSH AX
350
351 05E9 A1 C6 34 MOV AX,[UCS] ; Get Code Base segment
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -