鱼C论坛

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

[汇编作业] 实验9 作业

[复制链接]
发表于 2021-3-2 10:42:14 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 yxjxdb 于 2021-5-21 15:40 编辑

感谢小甲鱼老师的视频!
assume cs:code,ss:stack,ds:data
data segment
             db 'Welcome to masm!'
             db 10000010B,00100100B,01110001B   ;8bit颜色属性为:闪烁+R+G+B+高亮+R+G+B
data ends

stack segment
              dw 8 dup(0) 
stack ends

code segment
        start:mov ax,data
                mov ds,ax       ;源数据段地址
                mov ax,0b872h   ;物理地址0B800H:720H是25行最中间的起始地址,直接写成0B872H:0H用bp偏移(不理解可以看王爽老师P24)
                mov es,ax       ;目标数据段地址,显存
                mov bx,0        ;源数据偏移地址
                mov si,0        ;颜色数据源偏移地址,db第二行的三字节数据
                mov di,0        ;颜色数据目标偏移地址                
                mov bp,0        ;目标数据行偏移地址

                mov cx,3        ;外循环3次
                s0:push cx      ;外循环次数先后入栈3\2\1

                mov cx,10h      ;内循环16次,(16个字节)
                s:mov al,[bx]
                mov es:[di+bp],al        ;目标地址偶数据位单元0,2,4……写入16个字符的ascii码
                mov al,10h[si]          ;读源数据第二行颜色数据
                mov es:[di+bp+1],al     ;在ascii后面的奇数位1,3,5……字节单元写入颜色数据
                inc bx            ;每次循环递增1(16次取16个ascii码)  
                add di,2        ;2个字节单元:ascii+颜色属性
                loop s

                mov di,0        ;s循环后清0
                mov bx,0        ;s循环后清0
                add bp,0a0h     ;目标单元偏移160个字节
                inc si          ;取源数据的下一个颜色属性
                pop cx          ;cx在s循环后为0,所以出栈
                loop s0         ;cx=cx-1

                mov ax,4c00h
                int 21h

code ends

end start
补充:720H的计算
160x11+(160-16x2)/2=1824(720H)


开始有个疑问栈是否多余?经过测试觉得经过s0循环后栈内数据应该是变化的。敬请指正。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-30 00:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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