zoukankan      html  css  js  c++  java
  • 编写在显存中显示字符串的子程序

     第十章 实验十 练习1

    ; 子程序描述
    ; 名称:show_str
    ; 功能:指定位置,用指定颜色,显示一个用0结束的字符串
    ; 参数:(dh) =  行号(0--24),(dl) = 列号(0--79) 
    ;  (cl) = 颜色,ds:si 指向字符串的首地址
    ; 返回:无

    assume cs:code, ds:data
    
    data segment
     db 'Welcome to masm', 0
    data ends
    
    code segment
    start:
     mov ax, data
     mov ds, ax
    
     mov dh, 8
     mov dl, 3
     mov cl, 2
    
     mov si, 0
    
     call show_str
    
     mov ah, 01h  ; 不是mov ax, 01h
     int 21h
    
     mov ax, 4c00h
     int 21h
    
    show_str:
      push ax
      push bx
      push cx
      push dx
      push es
    
      ; 计算好字串开始显示的地址Y = 160*(行数-1) + 列数*2-2, B800 : Y
      ; 循环将参数里的字串写进显卡内存,并检测到0就返回
      
      ; bx = 160*(行数-1)
      sub dh, 1
      mov al, 160
      mul dh
      mov bx, ax ; bx 为根据行数算出来的偏移值
    
      ; ax = 列数*2-2
      ;mov bl, dl
      mov al, 2 
      mul dl
      sub ax, 2 ; 根据列数算出来的偏移值 
      add bx, ax ; 行数和列数的和存在bx中了
    
      mov ax, 0b800h
      mov es, ax
      
      mov dl, cl ; 保存字体颜色属性
      mov ch, 0
    
     s_show_str:
      mov  cl, ds:[si]
      mov  es:[bx], cl
      jcxz ok_show_str
    
      mov es:[bx+1], dl
    
      inc si
      add bx, 2
      jmp short  s_show_str
    
     ok_show_str:
      pop es
      pop dx
      pop cx
      pop bx
      pop ax
    
      ret
    
    code ends
    end start 

    颜色属性里2 (00000010代表绿色字体) 66代表红底绿字。

    记得 :现场保护的目的是调用子程序之后,能够返回主程序继续执行.因此要对子程序中用到的寄存器,堆栈进行必要的保护.

     现阶段 子程序中用到的寄存器最好全入栈

  • 相关阅读:
    55域TLV说明
    iOS开发之指定UIView的某几个角为圆角
    常逛的博客
    猿题库 iOS 客户端架构设计
    NSData
    base64编码
    RSA算法原理
    无法安装64位版本的office因为在您的pc
    mysql导出导入数据
    设置mysql的字符集
  • 原文地址:https://www.cnblogs.com/youxin/p/2524589.html
Copyright © 2011-2022 走看看