|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:code,ds:data,ss:stack
data segment
db 'Welcome to masm!',0
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start: mov dh,8 ;显示行
mov dl,3 ;显示列
mov cl,2 ;显示颜色
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,10h
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: push cx ;保存颜色数据备用
mov al,0ah ;160就是A0h,因为是偏移地址,所以取十位为0Ah
mul dh ;8位乘法 al * dh = ax
add ax,0b800h ;算出段地址
mov es,ax
mov al,2
mul dl ;8位乘法 al * dl = ax
mov di,ax ;算出偏移地址,赋值给显示初始位置di
s: mov cl,byte ptr [si]
mov ch,0
jcxz ok ;判断内存中是否遇到0
mov al,ds:[si]
mov es:[di],al ;将data段中的数据copy到显存es中
pop ax ;取出保存的颜色值
mov es:[di+1],al ;将颜色值数据copy到显存es中
push ax ;再次保存颜色值,备用
inc si
add di,2
jmp short s
ok: ret ;退出
code ends
end start |
|