池子 发表于 2011-11-7 11:45:21

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

本帖最后由 池子 于 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:
mov es:,ax
mov ax,ds:
mov es:,ax ;将年份的第一个四字节付给es


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

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

mov ax,4c00h
int 21h
code ends
end start为什么运行时运行不出?

zyp2011_mit 发表于 2011-11-7 11:55:59

你在执行时出现什么问题了?

z310394543 发表于 2011-11-7 13:16:06

蛇足之王 发表于 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,
             mov es:,ax
               mov ax,
               mov es:,ax         ;复制年份数据
               
               mov ax,
               mov es:,ax
               mov dx,
               mov es:,dx         ;复制收入
               
               div word ptr          ;直接除以人数算出人均收入
               mov es:,ax          ;写入人均收入
               mov ax,
               mov es:,ax          ;复制人数
               
               add si,16
               add bx,4
               add di,2
               loop s
               
         mov ax,4c00h
         int 21h

code ends

end start

蛇足之王 发表于 2011-11-7 19:03:57

找到问题了,LZ在做除法时,定位人数出错了,注意看下面两个!!!的地方,第2次的地址漏写了si
sub si,2
mov ax,ds:0A8h                   ;!!!注意这里!!!
mov es:0ah,ax ;将人数字单元放入es

   mov ax,ds:54h
   mov dx,ds:56h
div word ptr ds:0A8h               ;!!!和这里!!!
mov es:13,ax   ;将人均收入植入
页: [1]
查看完整版本: 实验7 最短的程序 望大家挑刺