在這段代碼中值得注意的一點是,字符串的命名問題,在VS2019之中,由於使用了動態鏈接庫,字符串的命名不可以是str這樣會導致命名衝突。
; Set Cursor Example (SetCur.asm)
; Use the .IF and .ENDIF directives to perform
; run-time range checks on parameters passed to
; the SetCursorPosition procedure.
INCLUDE Irvine32.inc
.data
str1 BYTE "Hello World!",0dh,0ah,0
.code
main PROC
mov dl,79 ; X-coordinate
mov dh,24 ; Y-coordinate
call SetCursorPosition ;
mov edx,OFFSET str1 ;
call WriteString ;
call WaitMsg ;
exit
main ENDP
SetCursorPosition PROC
; Set the cursor position.
; Receives: DL = X-coordinate, DH = Y-coordinate
; Checks the ranges of DL and DH.
;------------------------------------------------
.data
BadXCoordMsg BYTE "X-Coordinate out of range!",0Dh,0Ah,0
BadYCoordMsg BYTE "Y-Coordinate out of range!",0Dh,0Ah,0
.code
.IF (DL < 0) || (DL > 79) ;使用.IF僞指令
mov edx,OFFSET BadXCoordMsg
call WriteString
jmp quit
.ENDIF
.IF (DH < 0) || (DH > 24)
mov edx,OFFSET BadYCoordMsg
call WriteString
jmp quit
.ENDIF
call Gotoxy
quit:
ret
SetCursorPosition ENDP
END main