王爽《汇编语言》实验9——根据材料编程

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

ASSUME CS:CODE,DS:DATA,SS:STACK
;------------------------------------------------------------
;------------------------------------------------------------
DATA SEGMENT
    DB 'WELCOME TO MASM!'
COLOR DB 00000010B,00100100B,01110001B 
DATA ENDS
;------------------------------------------------------------
;------------------------------------------------------------
STACK SEGMENT

STACK ENDS
;------------------------------------------------------------
;------------------------------------------------------------
CODE SEGMENT
START:
    MOV AX,DATA     ;初始化DS
    MOV DS,AX

    MOV AX,0B800H   ;初始化(ES)=显示缓冲区段地址
    MOV ES,AX
    MOV SI,0720H    ;0720H=11行的偏移地址
    MOV CX,3        ;(CX)=外层循环次数(显示行数)
    MOV DI,OFFSET COLOR     ;(DI)=所需颜色的偏移地址

PRINT:
    PUSH CX
    MOV CX,16       ;(CX)=内层循环次数(字符个数)
    MOV BX,0        ;(BX)=字符的位置
S:
    MOV AL,[BX]     ;(AL)=字符
    PUSH AX
    MOV AX,BX       ;计算显示缓冲区中的偏移地址
    MOV DL,2
    MUL DL
    MOV BP,AX       ;(BP)=显示缓冲区中的偏移地址
    POP AX          ;恢复(AL)=字符
    MOV ES:[BP+SI],AL       ;送入字符到缓冲区
    MOV AX,[DI]             ;获取颜色
    MOV ES:[BP+SI+1],AL     ;送出颜色到缓冲区
    INC BX                  ;准备输出下一个字符
    LOOP S                  ;输出下一个字符
    POP CX                  ;恢复外层循环次数
    ;DEC CX
    ADD SI,0A0H             ;显示缓冲区偏移地址到下一行的中间
    INC DI                  ;下一行颜色的偏移地址
    LOOP PRINT              ;输出下一行

    MOV AH,07H              ;获取键盘输入(无回显),获得显示结果用
    INT 21H

    MOV AX,4C00H
    INT 21H
CODE ENDS
END START
;------------------------------------------------------------
;------------------------------------------------------------
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值