| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 892 人关注过本帖
标题:怎么觉得寄存器不够用呢!!是不是我方法不对?
取消只看楼主 加入收藏
chaoc
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2012-10-20
结帖率:71.43%
收藏
已结贴  问题点数:20 回复次数:2 
怎么觉得寄存器不够用呢!!是不是我方法不对?
比如有两个数据段,一个数据段是21年总收入(年份段),一个数据段是21年每年员工人数(人数段)。我要计算每年的人均收入,即用每年的总收入除以每年的员工人数。把计算的结果保存到另一数据段中(人均收入段)。

可是这样我就发现段寄存器不够用了。
我把ds段寄存器指向年份段,es指向人数段。cs和ss我不能动对吧!这样我发现没用寄存器指向人均收入段了。

幸好我发现人数段和人均收入段的数据类型是一样的,所以我让它们共用es段寄存器,只是偏移值不同,人均收入段的数据固定和人数段有一个固定的偏移值。
程序代码:
Income segment;每年的收入为一个dword型数据,即4个字节
        dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
        dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000
        dd 5937000
Income ends

IncomeStr segment
          db 21 dup('        ');8个字符 字节 只用了7个
IncomeStr ends
;..................................................................................................


;..................................................................................................
Employees segment;每年的员工人数为一个word型数据,即2个byte
        dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037
        dw 5635,8226,11542,14430,15257,17800
Employees ends

EmployeesStr segment
            db 21 dup('      ');6个字符 字节,只用了5个
EmployeesStr ends
;..................................................................................................


;..................................................................................................

Perincome segment
    dw 21 dup(32)
Perincome ends

;这里省去一些代码,直接进入关键代码
step0:;计算人均收入
            mov ax,Income             ;把收入设为数据段ds +si
            mov ds,ax
            mov ax,Employees          ;把员工人数设为扩展段es+di
            mov es,ax
            mov si,0
            mov di,0
           
            mov cx,21
            loop1:
            push cx
            mov dx,ds:[si+2]
            mov ax,ds:[si]
            mov cx,es:[di]
            push dx
            push ax
            push cx
            call divdw
            mov es:[di+176],ax;把人均收入设为es段 es+di+176,人均收入段和员工人数段偏移距离是176
            add si,4
            add di,2
            pop cx
            loop loop1
可是这样解决方法好像很蹩脚。两个数据段的数据格式一样才能这样共用段寄存器和和偏移寄存器,还要加上固定的偏移值。这个偏移值还要自己手动算。太不灵活了,算的过程中还要注意段的起始地址必须是16的整数倍。程序代码有变换,有可能还要重新算。


我的方法是不是有问题?
感觉用王爽的书,有种很封闭的感觉!
搜索更多相关主题的帖子: 人均收入 寄存器 
2012-10-23 15:50
chaoc
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2012-10-20
收藏
得分:0 
回复 2楼 zklhp
版主大大给的几个定义变量的指令我现在还没学到,看来我目前只能这样了。到后面后再改
2012-10-23 17:06
chaoc
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2012-10-20
收藏
得分:0 
我会结贴的!
2012-10-23 17:08
快速回复:怎么觉得寄存器不够用呢!!是不是我方法不对?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039490 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved