鱼C论坛

 找回密码
 立即注册
查看: 2616|回复: 4

实验7 最短的程序 望大家挑刺

[复制链接]
发表于 2011-11-7 11:45:21 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 池子 于 2011-11-7 17:09 编辑

assume cs:code,ds:data,es:table
data segment
db

'1975','1976','1977','1978','1979','1980','198

1','1982','1983'
db

'1984','1985','1986','1987','1988','1989','199

0','1991','1992'
db '1993','1994','1995'

dd

16,22,382,1356,2390,8000,16000,24486,50065,974

79,140417,197514
dd

345980,590827,803530,1183000,1843000,2759000,3

753000,4649000,5937000

dw

3,7,9,13,28,38,130,220,476,778,1001,1442,2258,

2793,4037,5635,8226
dw 11542,14430,15257,17800
data ends

table segment
db 21 dup('year sumn ne ?? ')
table ends
code segment
start:mov ax,data
      mov ds,ax
      mov ax,table
     mov es,ax
mov si,2
mov bx,0
mov di,0


mov cx,21
s:mov ax,ds:[0+bx]
mov es:[di],ax  
mov ax,ds:[2+bx]
mov es:[di+2],ax ;将年份的第一个四字节付给es


mov ax,ds:54h[bx]
mov es:5[di],ax    ;将每一年的收入付给es
mov ax,ds:56h[bx]
mov es:7[di],ax
   
sub si,2
mov ax,ds:0A8h[bx+si]
mov es:0ah[di],ax ;将人数字单元放入es

   mov ax,ds:54h[bx]
   mov dx,ds:56h[bx]
div word ptr ds:0A8h[bx]
  mov es:13[di],ax   ;将人均收入植入
add bx,4
add di,16
loop s

mov ax,4c00h
int 21h
code ends
end start  为什么运行时运行不出?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-7 11:55:59 | 显示全部楼层
你在执行时出现什么问题了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-11-7 13:16:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-7 18:33:13 | 显示全部楼层
本帖最后由 蛇足之王 于 2011-11-7 18:34 编辑

LZ的程序好像会除法溢出
另外,在复制收入时直接算出人均收入可以少两句语句,下面是我写的程序
code segment

  start: mov ax,data
                 mov ds,ax
                 mov ax,table
                 mov es,ax
                 mov bx,0                    ;指向年份和收入
                 mov si,0                    ;table下标
                 mov di,0a8h                 ;指向人数首地址
                 
             mov cx,21
         s : mov ax,[bx]
             mov es:[si],ax
                 mov ax,[bx+2h]
                 mov es:[si+2h],ax           ;复制年份数据
                 
                 mov ax,[bx+54h]
                 mov es:[si+5h],ax
                 mov dx,[bx+56h]
                 mov es:[si+7h],dx           ;复制收入
                 
                 div word ptr [di]           ;直接除以人数算出人均收入
                 mov es:[si+0dh],ax          ;写入人均收入
                 mov ax,[di]
                 mov es:[si+0ah],ax          ;复制人数
                 
                 add si,16
                 add bx,4
                 add di,2
                 loop s
                 
         mov ax,4c00h
         int 21h

code ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-11-7 19:03:57 | 显示全部楼层
找到问题了,LZ在做除法时,定位人数出错了,注意看下面两个!!!的地方,第2次的地址漏写了si
sub si,2
mov ax,ds:0A8h[bx+si]                   ;!!!注意这里!!!
mov es:0ah[di],ax ;将人数字单元放入es

   mov ax,ds:54h[bx]
   mov dx,ds:56h[bx]
div word ptr ds:0A8h[bx]               ;!!!和这里!!!
  mov es:13[di],ax   ;将人均收入植入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 19:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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