zoukankan      html  css  js  c++  java
  • 用汇编编写子程序,可以显示字符串到屏幕指定位置

    子程序名称:show_str

    功能:在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串

    参数: dh = 行号(0~24)     dl = 列号(0~79)     cl = 颜色     ds:si :字符串的首地址

    返回:字符串显示在屏幕上

    show_str:    push ax //先把子程序中用到的寄存器入栈,保存寄存器的值,避免寄存器冲突

          push cx

          push dx

          push es

          push si

          push di 

          mov ax,0b800h //80x25彩色显示模式内存空间开始地址B8000H的段地址

          mov es,ax 

          mov al,160 //一行80个字符,一个字符占1字节,颜色属性占1字节共2个字节,一行占80*2=160个字节

          mul dh //dh是8位,所以是8位乘法,另一个乘数默认放在AL中。 dh表示行号,al表示一行占用字符的个数,dh*al得到从B8000H开始到dh行之间的字符个数。乘法结果存放在AX中

          add dl,dl //dl表示列号,得到第dh行从0列到dl列占用的字符个数。(一个字符占用2个字节,所以这儿dl*2)

          mov dh,0

          add ax,dx //ax存放dh行之前的字符个数,dx存放dh行dl列之前的字符个数。ax,dx相加后得到第dh行,dl列相对于80x25彩色显示模式内存空间开始地址B8000H的偏移地址

          mov di,ax //相对于80x25彩色显示模式内存空间开始地址B8000H的偏移地址存放在di,es:[di]指向字符显示需要写入的地址

          mov ah,cl //颜色属性存放在ah

          

        print: mov cl,ds:[si]  //把ds:[si]指向的字符数据ASCII码放到cl

          mov ch,0   

          jcxz print_end     //如果cx为0,表示cl为0,表示ds:[si]指向的数据为0,字符串显示完毕

          mov al,cl   //把ds:[si]指向的字符数据ASCII码放到al,此时ax高8位ah存放颜色属性,低8位al存放字符数据ASCII码

          mov es:[di],ax  //ax中低8字符的ASCII码数据写入es:[di],ax中高8位颜色属性写入es:[di+1],

          inc si  //ds:[si]指向下一个字符

          add di,2 //es:[di]指向下一个字符需要写入的地址。因为一个字符占用2个字节,所以这儿加2

          jmp print

          

        print_end:  pop di  //恢复之前压栈的寄存器的值

          pop si

          pop es

          pop dx

          pop cx

          pop ax

          ret

    应用举例: 在屏幕的8行3列,用绿色显示data字符串

    assume cs:code

    data segment

      db 'welcome to masm!',0

    data ends    

    code segment

    start:    mov dh,7 //第8行

        mov dl,2 //第3行

        mov cl,2  //颜色属性

        mov ax,data

        mov ds,ax

        mov si,0

        call show_str

        mov ax,4c00h

        int 21h

    code ends

    end start

          

          

          

          

  • 相关阅读:
    2、容器初探
    3、二叉树:先序,中序,后序循环遍历详解
    Hebbian Learning Rule
    论文笔记 Weakly-Supervised Spatial Context Networks
    在Caffe添加Python layer详细步骤
    论文笔记 Learning to Compare Image Patches via Convolutional Neural Networks
    Deconvolution 反卷积理解
    论文笔记 Feature Pyramid Networks for Object Detection
    Caffe2 初识
    论文笔记 Densely Connected Convolutional Networks
  • 原文地址:https://www.cnblogs.com/fengxing999/p/10796927.html
Copyright © 2011-2022 走看看