王爽汇编实验9 - call(多段字符串)

/* 编程: 在屏幕中间分别显示 绿色、绿底红色、白底蓝色 的字符串 ‘welcome to masm!’

  • 数据的组织
  • 数据的处理 一个字符在屏幕上占用2个字节 低地址存放字符的ASCⅡ码 高地址存放字符的属性

*/

assume cs:code,ds:data,ss:stack

data segment

       db            'welcome to masm!'               //ds:[si]
	   
	   db            00000010B                        //绿色          //0000   0000
	   db            00100100B                        //绿底红色      // rgb    rgb
	   db            01110001B                        //白底蓝色

       db            'xxxxxxxxxxxxxxxx'		   

data ends

code segment

start: mov ax,stack
mov ss,ax
mov sp,128

//逻辑上的切割 call指令

		call init_reg

//显示第一段字节
/*==========================================================================================/
//公共部分,参数 只修改si 与 di 即可
mov si,0 //字符串(内容)的起始地址
mov di,160
10 + 2*30 //字符在屏幕上的显示位置 第10行30列(67C) 偶数地址
mov bx,16 //属性的起始地址
mov dx,0 //存放字符属性

		call show_masm	

//显示第二段字节
/*==========================================================================================*/

        mov si,19               //字符串(内容)的起始地址
		mov di,160*15 + 2*30   //字符在屏幕上的显示位置   第10行30列(67C)   偶数地址
		mov bx,16              //属性的起始地址		
		mov dx,0               //存放字符属性
		
		call show_masm	

/*==========================================================================================*/
mov ax,4c00h
int 21h

//显示内容
/*==========================================================================================*/

show_masm: mov cx,3

s0:		push bx
		push cx
		push si
		push di
					
		mov cx,16
		mov dh,ds:[bx]         // mov es:[di],dx     es:[di+0],dl  ASCⅡ码   es:[di+1],dh 字符属性 
					
s:		mov dl,ds:[si]
		mov es:[di],dl
		add di,2
		inc si
		loop s

		pop di
		pop si
		pop cx
		pop bx
		add di,160
		inc bx                  //改变一个字节,切换下一个属性
		loop s0

        ret

//显示内容
/*==========================================================================================*/
init_reg: mov bx,data //数据从哪里来
mov ds,bx

	    mov bx,0B800h          //数据到哪里去
        mov es,bx

        ret			

code ends

end start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值