CALL和RET指令实验

删除回忆录丶 提交于 2019-12-06 04:49:06

实验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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!