王爽 汇编语言 实验9

; 每行80个字符,占160个字节(0a0h),每个占2个字节。中间的位置是80
; 显示的字符串'welcome to masm!'总共16个字符,共32个字节,每行最左边的位置四160/2[中间位置]-8*2[左边8个字符占的字节数]=64
; 要显示3次,每次有不同的颜色,显示在中间总共25行,中间12行,显示3个,现实的第一行在屏幕的第
; 11行,前面的10行所占的空间为 10*160=1600 (0a00h),第11行从0a40开始的。
assume cs:code
data segment
db 'welcome to masm!'
db 02h, 24h, 71h ;绿色、绿地红色、白底蓝色
data ends

stack segment
dw 8 dup(0)
stack ends

code segment
start:
    mov ax, data
    mov ds, ax
    
    mov ax,0B800h
    mov es,ax
    
    mov ax,stack
    mov ss,ax
    mov sp,10h
    
    mov cx,3
    mov bx,10h     ;  bx是每种颜色的关于ds的偏移地址
    mov di,0a40h  ;显示第一行字母的初始位置
    
    ;外层循环 显示的颜色,位置: 10+[bx]
    s:
    mov ah, ds:[bx]  ;获取腰线使得内容的颜色
    push cx
    push bx
    
    ;内层循环 显示的
    mov cx,16
    mov bx,0  ;显示器中每行中每个字母对应的相对于该行第一个字母地址的偏移量。
    mov si,0 ; data段中字母的偏移地址
    
    s1:mov al, ds:[si]
    mov es:[di+bx], ax
    add bx,2
    inc si
    loop s1
    
    add di,0a0h  ;下一行的初始位置    
    pop bx
    inc bx
    pop cx
    loop s


    mov ax,4c00h
    int 21h
code ends
end start

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值