Assembly-Lab 9

文章目录

在这里插入图片描述
在这里插入图片描述

实验分析

  • 3行16列的字符串处理,一定会用到嵌套循环,所以要定义stack保存cx

  • 设置指针指向行数列数

    • 题目要求每行颜色不同,那么对于字符颜色的处理要放在row循环中

    • 题目要求从屏幕中间输出,那么就要开始行数及列数

      需显示在屏幕中间,由材料可得每1行有80个字符占160个字节,而显示的字符串字节+属性字节,共32个字节,所以,要达到水平居中的效果开始值应该为(160 - 32)/ 2 =64
      一共显示3行,所以行数开始值为(25-3)/ 2 =11

  • 对于寻址方式的理解
    这道题也可以用bx指向行si指向列di
    在这里插入图片描述

code

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

data segment
	str	db 'welcome to masm!'
	c db 2,24h,71h
data ends

stack segment
	db 16 dup (0)
stack ends

code segment
start:	mov ax,data
		mov ds,ax

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

		mov ax,0b86eh
		mov es,ax
		sub si,si	;指向颜色同时指向行数

		mov cx,3
row:	sub di,di	;指向字符位置
		sub bx,bx	;指向字符位置
		mov ah,c[si]	;读颜色

		push cx
		mov cx,16
col:	mov al,str[di]	;读字符,字符串内容的偏移地址,每次增加1
		mov es:40h[bx+di],ax	;写字符,缓冲区的偏移地址,每次增加2
		inc di
		inc bx
		loop col

		pop cx
		mov ax,es 	;修改段地址
		add ax,0ah
		mov es,ax
		inc si
		loop row

		mov ax,4c00h
		int 21h

code ends
end start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值