📄 hellostr.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 + -