《汇编语言(3rd)》王爽 - 实验9

; 将字符复制到目标区并设置对应的属性
; 1、确定屏幕的中央
;   80x25模式,每行 80 个字符 (每个字符两个字节,共 160 个字节)
;   我们的目标字符串刚好 16个字节,再加上 16个字节的属性,则目标
;   字符串共需要 32 字节的空间,所以 字符应该从 (160 - 32) / 2 = 64
;   偏移下标开始。三行字符分别占屏幕 11,12,13 行。
; 2、确定三行字符的属性: 绿色: 02h, 绿底红色: 24h, 白底蓝色: 71h (根据
;   需要的颜色先求出对应的二进制,然后转 16 进制)
assume cs:code,ds:data,ss:stack
 
data segment
	db 'welcome to masm!'
	db 02h,24h,71h
data ends
 
stack segment
	dw 8 dup (0)
stack ends
 
code segment
start:  
	; 表示行偏移
	mov si, 0
	mov di, 0

	mov cx, 3
	s0:	             ;三行循环

			mov ax, stack
			mov ss, ax
			mov sp, 16

			; 使用 ds 寄存器从 data 段取数据
			mov ax, data
			mov ds, ax

			; 使用 es 寄存器将数据放入目标地址
			mov ax, 0B800h
			mov es, ax

			; 取数据偏移
			mov bx, 0

			; 目标地址 行内水平偏移
			mov bp, 0

			push cx ; 外层循环入栈保护  --begin
			; 依次复制 16 个字符
			mov cx, 16
		s1:		     
			; 将字符复制到目标区并设置对应的属性
			mov al, ds:[bx] ; al 表示
			mov es:[bp + 640h + si + 64],al ; 640h = 160 * 10 对应的 16进制,即表示 11 行 - 垂直居中
								     ; 偏移 64 字节后水平居中
			mov ax, ds:[16 + di]
			mov es:[bp + 1 + 640h + si + 64], ax
			inc bx
			add bp, 2
		loop s1
		pop cx	; 外层循环入栈保护  --begin
		add si, 0a0h
		inc di
	loop s0
	mov ax,4c00h
	int 21h
	
code ends
end start

展示的效果为下图所示:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡德咏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值