ASSUME CS:CODE
DATA SEGMENT
DB 'Welcome to masm!',0
DATA ENDS
CODE SEGMENT
START: MOV DH,8
MOV DL,3
MOV CL,2
MOV AX,DATA
MOV DS,AX
MOV SI,0
CALL SHOW_STR
MOV AX,4C00H
INT 21H
SHOW_STR: ;这个子程序是显示字符串的(80*25模式下)还没有做用到的寄存器做保护,用的时候注意下
;DH传送行数,DL传送列数,CL传送字符属性,DS:SI 传送字符首地址,
;还没有做用到的寄存器做保护,用的时候注意下
MOV AX,0 ;这里是将显存的段地址传送给 es ,(也就是行地址) 用 AX 传送
MOV AL,0A0H
MUL DH
ADD AX,0B800H
MOV ES,AX
MOV AH,2 ;这里是传送列地址给 di , 用 AX 传送
MOV AL,DL
MUL AH
MOV DI,AX
MOV AL,CL ;将字符属性传送给 AL
S: MOV AH,DS:[SI] ;将字符传送给 AH
MOV ES:[DI],AX ;将 (字符+属性) 的 AX 传送给显示的地方
MOV DX,0 ;设置 DX 值为0,为下面检测最后一个值为 0 做准备
MOV DL,AH ;将每个字符传送给 DH ,相当于传送给 DX
MOV CX,DX ;将 DX 传送给CX,以检测
JCXZ OK
INC SI ; SI 加 1
ADD DI,2 ; DI 加 2
JMP SHORT S
OK: RET
CODE ENDS
END START |