显示字符串
assume cs:code,ds:data,ss:stack
data segment
db 'Welcome to masm!',0
data ends
stack segment
dd 16 dup(0)
stack ends
code segment
start:
mov ax,0B800H
mov es,ax
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,32 ;; 初始化段址寄存器
mov dh,10 ;; 行号
mov dl,0 ;; 列号
mov ch,0
mov cl,11000010B ;;颜色
call show_str
mov ax,4c00h
int 21h
show_str:
mov ax,0
mov al,160 ;; 每段的字符数量
mul dh ;; 字符数 乘以 行号
mov dh,0 ;; 00[dl] == 00A0H
add ax,dl ;; 每行起始为 0 ,+dl 就是 列的偏移
mov si,ax ;; 每行字符不超过160,总共是25行,所以用 16位乘法刚好
mov di,0 ;; 初始化 ds的偏移地址寄存器
mov dl,cl ;; 保存cx 到 dx中,也就是存放的 cl 数据
s:
mov ch,0
mov cl,[di]
jcxz out ;; 如果 cl 为 0 ,则是已到最后 一个 字符,跳出循环
;; 判断完后,恢复cx
mov byte ptr es:[si],cl;; 这个cl是 字符的信息
mov byte ptr es:[si+1],dl
inc di
add si,2
loop s
out:
mov byte ptr es:[si],'0'
mov byte ptr es:[si+1],11000010B
ret
code ends
end start