CALL和RET指令实验

实验10

在屏幕8行3列,用绿色显示data段中的字符串

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             ;用到的寄存器入栈
    push bx
    push cx
    push dx
    push es
    push di
    
    mov ax,0B800h       ;定义显示缓冲区的段地址
    mov es,ax
   
;N为行,M为列
;计算写入首地址的偏移地址   公式:1) 0A0H*(N)+M*2 
    mov al,dh
    mov ah,0

   mov bl,0A0h         ;每行偏移A0H
    mul bl
    mov bl,dl
    mov bh,0
    add ax,bx
    add ax,bx
    mov di,ax           ;ax为首地址的偏移地址
    mov dl,cl           ;dl存颜色
    mov ch,0
    
nx:
    mov cl,ds:[si]         ;判断字符是否为00
    jcxz over
    mov bl,cl
    mov bh,dl
    mov es:[di],bx      ;赋值
    add si,1
    add di,2
    jmp short nx
    
over:
   pop di
    pop es
    pop dx
    pop cx
    pop bx
    pop ax
    ret


code ends
end start

猜你喜欢

转载自www.cnblogs.com/luocodes/p/11962644.html