首页 > 其他 > 详细

CALL和RET指令实验

时间:2019-11-30 15:50:09      阅读:89      评论:0      收藏:0      [点我收藏+]

实验10

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

assume cs:code
data segment
    dbWelcome 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

 

CALL和RET指令实验

原文:https://www.cnblogs.com/luocodes/p/11962644.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!