鱼C论坛

 找回密码
 立即注册
查看: 2750|回复: 9

求助:高手们帮忙看看错在哪里。。。

[复制链接]
发表于 2012-7-5 10:01:28 | 显示全部楼层 |阅读模式
1鱼币
assume cs:codesg,ds:datasg,ss:stacksg,es:tablesg

datasg segment
      db '1975''1976''1977''1978''1979''1980''1981''1982''1983'
          db '1984''1985''1986''1987''1988''1989''1990''1991''1992'
          db '1993''1994''1995'
          
          dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,187514
          dd 345980,590827,803530,1183000,2759000,3753000,4649000,5937000
          
          dw 3,7,9,13,28,130,220,476,778,1001,1442,2258,2793,4037,5635,2886
          dw 11542,14430,15257,17899          
datasg ends

tablesg segment
      db 21 dup('year sumn ne ?? ')
tablesg ends

stacksg segment stack
      db 0
stacksg ends

codesg segment
start:  mov ax,tablesg
        mov es,ax
                mov ax,datasg
                mov ds,ax
                mov ax,stacksg
                mov ss,ax
                mov sp,10h
               
        mov bx,0               
                mov cx,21
        s0: push cx
       
            mov cx,4
                mov si,0
                mov di,0
        s1: mov al,ds:[bx+si]
            mov es:[bx+di],al
            mov al,ds:[bx+si+54h]
                mov es:[bx+di+5],al
                inc si
                inc di
                loop s1
               
                mov cx,2
                mov si,0
                mov di,0
    s2: mov al,ds:[bx+si+7eh]
            mov es:[bx+di+7],al
            inc si
                inc di
                loop s2
               
                mov ax,es:[bx+5]
                mov dx,es:[bx+7]
                div word ptr es:[bx+10]
                mov es:[bx+13],ax
               
                pop cx
                add bx,10h
                loop s0
               
                mov ax,4c00h
                int 21h
               
codesg ends
end start
               
               
               
               
               

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-5 10:15:45 | 显示全部楼层
本帖最后由 NeBen 于 2012-7-5 11:02 编辑

这样把,我把正确的给你看下,我详细的写了注释,看下能帮到你吗?

E1.zip

2.09 KB, 下载次数: 10

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

使用道具 举报

发表于 2012-7-5 10:16:42 | 显示全部楼层
本帖最后由 NeBen 于 2012-7-6 20:33 编辑

最好不要用多个循环,有点复杂,而且让人不好理解,我是单循环的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-5 10:34:52 | 显示全部楼层
你好,谢谢,你的程序简单明了多了。。。我运行之后查看了,好像输出结果有一点小问题。。。不知道是什么情况。。。{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-5 11:01:52 | 显示全部楼层

什么小问题呢,我自己机子测试完全没问题,结果和答案一致
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-5 11:12:27 | 显示全部楼层
我不是很清楚,还是我搞错了,我的截图

QQ截图20120705111853.rar

12.33 KB, 下载次数: 6

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

使用道具 举报

 楼主| 发表于 2012-7-5 11:17:03 | 显示全部楼层
拜托老鸟帮俺看一下吧。。。为什么老是显示 Devide overflow  :L:L:L


assume cs:codesg,ds:datasg,ss:stacksg,es:tablesg

datasg segment
      db '1975''1976''1977''1978''1979''1980''1981''1982''1983'
          db '1984''1985''1986''1987''1988''1989''1990''1991''1992'
          db '1993''1994''1995'
          ;以上是表示21年的21个字符串
          
          dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,187514
          dd 345980,590827,803530,1183000,2759000,3753000,4649000,5937000
           ;以上是表示21年公司总收的21个dword型数据
          
          dw 3,7,9,13,28,130,220,476,778,1001,1442,2258,2793,4037,5635,2886
          dw 11542,14430,15257,17899       
          ;以上是表示21年公司雇员人数的21个word型数据
                  
datasg ends

tablesg segment
      db 21 dup('year sumn ne ?? ')
tablesg ends

stacksg segment stack
      db 0
stacksg ends

codesg segment
start:  mov ax,tablesg
        mov es,ax       ;es指向tablesg段
               
                mov ax,datasg
                mov ds,ax      ;将datasg段定义为数据段
               
                mov ax,stacksg
                mov ss,ax
                mov sp,10h     ;将stacksg段定义为栈段
               
        mov bx,0               
                mov cx,21      ;设置循环次数为21次,因为是21年的数据
        s0: push cx        ;将CS入栈保存循环次数
          
          ;复制年份和收入
            mov cx,4        ;设置循环次数为4次,因为是4个字节
                mov si,0
                mov di,0        ;将偏移地址清零
        s1: mov al,ds:[bx+si]    ;用bx来控制行,si来控制列,idata来控制特定的位置
            mov es:[bx+di],al     ;用al不用ax,每次传送一个字节
            mov al,ds:[bx+si+54h]   ;前八十四个字节是年份
                mov es:[bx+di+5],al    ;第五行开始,第四行是空格
                inc si
                inc di
                loop s1
               
          ;复制人数       
                mov cx,2           ;设置循环次数为2次,因为是2个字节
                mov si,0
                mov di,0           ;将偏移地址清零
    s2: mov al,ds:[bx+si+0a8h]
            mov es:[bx+di+13],al
            inc si
                inc di
                loop s2
               
                ;计算人均收入
                mov ax,es:[bx+5]    ;将低位放入ax中
                mov dx,es:[bx+7]    ;将高位放入dx中
                div word ptr es:[bx+10]
                mov es:[bx+13],ax
               
                pop cx         ;将CS出栈
                add bx,10h      ;推进一行
                loop s0
               
                mov ax,4c00h
                int 21h         ;中断程序正常退出
               
codesg ends
end start
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-5 11:55:58 | 显示全部楼层
你把简单的问题复杂化了,算了还是贴上代码,我自己的方法,也是多循环的,你看看把,能给你点帮助吗,真心看不懂你的代码,排版正常点。。。。:L

E1.zip

1.54 KB, 下载次数: 3

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

使用道具 举报

 楼主| 发表于 2012-7-5 15:49:13 | 显示全部楼层
没有,只是刚刚接触汇编,想把刚刚学的东西都用上,有劳你了。。。排版我是直接用的的复制粘贴。。。请谅解。。。呵呵。。。{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-7 12:23:18 | 显示全部楼层
还没有学到 呵呵 飘过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-20 09:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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