汇编语言(王爽) 实验10.1
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: push ax ;show_str 改变了这些寄存器的值,所以要提前入栈,把寄存器的值保存起来 push cx push es push si push di mov di,0 ;根据dh和dl的值算出显存(起始B800H)的偏移地址di的值 mov ah,0 mov al,160 mul dh add di,ax mov ah,0 mov al,2 mul dl add di,ax mov ax,0b800h ;es寄存器存储显存的起始地址(B800H) mov es,ax mov ah,cl ;因为后面会把data处的字符存储进cx,提前把字符属性cl存入ah mov ch,0 change:mov cl,[si] ;把data处的字符存入cx,判断cx的值是否为0,不为0才进行接下去的操作,否则准备结束子程序 jcxz ok mov al,[si] ;每次把data处的字符存入al mov es:[di],ax ;把al中的字符值和ah中的字符属性一并存入显存 inc si add di,2 jmp short change ok:pop di ;show_str 快结束前把压进栈的寄存器值取出来,注意先入栈的要后出栈 pop si pop es pop cx pop ax ret code ends end start