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

📄 hellostr.asm

📁 关于8086的软核fpga代码
💻 ASM
字号:
;***************************************************************
; Test CALL Instructions	   
;
; version 0.1
;***************************************************************	
;MAX_MEMORY EQU     128                         ; Available memory in KByte, see ADDR_WIDTH generic in MemBlock      
LF          EQU     0Ah
CR          EQU     0Dh

; PIO, 0x398-0x39F
PIO			EQU		0398h

; UART settings, COM1
COM1        EQU     03F8h 
COM2        EQU     02F8h 
COMPORT		EQU		COM1

DATAREG     EQU     0   
STATUS      EQU     1      
DIVIDER     EQU     2

TX_EMPTY    EQU     02
RX_AVAIL    EQU     01
FRAME_ERR   EQU     04

		org  0400h		    	; result in .com start IP=0100

		MOV		AX,CS
        MOV     SS,AX
        MOV     AX,OFFSET TOS               ; Top of Stack
        MOV     SP,AX                       ; Set Stack pointer
		

AGAIN:	MOV     SI,OFFSET WELCOME_MESS          ; OFFSET -> SI
        CALL    PUTS                            ; String pointed to by DS:[SI]		
		JMP		AGAIN       
;------------------------------------------------------------------------------------
; Write zero terminated string to CONOUT
; String pointed to by DS:[SI]
;------------------------------------------------------------------------------------
PUTS:   PUSH    SI
        CLD 
PRINT:  LODSB                                   ; AL=DS:[SI++]
        OR      AL,AL                           ; Zero?
        JZ      PRINT_X                         ; then exit
        CALL    TXCHAR                          
        JMP     PRINT                           ; Next Character
PRINT_X:POP     SI
        RET

;------------------------------------------------------------------------------------
; Transmit character in AL
; AX Changed
;------------------------------------------------------------------------------------
TXCHAR: PUSH    DX
        PUSH    AX                              ; Character in AL
        MOV     DX,COMPORT+STATUS          
WAITTX: IN      AL,DX                           ; read status
        AND     AL,TX_EMPTY                     ; Transmit Register Empty?
        JZ      WAITTX                          ; no, wait
        MOV     DX,COMPORT+DATAREG                ; point to data port
        POP     AX
        OUT     DX,AL
        POP     DX
        RET

;;------------------------------------------------------------------------------------
;; Receive character in AL, blocking
;; AX Changed
;;------------------------------------------------------------------------------------
RXCHAR: PUSH    DX
        MOV     DX,COMPORT+STATUS
WAITRX: IN      AL,DX
        AND     AL,RX_AVAIL
        JZ      WAITRX                          ; blocking
        MOV     DX,COMPORT+DATAREG    
        IN      AL,DX                           ; return result in al
        POP     DX
        RET

WELCOME_MESS  DB    0dh,0ah,"Hello World, this is a simpel string tx test: baudrate=",0
TOS     DW      ?                           ; Top of stack

⌨️ 快捷键说明

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