被遗忘的指环 发表于 2020-2-25 13:54:11

实验9 实现代码

本帖最后由 被遗忘的指环 于 2020-2-25 13:55 编辑

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

data segment
                db 'welcome to masm!'        ;定义要显示的字符串(共16字节)
                db 02h,24h,71h                        ;定义三种颜色属性
data ends

stack segment
                dw 8 dup(0)
stack ends

codesg segment
        start:        mov ax,data
                        mov ds,ax
                        mov ax,stack
                        mov ss,ax
                        mov sp,16
                       
                        mov bx,16                ;控制取哪个颜色
                        mov si,0                        ;控制ds段 取哪个字节
                        mov di,0                        ;控制es段 复制哪个字节去
                       
                        mov ax,0b872h        ;在第几行开始写 我这里是第11行 160*11+72=1832=728H 起始是B8000H+728H=B872H
                        mov es,ax                ;0b872h 之前加0是因为 字母masm不认
       
                        mov cx,3                        ;外循环 控制写几行
        s1:                push cx
                       
                        mov cx,16                ;内循环 负责 赋值到 es中去
        s:                mov al,ds:
                        mov es:,al                ;把字符复制到 es段中去
                       
                        mov al,ds:
                        mov es:,al        ;把字符的属性复制到 es段中去 +1 是要填到奇数位去
                        inc si
                        add di,2                        ;因为es段里的数据都是双字节的 所以要+2
                        loop s
                       
                        mov si,0                        ;因为前边si 在增加 这里要清零 一下
                        pop cx
                        add bx,1                        ;取下一个颜色
                        add di,128                        ;正常缓冲器中一行是160 16字节+16属性 正好是下一个的开头 160-32
                        loop s1
                       
                        mov ax,4c00h
                        int 21h
codesg ends
end start

gang19840815 发表于 2020-2-25 20:09:44

很好
页: [1]
查看完整版本: 实验9 实现代码