. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
主题 : :  关于实验10的第一个子程序问题  [已解决] 回复[ 4次 ]   点击[ 319次 ]  
okenny
[帖 主] [ 发表时间:2010-04-22 16:19 ] 
荣誉值:0
信誉值:2
注册日期:2009-12-18 17:03
书上说是首先分析屏幕上的行列位置和显存地址的对应关系
我见很多朋友在子程序的都是这样写的:

        mov ax,0b800h 
       mov es,ax          
       mov al,0a0h             ;每行大小 
        mul dh                  ;每行大小和行数相乘 
        mov bx,ax               ;得每行的起始地址es:[bx] 

每行大小是160个字节,为什么用行数乘以每行字节数就能得出N行的偏移地址呢?

我举个例子:如果每行是4个字节,现计算第5行的偏移地址
0,1,2,3
4,5,6,7
8,9,10,11
12,13,14,15
16,17,18,19
20,21,22,23
按4乘以5的方法去计算,应该是20开始吧,但实际应该是从16开始的

请教一下大家,为什么会这样做呢?谢谢
okenny
[第3楼] [ 回复时间:2010-04-22 22:22 ] 
荣誉值:0
信誉值:2
注册日期:2009-12-18 17:03
哦。。。原来是这样的。。。。谢谢了
因为论坛上对这个问题好像都默认为正确答案,我研究后发现原理上是有出入的,所以才提出问题。。。
望以后能有专题解答一下这个答案啦。。。。
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved