马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 雪球丶 于 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:[si]字符串首地址
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:[si]
mov es:[di],dx
inc si
add di,2
;查看下一位是否为0
mov cx,0
mov cl,ds:[si]
jcxz wd ;若下一位为0,则跳转到wd处
mov cx,2 ;给CX赋值,如果程序走到这里说明下一位不为0就让其不断循环继续往下写
loop ws
wd: ret
code ends
end start
|