assume cs:code,ds:data,ss:stack data segment db 'welcome to masm!',0 data ends stack segment dw 16 dup (0) stack ends code segment kaishi: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,20H mov dh,8 mov dl,3 mov cl,2 mov si,0 call show_str mov ax,4c00h int 21h ;参数:dh=行号,dl=列号,cl等于颜色,di:si指向字符串首地址 show_str: ;寄存器保存 push ax push bx push cx push dx push di push si ;结束保存 ;主程序开始 mov ax,0B800H mov es,ax mov bx,0 mov al,160 ;每行160个内存单元 mul dh ;ax得到行号 mov bx,ax ;保存到bx mov al,2 ;每行80个字符,每个字符后面单元为属性 mul dl ;得到显示列号 mov di,ax ;保存至di mov al,cl ;把属性给al,因为cl要用来做检测是否为零 mov ch,0 ;把ch至零 ;开始显示 xianshi: mov cl,ds:[si] ;把内存单元中的字符给cl,因为一个字符等于一个内存单元,所以用cl jcxz xianshiover ;如果检测到cx 为零,那么跳转至结束,如果没有结束,那么向下继续执行 mov es:[bx+di],cl ;把cl中的字符复制给es:[bx+di]中的显存地址 mov es:[bx+di+1],al ;把属性复制给+1的位置 add di,2 ;目标地址列号+2,因为一个地址放置字符,一个地址放置属性 inc si ;源地址内存单元si+1 jmp xianshi xianshiover: pop si pop di pop dx pop cx pop bx pop ax ret code ends end kaishi
与您一同分享精彩的网络世界
-486174组织成员

浙公网安备 33010602011771号