|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 传说。 于 2014-5-9 13:11 编辑
assume cs:code,ds:data
data segment
db'welcome to masm!'
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov si,0b70h
mov di,0
mov cx,16
s: mov al,[di]
mov byte ptr es:[si],al
inc di
add si,2
loop s
mov si,0b71h
mov cx,16
s0: mov byte ptr es:[si],42h
add si,2
loop s0
mov ax,4c00h
int 21h
code ends
end start
显示了一个。我自己的方法。 和答案不一样。 不过貌似有点麻烦。
简化一次。assume cs:code,ds:data
data segment
db'welcome to masm!'
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov di,0
mov si,0b80h
mov cx,16
s: mov bl,[di]
mov byte ptr es:[si],bl
inc di
inc si
mov byte ptr es:[si],02h
inc si
loop s
mov ax,4c00h
int 21h
code ends
end start
三更:
显示两种颜色的了。 以此类推。 三种颜色也这样assume cs:code,ds:data
data segment
db'welcome to masm!'
data ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov di,0
mov si,0b80h
mov cx,16
s: mov bl,[di]
mov byte ptr es:[si],bl
inc di
inc si
mov byte ptr es:[si],02h
inc si
loop s
mov cx,16
mov si,0AE0h
mov di,0
s0: mov bl,[di]
mov byte ptr es:[si],bl
inc di
inc si
mov byte ptr es:[si],42h
inc si
loop s0
mov ax,4c00h
int 21h
code ends
end start
第四次更新完整版。 貌似比答案简化点。 有什么不足还请指出。assume cs:code,ds:data,ss:stack
data segment
db'welcome to masm!'
db 02h,21h,42h
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,10h ;初始化栈顶
mov ax,0b810h ;屏幕中位置的段地址
mov es,ax
mov di,0
mov si,0b40h
mov bx,9 ;[bl]指向第一个字符属性
mov cx,3
s3: push cx ;保护外循环用到的数据
push si
push di
mov cx,10h
s2: mov al,[di]
mov es:[si],al
add si,2
inc di
loop s2
mov cx,10h
sub si,1fh ;此处我用减法,算出下一循环si
s1: mov es:[si],bl
add si,2
loop s1
pop di ;数据出栈
pop si
pop cx
add si,0a0h ;指向下一行 ,为下一次循环准备
inc bx
loop s3
mov ax,4c00h
int 21h
code ends
end start
|
|