⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mon88.lst

📁 关于8086的软核fpga代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
  704 0887  E8 8C 0A              DISPREG:    CALL    NEWLINE
  705 088A  BE 26 09                          MOV     SI,OFFSET REG_MESS          ; OFFSET -> SI
  706 088D  8D 3E B0 34                       LEA     DI,UAX
  707                             
  708 0891  B9 08 00                          MOV     CX,8
  709 0894  E8 5F 0A              NEXTDR1:    CALL    PUTS                        ; Point to first "AX=" string
  710 0897  8B 05                             MOV     AX,[DI]                     ; DI points to AX value
  711 0899  E8 D1 0A                          CALL    PUTHEX4                     ; Display AX value
  712 089C  83 C6 05                          ADD     SI,5                        ; point to "BX=" string
  713 089F  83 C7 02                          ADD     DI,2                        ; Point to BX value
  714 08A2  E2 F0                             LOOP    NEXTDR1                     ; etc
  715                             
  716 08A4  E8 6F 0A                          CALL    NEWLINE
  717 08A7  B9 05 00                          MOV     CX,5
  718 08AA  E8 49 0A              NEXTDR2:    CALL    PUTS                        ; Point to first "DS=" string
  719 08AD  8B 05                             MOV     AX,[DI]                     ; DI points to DS value
  720 08AF  E8 BB 0A                          CALL    PUTHEX4                     ; Display DS value
  721 08B2  83 C6 05                          ADD     SI,5                        ; point to "ES=" string
  722 08B5  83 C7 02                          ADD     DI,2                        ; Point to ES value
  723 08B8  E2 F0                             LOOP    NEXTDR2                     ; etc
  724                             
  725 08BA  BE 77 2F                          MOV     SI,OFFSET FLAG_MESS
  726 08BD  E8 36 0A                          CALL    PUTS
  727 08C0  BE 86 2F                          MOV     SI,OFFSET FLAG_VALID        ; String indicating which bits to display
  728 08C3  8B 1D                             MOV     BX,[DI]                     ; get flag value in BX
  729                             
  730 08C5  B9 08 00                          MOV     CX,8                        ; Display first 4 bits
  731 08C8  AC                    NEXTBIT1:   LODSB                               ; Get display/notdisplay flag AL=DS:[SI++]
  732 08C9  3C 58                             CMP     AL,'X'                      ; Display?
  733 08CB  75 05                             JNE     SHFTCAR                     ; Yes, shift bit into carry and display it
  734 08CD  D1 E3                             SAL     BX,1                        ; no, ignore bit
  735 08CF  E9 0E 00                          JMP     EXITDISP1
  736 08D2  D1 E3                 SHFTCAR:    SAL     BX,1
  737 08D4  72 05                             JC      DISP1
  738 08D6  B0 30                             MOV     AL,'0'
  739 08D8  E9 02 00                          JMP     DISPBIT
  740 08DB  B0 31                 DISP1:      MOV     AL,'1'
  741 08DD  E8 D9 0A              DISPBIT:    CALL    TXCHAR
  742 08E0  E2 E6                 EXITDISP1:  LOOP    NEXTBIT1
  743                             
  744 08E2  B0 2D                             MOV     AL,'-'                      ; Display seperator 0000-00000
  745 08E4  E8 D2 0A                          CALL    TXCHAR
  746                             
  747 08E7  B9 08 00                          MOV     CX,8                        ; Display remaining 5 bits
  748 08EA  AC                    NEXTBIT2:   LODSB                               ; Get display/notdisplay flag AL=DS:[SI++]
  749 08EB  3C 58                             CMP     AL,'X'                      ; Display?
  750 08ED  75 05                             JNE     SHFTCAR2                    ; Yes, shift bit into carry and display it
  751 08EF  D1 E3                             SAL     BX,1                        ; no, ignore bit
  752 08F1  E9 0E 00                          JMP     EXITDISP2
  753 08F4  D1 E3                 SHFTCAR2:   SAL     BX,1
  754 08F6  72 05                             JC      DISP2
  755 08F8  B0 30                             MOV     AL,'0'
  756 08FA  E9 02 00                          JMP     DISPBIT2
  757 08FD  B0 31                 DISP2:      MOV     AL,'1'
  758 08FF  E8 B7 0A              DISPBIT2:   CALL    TXCHAR
  759 0902  E2 E6                 EXITDISP2:  LOOP    NEXTBIT2
  760                             
  761 0904  E8 0F 0A                          CALL    NEWLINE                     ; Display CS:IP Instr
  762 0907  A1 C6 34                          MOV     AX,[UCS]
  763 090A  E8 60 0A                          CALL    PUTHEX4
  764 090D  B0 3A                             MOV     AL,':'
  765 090F  E8 A7 0A                          CALL    TXCHAR
  766 0912  A1 C8 34                          MOV     AX,[UIP]
  767 0915  E8 55 0A                          CALL    PUTHEX4
  768 0918  B0 20 E8 9C 0A                    WRSPACE
  769                             
  770 091D  A1 C8 34                          MOV     AX,[UIP]                    ; Address in AX
  771 0920  E8 C1 FC                          CALL    DISASM_AX                   ; Disassemble Instruction & Display
  772                             
  773 0923  E9 35 FB                          JMP     CMD                         ; Next Command
  774                             
  775 0926  41 58 3D 00 00        REG_MESS    DB  "AX=",0,0                       ; Display Register names table
  776 092B  20 42 58 3D 00                    DB  " BX=",0
  777 0930  20 43 58 3D 00                    DB  " CX=",0
  778 0935  20 44 58 3D 00                    DB  " DX=",0
  779 093A  20 53 50 3D 00                    DB  " SP=",0
  780 093F  20 42 50 3D 00                    DB  " BP=",0
  781 0944  20 53 49 3D 00                    DB  " SI=",0
  782 0949  20 44 49 3D 00                    DB  " DI=",0
  783                             
  784 094E  44 53 3D 00 00                    DB  "DS=",0,0
  785 0953  20 45 53 3D 00                    DB  " ES=",0
  786 0958  20 53 53 3D 00                    DB  " SS=",0
  787 095D  20 43 53 3D 00                    DB  " CS=",0
  788 0962  20 49 50 3D 00                    DB  " IP=",0
  789                             
  790                             ;----------------------------------------------------------------------
  791                             ; Load Hex, terminate when ":00000001FF" is received
  792                             ; Mon88 may hang if this string is not received
  793                             ; Print '.' for each valid received frame, exit upon error
  794                             ; Bytes are loaded at Segment=ES
  795                             ;----------------------------------------------------------------------
  796 0967  BE 94 2E              LOADHEX:    MOV     SI,OFFSET LOAD_MESS         ; Display Ready to receive upload
  797 096A  E8 89 09                          CALL    PUTS
  798                             
  799 096D  B0 3E                             MOV     AL,'>'
  800 096F  E9 33 00                          JMP     DISPCH
  801                             
  802 0972  86 E7                 RXBYTE:     XCHG    BH,AH                       ; save AH register
  803 0974  E8 14 00                          CALL    RXNIB
  804 0977  88 C4                             MOV     AH,AL
  805 0979  D0 E4                             SHL     AH,1                        ; Can't use CL
  806 097B  D0 E4                             SHL     AH,1
  807 097D  D0 E4                             SHL     AH,1
  808 097F  D0 E4                             SHL     AH,1
  809 0981  E8 07 00                          CALL    RXNIB
  810 0984  0A C4                             OR      AL,AH
  811 0986  00 C3                             ADD     BL,AL                       ; Add to check sum
  812 0988  86 E7                             XCHG    BH,AH                       ; Restore AH register
  813 098A  C3                                RET
  814                             
  815 098B  E8 4E 0A              RXNIB:      CALL    RXCHARNE                    ; Get Hex Character in AL
  816 098E  3C 30                             CMP     AL,'0'                      ; Check to make sure 0-9,A-F
  817 0990  72 11                             JB      ERROR ;ERRHEX
  818 0992  3C 46                             CMP     AL,'F'
  819 0994  77 0D                             JA      ERROR ;ERRHEX
  820 0996  3C 39                             CMP     AL,'9'
  821 0998  76 06                             JBE     SUB0
  822 099A  3C 41                             CMP     AL,'A'
  823 099C  72 05                             JB      ERROR ; ERRHEX
  824 099E  2C 07                             SUB     AL,07h                      ; Convert to hex
  825 09A0  2C 30                 SUB0:       SUB     AL,'0'                      ; Convert to hex
  826 09A2  C3                                RET
  827                             
  828                             
  829 09A3  B0 45                 ERROR:      MOV     AL,'E'
  830 09A5  E8 11 0A              DISPCH:     CALL    TXCHAR
  831                             
  832 09A8  E8 31 0A              WAITLDS:    CALL    RXCHARNE                    ; Wait for ':'
  833 09AB  3C 3A                             CMP     AL,':'
  834 09AD  75 F9                             JNE     WAITLDS
  835                             
  836 09AF  33 C9                             XOR     CX,CX                       ; CL=Byte count
  837 09B1  33 DB                             XOR     BX,BX                       ; BL=Checksum
  838                             
  839 09B3  E8 BC FF                          CALL    RXBYTE                      ; Get length in CX
  840 09B6  88 C1                             MOV     CL,AL
  841                             
  842 09B8  E8 B7 FF                          CALL    RXBYTE                      ; Get Address HIGH
  843 09BB  88 C4                             MOV     AH,AL
  844 09BD  E8 B2 FF                          CALL    RXBYTE                      ; Get Address LOW
  845 09C0  8B F8                             MOV     DI,AX                       ; DI=Store Address
  846                             
  847 09C2  E8 AD FF                          CALL    RXBYTE                      ; Get Record Type
  848 09C5  3C 01                             CMP     AL,EOF_REC                  ; End Of File Record
  849 09C7  74 2A                             JE      GOENDLD
  850 09C9  3C 00                             CMP     AL,DATA_REC                 ; Data Record?
  851 09CB  74 47                             JE      GOLOAD
  852 09CD  3C 02                             CMP     AL,EAD_REC                  ; Extended Address Record?
  853 09CF  74 4B                             JE      GOEAD
  854 09D1  3C 03                             CMP     AL,SSA_REC                  ; Start Segment Address Record?
  855 09D3  74 02                             JE      GOSSA
  856 09D5  EB CC                             JMP     ERROR ;ERRREC
  857                             
  858 09D7  B9 02 00              GOSSA:      MOV     CX,2                        ; Get 2 word
  859 09DA  E8 95 FF              NEXTW:      CALL    RXBYTE
  860 09DD  88 C4                             MOV     AH,AL
  861 09DF  E8 90 FF                          CALL    RXBYTE
  862 09E2  50                                PUSH    AX                          ; Push CS, IP
  863 09E3  E2 F5                             LOOP    NEXTW
  864 09E5  E8 8A FF                          CALL    RXBYTE                      ; Get Checksum
  865 09E8  28 C3                             SUB     BL,AL                       ; Remove checksum from checksum
  866 09EA  F6 D0                             NOT     AL                          ; Two's complement
  867 09EC  04 01                             ADD     AL,1
  868 09EE  38 D8                             CMP     AL,BL                       ; Checksum held in BL
  869 09F0  75 B1                             JNE     ERROR ;ERRCHKS
  870 09F2  CB                                RETF                                ; Execute loaded file
  871                             
  872 09F3  E8 7C FF              GOENDLD:    CALL    RXBYTE
  873 09F6  28 C3                             SUB     BL,AL                       ; Remove checksum from checksum
  874 09F8  F6 D0                             NOT     AL                          ; Two's complement
  875 09FA  04 01                             ADD     AL,1
  876 09FC  38 D8                             CMP     AL,BL                       ; Che

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -