汇编语言 第三版 王爽 实验9 详细解析

DATAS SEGMENT
    db 'welcome to masm!'
    db 02h,24h,71h
DATAS ENDS

STACKS SEGMENT
    db 16 dup(0)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
	
    MOV AX,DATAS;设置data段
    MOV DS,AX 
    mov ax,STACKS
    mov ss,ax
    mov ax,0b800h;设置显示缓存区
    mov es,ax;设置显示缓存区
    mov sp,10h;
    mov bx,780h; ;设置显示行怎么来的780H呢
					    ;我们要显示的是12-14三行,那么就需要在第12行开始显示,即过掉0-11,
					    ;所以80字符*2*12=1920字节,1920换算16进制就是780h
    
   						 
    mov si,10h;拿到颜色偏移量
    mov cx,3 ;保存外循环3次,因为要输出三行
    
    s:
	    ;先把颜色存到ax的高地址
	    mov ah,ds:[si]
	    push si
	    push cx
	    mov cx,16
	   	;先拿到第12行的中间位置,一行80字符=160字节,而我们的字符16个字节+颜色属性站32个字节
	   	;160-32= 128 ,然后128/2=64,那么从64字节开始就是32字节在每行中间的开始位置
	   	mov si,64
	  	mov di,0
  	
		   	s0:	;把字符串挨个存进去
		   	mov al,ds:[di]
		   	mov es:[bx+si],al
		   	mov es:[bx+si+1],ah
		   	;mov word ptr es:[bx+si],ax  ;这里可以尝试用word ptr,测试结果也是一样的
		   	add si,2;为什么加2呢,因为一个字母加颜色属性是2个字节
			add di,1
		   	loop s0
   	
	   	pop cx
	   	pop si
	   	add si,1h
	   	add bx,0a0h
   	
    loop s
    MOV ax,4C00H
    INT 21H
CODES ENDS
    END START

实现图:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值