鱼C论坛

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

实验十,有几句代码不理解,帮忙解释解释

[复制链接]
发表于 2011-8-15 11:03:17 | 显示全部楼层 |阅读模式

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

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

x
assume cs:code
data segment
  db 'welcome to masm!',0
  data ends
  code segment
  
  w: mov dh,0    ;定义行号=第8行
  
     mov dl,3     ;定义列号=第三列
  
     mov cl,10100010B      ;定义字符颜色属性
     mov ax,data
     mov ds,ax
     mov si,0
     call show
         
     mov ax,4c00H
     int 21H

show:         ;显存字符串的子程序[定义开始]
         push cx
                 push si
                 
                 mov al,0a0h    ;每行是有80*2 == 160个字节== 0A0h个字节,则第N 行
                 
                 ;dec dh      ;行号再显存中下标从0开始,所以减1
                 
                 mul dh      ;相当于从第(n-1)*0A0h 个 Byte单元开始....
                 
                 mov bx,ax    ;定位好得位置偏移地址存放在bx里(行)
                 
                 mov al,2    ;每个字符占两个字节
                 
                 mul dl       ;定位列,结果ax存放的是定位好的列的位置
                 
                 sub ax,2     ;列号再显存中下标从0开始,又因为偶字节存放字符,所以减2
                 最后的三条指令不解,,
(mov al,2    ;每个字符占两个字节)
(mul dl       ;定位列,结果ax存放的是定位好的列的位置)
     (sub ax,2     ;列号再显存中下标从0开始,又因为偶字节存放字符,所以减2)为什么偶字节存放的是偶数,就要减2,  在dl中已经显性的给出列号了,,为什么还这么绕个圈子...不解啊...
      
          
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-15 20:05:02 | 显示全部楼层
dl给的是行号,内容要是偏移啊, 第5个位置放个字符, 在内存中的偏移应该是 5*2-2。减2, 是每列的第一个位置是0, 要减2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-15 23:46:56 | 显示全部楼层
其实最后三行的目的,实质上和上面对行号dh的处理是一样的,同样你可以将最后三行改成:
mov al,2
dec dl
mul dl
结果是一样的,类比一下他们的目的相信你能够理解的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-18 08:40:26 | 显示全部楼层
理解了 谢谢各位:loveliness:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 22:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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