鱼C论坛

 找回密码
 立即注册
查看: 3785|回复: 3

汇编语言(实验九)

[复制链接]
发表于 2016-3-20 13:30:07 | 显示全部楼层 |阅读模式

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

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

x
下面程序没问题。
不明白为什么要-g,才能看到data段的值传入了b800段。
不应该是执行完mov es:[si+720H],al后,data段的"w"传入后,-d就应该立刻可以查看的到b800段变化吗???


assume cs:code

data segment

                  db 'welcome to masm!'        ;十六进制为77 65 6C 63 6F 6D 65 20-74 6F 20 6D 61 73 6D 21

data ends

code segment

start:   
                  mov ax,data
                  
                  mov ds,ax                    ;数据段段地址给ds   welcome to masm!   (数据段地址0770H给ds)
                  
                  mov ax,0B800H
                  
                  mov es,ax                    ;显存段地址ds                          (显存段地址B800H给es)
                  
                  mov cx,10H                   ;循环16次                              (每次给一个值,一个颜色。三排一起给)
                  
                  mov si,0H                    ;定义显存段偏移值
                  
                  mov di,0H                    ;定义数据段偏移值         
                  
s:                 
                  mov al,ds:[di]               ;定义数据段的第一个字符给al            (将"w"十六进制77H给al)  ax变成B877H

                  inc di                       ;做好准备,为下次取数据段值
                  
                  mov es:[si+720H],al          ;将值al给显存(720H第一排)5 5 5 5 5,一行160字节五行800字节,三行welcome的话第一行就在12行(行中间),第12行分成 50列 14列 32列 14列 50列,第65列就是中间(列中间),但是汇编应该从0开始,所以是800+800+160+64=720H
                  
                  mov es:[si+7c0H],al          ;将值al给显存(7c0H第二排)
                  
                  mov es:[si+860H],al          ;将值al给显存(860H第二排)                                                   
                  
                  inc si                       ;si+1,目的是跳到该值得颜色处
                  
                  mov al,2h
                  
                  mov es:[si+720H],al          ;将绿色给显存
                  
                  mov al,14h
                  
                  mov es:[si+7c0H],al          ;将绿底红色给显存
                  
                  mov al,71h
                  
                  mov es:[si+860H],al          ;将白底蓝色给显存
                  
                  inc si                       ;si+1,目的是接着跳,跳到到下一个值(值、颜色、值、颜色。。。)
                  
                  loop s
                  
                  mov ax,4c00h

                  int 21h
code ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-21 14:27:40 | 显示全部楼层
不错!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-21 15:25:31 | 显示全部楼层
撸主说的没有错,-d查看是完全可以的。
通常,-g是为了直接执行完loop这个循环,通过界面看到最终welcome的显示;
当然也可以每一步-t,然后-d看0B800地址处 数据变化情况,只是有点费劲而已。

如果执行出错,请贴出截图,大家一起讨论。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-22 08:50:58 | 显示全部楼层
n0noper 发表于 2016-3-21 15:25
撸主说的没有错,-d查看是完全可以的。
通常,-g是为了直接执行完loop这个循环,通过界面看到最终welcome ...

谢谢,你真够热情的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-26 16:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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