汇编实验九(王爽)

编程:在屏幕中间分别显示绿色,绿色红底,白底蓝色的字符串 'welcome to masm!'.

assume cs:code,ds:data,ss:stack

data segment
    db 'welcome to masm!'
    db 00000010b,00100100b,01110001b    #分别代表绿色、绿色红底、白底蓝色
data ends

stack segment
    dw 0,0,0,0,0,0,0,0                  #定义一个栈段,来用于临时储存值
stack ends

code segment
start:  mov ax,data
        mov ds,ax
        mov ax,0b800h #在汇编源程序中,数据不能以字母开头!
        mov es,ax
        mov ax,stack
        mov ss,ax
        mov sp,16

        mov bx,0a0h    #好像我的电脑,如果在0处写入第一行数据,那么最后的话第一行会被吃掉,因此在内存第二行开始处写入
        mov di,16      #用于表示表示颜色属性字节数据的偏移地址
        mov cx,3       #循环三次,分别向每行中写入数据
    s:  push cx
        push bx        #保存此时要写入内存的首地址,方便后面跳行
        mov si,0
        mov dl,ds:[di] #获取data段内表示字符属性的字节
        
        mov cx,16
   s1:  mov al,ds:[si]   #在data段中取出每个字母
        mov es:[bx],al   #向指定内存中写入字母
        mov es:[bx+1],dl #写入属性

        add bx,2      
        inc si
        loop s1

        pop bx
        add bx,0a0h    #跳行
        inc di         #跳到下一个属性
        pop cx
        loop s

        mov ax,4c00h
        int 21h

code ends

end start

运行结果如下:

 

 注意哦!在用debug跟踪调试的时候,显示缓冲区的那段内存中的数据是不会和我们写入数据相同,可能因为要显示数据,所有比较特别,所以,在跟踪调试之前,一定要先运行程序!!!

posted @ 2020-05-16 22:57  jane_315  阅读(351)  评论(0编辑  收藏  举报