|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 被遗忘的指环 于 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:[si]
mov es:[di],al ;把字符复制到 es段中去
mov al,ds:[bx]
mov es:[di+1],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 |
|