雪球丶 发表于 2020-3-17 15:43:22

实验10(1)

本帖最后由 雪球丶 于 2020-3-17 15:49 编辑

assume cs:code
data segment
        db 'welcome to masm!',0
data ends

code segment
start:
                mov dh,8                ;行号
                mov dl,3                ;列号
                mov cl,2                ;颜色
                mov ax,data
                mov ds,ax
                mov si,0                ;ds:字符串首地址
                call show_str
               
                mov ax,4c00h
                int 21h
               
show_str:
                mov ax,0b800H        ;显存地址
                mov es,ax
                ;计算像素点索引 8行3列像素点索引=8*160+3*2
                add dl,dl
                mov al,dh
                mov bl,160
                mul bl                        ;计算出来的行号存储在ax中
               
                mov dh,0
                add ax,dx               
                mov di,ax                ;像素写索引
                mov dh,cl                ;先用dl记录下颜色值,后面直接用dx寄存器写显存;CX寄存器在循环中会被用到,释放cl
        ws:                                        ;写显存
                mov dl,ds:
                mov es:,dx
                inc si
                add di,2
                ;查看下一位是否为0
                mov cx,0
                mov cl,ds:
                jcxz wd                        ;若下一位为0,则跳转到wd处
                mov cx,2                ;给CX赋值,如果程序走到这里说明下一位不为0就让其不断循环继续往下写
                loop ws
        wd:        ret
               
code ends
end start
页: [1]
查看完整版本: 实验10(1)