📄 mon88.lst
字号:
528 0734 8B 16 B6 34 MOV DX,[UDX]
529 0738 8B 2E BA 34 MOV BP,[UBP]
530 073C 8B 36 BC 34 MOV SI,[USI]
531 0740 8B 3E BE 34 MOV DI,[UDI]
532
533 0744 8E 06 C2 34 MOV ES,[UES]
534 0748 FA CLI ; User User Stack!!
535 0749 8E 16 C4 34 MOV SS,[USS]
536 074D 8B 26 B8 34 MOV SP,[USP]
537
538 0751 FF 36 CA 34 PUSH [UFL]
539 0755 FF 36 C6 34 PUSH [UCS] ; Push CS (Base Segment)
540 0759 FF 36 C8 34 PUSH [UIP]
541 075D 8E 1E C0 34 MOV DS,[UDS]
542 0761 CF IRET ; Execute!
543
544 ;----------------------------------------------------------------------
545 ; Write Byte to Output port
546 ;----------------------------------------------------------------------
547 0762 E8 D0 0B OUTPORTB: CALL GETHEX4 ; Get Port address
548 0765 8B D0 MOV DX,AX
549 0767 B0 3D E8 4D 0C WREQUAL
550 076C E8 D3 0B CALL GETHEX2 ; Get Port value
551 076F EE OUT DX,AL
552 0770 E9 E8 FC JMP CMD ; Next Command
553
554 ;----------------------------------------------------------------------
555 ; Write Word to Output port
556 ;----------------------------------------------------------------------
557 0773 E8 BF 0B OUTPORTW: CALL GETHEX4 ; Get Port address
558 0776 8B D0 MOV DX,AX
559 0778 B0 3D E8 3C 0C WREQUAL
560 077D E8 B5 0B CALL GETHEX4 ; Get Port value
561 0780 EF OUT DX,AX
562 0781 E9 D7 FC JMP CMD ; Next Command
563
564 ;----------------------------------------------------------------------
565 ; Read Byte from Input port
566 ;----------------------------------------------------------------------
567 0784 E8 AE 0B INPORTB: CALL GETHEX4 ; Get Port address
568 0787 8B D0 MOV DX,AX
569 0789 B0 3D E8 2B 0C WREQUAL
570 078E EC IN AL,DX
571 078F E8 E6 0B CALL PUTHEX2
572 0792 E9 C6 FC JMP CMD ; Next Command
573
574 ;----------------------------------------------------------------------
575 ; Read Word from Input port
576 ;----------------------------------------------------------------------
577 0795 E8 9D 0B INPORTW: CALL GETHEX4 ; Get Port address
578 0798 B0 3D E8 1C 0C WREQUAL
579 079D E8 19 0C CALL TXCHAR
580 07A0 ED IN AX,DX
581 07A1 E8 C9 0B CALL PUTHEX4
582 07A4 E9 B4 FC JMP CMD ; Next Command
583
584 ;----------------------------------------------------------------------
585 ; Display Memory
586 ;----------------------------------------------------------------------
587 07A7 E8 79 0B DUMPMEM: CALL GETRANGE ; Range from BX to DX
588 07AA BE CC 34 NEXTDMP: MOV SI,OFFSET DUMPMEMS ; Store ASCII values
589
590 07AD E8 66 0B CALL NEWLINE
591 07B0 8C C0 MOV AX,ES
592 07B2 E8 B8 0B CALL PUTHEX4
593 07B5 B0 3A MOV AL,':'
594 07B7 E8 FF 0B CALL TXCHAR
595 07BA 8B C3 MOV AX,BX
596 07BC 25 F0 FF AND AX,0FFF0h
597 07BF E8 AB 0B CALL PUTHEX4
598 07C2 B0 20 E8 F2 0B WRSPACE ; Write Space
599 07C7 B0 20 E8 ED 0B WRSPACE ; Write Space
600
601 07CC 8A E3 MOV AH,BL ; Save lsb
602 07CE 80 E4 0F AND AH,0Fh ; 16 byte boundary
603
604 07D1 E8 7E 00 CALL WRNSPACE ; Write AH spaces
605 07D4 E8 7B 00 CALL WRNSPACE ; Write AH spaces
606 07D7 E8 78 00 CALL WRNSPACE ; Write AH spaces
607
608 07DA B9 10 00 DISPBYTE: MOV CX,16
609 07DD 2A CC SUB CL,AH
610
611 07DF 26 8A 07 LOOPDMP1: MOV AL,ES:[BX] ; Get Byte and display it in HEX
612 07E2 88 04 MOV DS:[SI],AL ; Save it
613 07E4 E8 91 0B CALL PUTHEX2
614 07E7 B0 20 E8 CD 0B WRSPACE ; Write Space
615 07EC 43 INC BX
616 07ED 46 INC SI
617 07EE 3B DA CMP BX,DX
618 07F0 73 09 JNC SHOWREM ; show remaining
619 07F2 E2 EB LOOP LOOPDMP1
620
621 07F4 E8 32 00 CALL PUTSDMP ; Display it
622
623 07F7 3B D3 CMP DX,BX ; End of memory range?
624 07F9 73 AF JNC NEXTDMP ; No, continue with next 16 bytes
625
626 07FB BE CC 34 SHOWREM: MOV SI,OFFSET DUMPMEMS ; Stored ASCII values
627 07FE 8B C3 MOV AX,BX
628 0800 25 0F 00 AND AX,0000Fh
629 0803 84 C0 TEST AL
630 0805 74 1A JZ SKIPCLR
631 0807 01 C6 ADD SI,AX ; Offset
632 0809 B4 10 MOV AH,16
633 080B 2A E0 SUB AH,AL
634 080D 88 E1 MOV CL,AH
635 080F 32 ED XOR CH,CH
636 0811 B0 20 MOV AL,' ' ; Clear non displayed values
637 0813 88 04 NEXTCLR: MOV DS:[SI],AL ; Save it
638 0815 46 INC SI
639 0816 E2 FB LOOP NEXTCLR
640 0818 E8 37 00 CALL WRNSPACE ; Write AH spaces
641 081B E8 34 00 CALL WRNSPACE ; Write AH spaces
642 081E E8 31 00 CALL WRNSPACE ; Write AH spaces
643 0821 32 E4 SKIPCLR: XOR AH,AH
644 0823 E8 03 00 CALL PUTSDMP
645
646 0826 E9 32 FC EXITDMP: JMP CMD ; Next Command
647
648 0829 BE CC 34 PUTSDMP: MOV SI,OFFSET DUMPMEMS ; Stored ASCII values
649 082C B0 20 E8 88 0B WRSPACE ; Add 2 spaces
650 0831 B0 20 E8 83 0B WRSPACE
651 0836 E8 19 00 CALL WRNSPACE ; Write AH spaces
652 0839 B9 10 00 MOV CX,16
653 083C 2A CC SUB CL,AH ; Adjust if not started at xxx0
654 083E AC NEXTCH: LODSB ; Get character AL=DS:[SI++]
655 083F 3C 1F CMP AL,01Fh ; 20..7E printable
656 0841 76 07 JBE PRINTDOT
657 0843 3C 7F CMP AL,07Fh
658 0845 73 03 JAE PRINTDOT
659 0847 E9 02 00 JMP PRINTCH
660 084A B0 2E PRINTDOT: MOV AL,'.'
661 084C E8 6A 0B PRINTCH: CALL TXCHAR
662 084F E2 ED LOOP NEXTCH ; Next Character
663 0851 C3 RET
664
665 0852 50 WRNSPACE: PUSH AX ; Write AH space, skip if 0
666 0853 51 PUSH CX
667 0854 84 E4 TEST AH
668 0856 74 0B JZ EXITWRNP
669 0858 32 ED XOR CH,CH ; Write AH spaces
670 085A 88 E1 MOV CL,AH
671 085C B0 20 MOV AL,' '
672 085E E8 58 0B NEXTDTX: CALL TXCHAR
673 0861 E2 FB LOOP NEXTDTX
674 0863 59 EXITWRNP: POP CX
675 0864 58 POP AX
676 0865 C3 RET
677
678 ;----------------------------------------------------------------------
679 ; Fill Memory
680 ;----------------------------------------------------------------------
681 0866 E8 BA 0A FILLMEM: CALL GETRANGE ; First get range BX to DX
682 0869 B0 20 E8 4B 0B WRSPACE
683 086E E8 D1 0A CALL GETHEX2
684 0871 50 PUSH AX ; Store fill character
685 0872 E8 A1 0A CALL NEWLINE
686
687 0875 3B D3 CMP DX,BX
688 0877 72 0B JB EXITFILL
689 0879 2B D3 DOFILL: SUB DX,BX
690 087B 8B CA MOV CX,DX
691 087D 89 DF MOV DI,BX ; ES:[DI]
692 087F 58 POP AX ; Restore fill char
693 0880 AA NEXTFILL: STOSb
694 0881 E2 FD LOOP NEXTFILL
695 0883 AA STOSb ; Last byte
696 0884 E9 D4 FB EXITFILL: JMP CMD ; Next Command
697
698 ;----------------------------------------------------------------------
699 ; Display Registers
700 ;
701 ; AX=0001 BX=0002 CX=0003 DX=0004 SP=0005 BP=0006 SI=0007 DI=0008
702 ; DS=0009 ES=000A SS=000B CS=000C IP=0100 ODIT-SZAPC=0000-00000
703 ;----------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -