王爽 汇编语言第二版 实验9 根据材料编程 代码及分析

          题目要求:在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串 'welcome to masm!'


          通过阅读教材资料我们能获取的信息如下:
   1、显示器默认显示的缓冲区是:B8000~B8F9F,低字节放字符,高字节放属性
     2、存放字符的地址:第一行:B8000~B809F,第二行:B80A0~B813F 第三行:B8140 ~ B81DF
   3、即偶数字节放字符,奇数字节放属性
           4、如何显示:只要把字符依次放入缓冲区即可
           5、颜色属性怎么表示:绿色:0000 0010 (02h),绿底红字:0010 0100(24h),白底蓝字(71h)

          我只写了在显示器起始处显示三行,至于在屏幕中间显示,只要加一个偏移量就好了,运行结果如下:

 



自己写的代码如下,请参考,不知道还能不能再优化一下:

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

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

stack segment
		db 16 dup(0)
stack ends

codesg segment

start:
		mov ax,stack  ;定义栈,多重循环需用到栈
		mov ss,ax
		mov sp,0
		
		mov ax,data		;定义数据区
		mov ds,ax
				
		mov cx,3     
		mov ax,0B800H  ;缓冲区的第一页首地址
		mov es,ax
		mov si,10h     ;si偏移至存储颜色的地址		
		mov ax,0		

 s:
 	   mov ah,ds:[si]       ;用ah保存字符颜色
      push cx      ;将cx,si入栈保存
      push si
      mov cx,16
      mov si,0
      mov bx,0
      mov di,1
      
 inputCh:              ;输出一行welcome to masm!
		mov al,[bx]
		mov es :[bx + si],al   ;写字符
		mov es:[bx + di],ah    ;写字符属性
		inc bx          ;遍历字符串
		inc si
		inc di
	loop inputCh
	
		pop si		;si出栈
		inc si     ;指向下一个颜色
		pop cx
		mov dx,es   ;接下来三条指令将es指向下一行
		add dx,0ah
		mov es,dx

	loop s
		
	s1:                 ;最初程序执行太快,看不到现象,加一个死循环,用于看结果
    	jmp short s1
		
codesg ends
end start
希望对跟我一样的初学者有帮助 .

 



















  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值