王爽汇编语言实验9

首先看一下效果:

接下来具体分析一下:

第一步划分段,首先是数据段:来保存字符串“welcome to masm!”。

data segment
    db 'welcome to masm!'
    db 00000010B       ;1
    db 00100100B       ;2
    db 01110001B       ;3
data ends 

1,2,3表示颜色属性,他用一个字节保存,不同的位对应不同的颜色。这里由于有三行,所以定义了三个,每个颜色的属性都不一样。

接下来是栈段:

stack segment stack
    db 128 dup (0)
stack ends 

最后是代码段。

code segment

    start:mov ax,stack
        mov ss,ax
        mov sp,128

        mov ax,data 
        mov ds,ax

        mov ax,0b800H    ;确定数据到哪里去
        mov es,ax

        mov si,0
        mov di,160*10+30
        mov bx,16
        mov dx,0
        mov cx,3
masm:   push bx
        push cx 
        push si
        push di

        mov dh,ds:[bx]    ;dx分为两部分,一部分用来保存颜色属性,一部分用来保存字符的ASCII
;由于dx寄存器是16位的,这里假设用高8位用来保存颜色属性,低8位用来保存ASCII属性 mov cx,
16 show: mov dl,ds:[si] mov es:[di],dx add di,2 inc si loop show pop di pop si pop cx pop bx add di,160 inc bx loop masm mov ax,4c00h int 21h code ends

完整代码:

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

data segment
    db 'welcome to masm!'
    db 00000010B
    db 00100100B
    db 01110001B
data ends 

stack segment stack
    db 128 dup (0)
stack ends 
code segment

    start:mov ax,stack
        mov ss,ax
        mov sp,128

        mov ax,data 
        mov ds,ax

        mov ax,0b800H
        mov es,ax

        mov si,0
        mov di,160*10+30
        mov bx,16
        mov dx,0
        mov cx,3
masm:    push bx
        push cx 
        push si
        push di

        mov dh,ds:[bx]
        mov cx,16
show:    mov dl,ds:[si]
        mov es:[di],dx
        add di,2
        inc si 
         loop show 
    
        pop di
        pop si 
        pop cx
        pop bx 
        add di,160
        inc bx
        loop masm
        mov ax,4c00h
        int 21h    


code ends 
end  start 
原文地址:https://www.cnblogs.com/SunShine-gzw/p/13884121.html