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

📄 mon88.lst

📁 关于8086的软核fpga代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
  352 05EC  8E C0                             MOV     ES,AX                       ;
  353 05EE  8D 1E 90 34                       LEA     BX,DISASM_CODE              ; Pointer to code storage
  354 05F2  8D 16 60 34                       LEA     DX,DISASM_INST              ; Pointer to instr string
  355 05F6  58                                POP     AX                          ; Address in AX
  356 05F7  E8 71 05                          CALL    disasm_                     ; Disassemble Opcode
  357                             
  358 05FA  BE 90 34                          MOV     SI,offset DISASM_CODE
  359 05FD  E8 F6 0C                          CALL    PUTS
  360 0600  E8 E2 0C                          CALL    STRLEN                      ; String in SI, Length in AL
  361 0603  B4 0F                             MOV     AH,15
  362 0605  2A E0                             SUB     AH,AL
  363 0607  E8 48 02                          CALL    WRNSPACE                    ; Write AH spaces
  364 060A  BE 60 34                          MOV     SI,offset DISASM_INST
  365 060D  E8 E6 0C                          CALL    PUTS
  366                             
  367 0610  5B                                POP     BX
  368 0611  5A                                POP     DX
  369 0612  5E                                POP     SI
  370 0613  07                                POP     ES
  371 0614  C3                                RET
  372                             
  373                             ;----------------------------------------------------------------------
  374                             ; Write Byte to Memory
  375                             ;----------------------------------------------------------------------
  376 0615  E8 1D 0D              WRMEMB:     CALL    GETHEX4                     ; Get Address
  377 0618  8B D8                             MOV     BX,AX                       ; Store Address
  378 061A  B0 20 E8 9A 0D                    WRSPACE
  379                             
  380 061F  26 8A 07                          MOV     AL,ES:[BX]                  ; Get current value and display it
  381 0622  E8 53 0D                          CALL    PUTHEX2
  382 0625  B0 3D E8 8F 0D                    WREQUAL
  383 062A  E8 15 0D                          CALL    GETHEX2                     ; Get new value
  384 062D  26 88 07                          MOV     ES:[BX],AL                  ; and write it
  385                             
  386 0630  E9 28 FE                          JMP     CMD                         ; Next Command
  387                             
  388                             ;----------------------------------------------------------------------
  389                             ; Write Word to Memory
  390                             ;----------------------------------------------------------------------
  391 0633  E8 FF 0C              WRMEMW:     CALL    GETHEX4                     ; Get Address
  392 0636  8B D8                             MOV     BX,AX
  393 0638  B0 20 E8 7C 0D                    WRSPACE
  394                             
  395 063D  26 8B 07                          MOV     AX,ES:[BX]                  ; Get current value and display it
  396 0640  E8 2A 0D                          CALL    PUTHEX4
  397 0643  B0 3D E8 71 0D                    WREQUAL
  398 0648  E8 EA 0C                          CALL    GETHEX4                     ; Get new value
  399 064B  26 89 07                          MOV     ES:[BX],AX                  ; and write it
  400                             
  401 064E  E9 0A FE                          JMP     CMD                         ; Next Command
  402                             
  403                             ;----------------------------------------------------------------------
  404                             ; Change Register
  405                             ; Valid register names: AX,BX,CX,DX,SP,BP,SI,DI,DS,ES,SS,CS,IP,FL (flag)
  406                             ;----------------------------------------------------------------------
  407 0651  E8 76 0D              CHANGEREG:  CALL    RXCHAR                      ; Get Command First Register character
  408 0654  E8 55 0D                          CALL    TO_UPPER
  409 0657  8A F0                             MOV     DH,AL
  410 0659  E8 6E 0D                          CALL    RXCHAR                      ; Get Second Register character, DX=register
  411 065C  E8 4D 0D                          CALL    TO_UPPER
  412 065F  8A D0                             MOV     DL,AL
  413                             
  414 0661  BB 94 06                          MOV     BX,OFFSET REGTAB
  415 0664  8B 07                 CMPREG:     MOV     AX,[BX]
  416 0666  39 D0                             CMP     AX,DX                       ; Compare register string with user input
  417 0668  75 18                             JNE     NEXTREG                     ; No, continue search
  418                             
  419 066A  B0 3D E8 4A 0D                    WREQUAL
  420 066F  E8 C3 0C                          CALL    GETHEX4                     ; Get new value
  421 0672  89 C1                             MOV     CX,AX                       ; CX=New reg value
  422                             
  423 0674  8D 3E B0 34                       LEA     DI,UAX                      ; Point to User Register Storage
  424 0678  8A 5F 02                          MOV     BL,[BX+2]                   ; Get Offset
  425 067B  32 FF                             XOR     BH,BH
  426 067D  89 09                             MOV     [DI+BX],CX
  427 067F  E9 05 02                          JMP     DISPREG                     ; Display All registers
  428                             
  429 0682  83 C3 04              NEXTREG:    ADD     BX,4
  430 0685  81 FB CC 06                       CMP     BX,OFFSET ENDREG
  431 0689  75 D9                             JNE     CMPREG                      ; Continue looking
  432                             
  433 068B  BE 47 2E                          MOV     SI,OFFSET ERRREG_MESS       ; Display Unknown Register Name
  434 068E  E8 65 0C                          CALL    PUTS
  435                             
  436 0691  E9 C7 FD                          JMP     CMD                         ; Try Again
  437                             
  438 0694  58 41 00 00           REGTAB      DW      'AX',0                      ; register name, offset
  439 0698  58 42 02 00                       DW      'BX',2
  440 069C  58 43 04 00                       DW      'CX',4
  441 06A0  58 44 06 00                       DW      'DX',6
  442 06A4  50 53 08 00                       DW      'SP',8
  443 06A8  50 42 0A 00                       DW      'BP',10
  444 06AC  49 53 0C 00                       DW      'SI',12
  445 06B0  49 44 0E 00                       DW      'DI',14
  446 06B4  53 44 10 00                       DW      'DS',16
  447 06B8  53 45 12 00                       DW      'ES',18
  448 06BC  53 53 14 00                       DW      'SS',20
  449 06C0  53 43 16 00                       DW      'CS',22
  450 06C4  50 49 18 00                       DW      'IP',24
  451 06C8  4C 46 1A 00                       DW      'FL',26
  452 06CC  3F 3F                 ENDREG      DW      '??'
  453                             
  454                             
  455                             ;----------------------------------------------------------------------
  456                             ; Change Base Segment pointer
  457                             ; Dump/Fill/Load operate on BASE_SEGMENT:[USER INPUT ADDRESS]
  458                             ; Note: CB command will not update the User Registers!
  459                             ;----------------------------------------------------------------------
  460 06CE  8C C0                 CHANGEBS:   MOV     AX,ES                       ; WORD BASE_SEGMENT
  461 06D0  E8 9A 0C                          CALL    PUTHEX4                     ; Display current value
  462 06D3  B0 20 E8 E1 0C                    WRSPACE
  463 06D8  E8 5A 0C                          CALL    GETHEX4
  464 06DB  50                                PUSH    AX
  465 06DC  07                                POP     ES
  466 06DD  E9 7B FD                          JMP     CMD                         ; Next Command
  467                             
  468                             
  469                             ;----------------------------------------------------------------------
  470                             ; Trace Next
  471                             ;----------------------------------------------------------------------
  472 06E0  A1 CA 34              TRACENEXT:  MOV     AX,[UFL]                    ; Get User flags
  473 06E3  0D 00 01                          OR      AX,0100h                    ; set TF
  474 06E6  A3 CA 34                          MOV     [UFL],AX
  475 06E9  E9 3D 00                          JMP     TRACNENTRY
  476                             
  477                             ;----------------------------------------------------------------------
  478                             ; Trace Program from Address
  479                             ;----------------------------------------------------------------------
  480 06EC  A1 CA 34              TRACEPROG:  MOV     AX,[UFL]                    ; Get User flags
  481 06EF  0D 00 01                          OR      AX,0100h                    ; set TF
  482 06F2  A3 CA 34                          MOV     [UFL],AX
  483 06F5  E9 1C 00                          JMP     TRACENTRY                   ; get execute address, save user registers etc
  484                             
  485                             ;----------------------------------------------------------------------
  486                             ; Execute program
  487                             ; 1) Enable all Breakpoints (replace opcode with INT3 CC)
  488                             ; 2) Restore User registers
  489                             ; 3) Jump to BASE_SEGMENT:USER_OFFSET
  490                             ;----------------------------------------------------------------------
  491 06F8  BB 83 05              EXECPROG:   MOV     BX,OFFSET BPTAB             ; Enable All breakpoints
  492 06FB  B9 08 00                          MOV     CX,8
  493                             
  494 06FE  B8 08 00              NEXTENBP:   MOV     AX,8
  495 0701  2A C1                             SUB     AL,CL
  496 0703  F6 47 03 01                       TEST    BYTE [BX+3],1               ; Check enable/disable flag
  497 0707  74 06                             JZ      NEXTEXBP
  498 0709  8B 3F                             MOV     DI,[BX]                     ; Get Breakpoint Address
  499 070B  26 C6 05 CC                       MOV     BYTE ES:[DI],0CCh           ; Write INT3 instruction to address
  500                             
  501 070F  83 C3 04              NEXTEXBP:   ADD     BX,4                        ; Next entry
  502 0712  E2 EA                             LOOP    NEXTENBP
  503                             
  504 0714  8C C0                 TRACENTRY:  MOV     AX,ES                       ; Display Segment Address
  505 0716  E8 54 0C                          CALL    PUTHEX4
  506 0719  B0 3A                             MOV     AL,':'
  507 071B  E8 9B 0C                          CALL    TXCHAR
  508 071E  E8 14 0C                          CALL    GETHEX4                     ; Get new IP
  509 0721  A3 C8 34                          MOV     [UIP],AX                    ; Update User IP
  510 0724  8C C0                             MOV     AX,ES
  511 0726  A3 C6 34                          MOV     [UCS],AX
  512                             
  513                             ; Single Step Registers
  514                             ; bit3 bit2 bit1 bit0
  515                             ;  |    |    |     \--- '1' =Enable Single Step
  516                             ;  |    |     \-------- '1' =Select TXMON output for UARTx
  517                             ;  \-----\------------- '00'=No Step
  518                             ;                       '01'=Step
  519                             ;                       '10'=select step_sw input
  520                             ;                       '11'=select not(step_sw) input
  521                             ;           MOV     DX,HWM_CONFIG
  522                             ;           MOV     AL,07h                      ; xxxx-0111 step=1
  523                             ;           OUT     DX,AL                       ; Enable Trace
  524                             
  525 0729  A1 B0 34              TRACNENTRY: MOV     AX,[UAX]                    ; Restore User Registers
  526 072C  8B 1E B2 34                       MOV     BX,[UBX]
  527 0730  8B 0E B4 34                       MOV     CX,[UCX]

⌨️ 快捷键说明

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