鱼C论坛

 找回密码
 立即注册
查看: 3628|回复: 0

[汇编作业] 实验9一种更快更好的思路

[复制链接]
发表于 2021-8-11 11:36:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:codesg,ds:datasg,ss:stack

datasg segment
        db 'welcome to masm '
        db 71h,24h,02h
datasg ends

stack segment
        db 8 dup(0)
stack ends

codesg segment
start:
                ;初始化栈段寄存器和sp寄存器
                mov ax,stack
                mov ss,ax
                mov sp,08h
               
                ;初始化数据段寄存器
                mov ax,datasg
                mov ds,ax
               
                ;启用es寄存器,将显示第一行正中央作为段的起始地址
                mov ax,0b872h
                mov es,ax
               
                ;外层循环三次,用来打印三行字符
                mov cx,3
                ;si寄存器将会用做es上的偏移,也就是控制打印第几行
                mov si,0
               
                ;内层循环用来循环打印每个字符,循环开始首先保存寄cx寄存器,保证外层循环可以运行
s0:                push cx
                mov di,cx
                ;这里外层的cx数值是3,2,1正好对应三个颜色的偏移,所以用di保存cx的值用于偏移
               
                ;bx用于控制字符的偏移
                mov bx,0
                ;ax寄存器高位放颜色,低位保存字符的asci
                mov ah,ds:[0Fh+di]
                ;要打印的字符一共16个循环16次
                mov cx,16
               
s:         
                ;因为写入显存控制显示的字符的时候,需要先写入字符,再写入字符asci,再写入颜色方案,每个字符控制消耗1个字
                ;所以bx寄存器每次增长2,也就是2,4,6,8,但是访问要显示的字符的时候每一次只需要移动一个welcom,bx为1,2,3,4,
                ;可以看到是2倍关系,右移可实现
                shr bx,1
                mov al,byte ptr ds:[bx]
                ;左移恢寄存器的值
                shl bx,1
                ;ax全部写入寄存器
                mov word ptr es:[bx+si],ax
                add        bx,2
                loop s
                ;向下偏移一行
                add si,0A0h
                ;到外层循环,恢复cx
                pop cx
                loop s0
               
                mov ax,4c00h
                int 21h
               
codesg ends
end start
               
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 21:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表