实验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为什么运行时运行不出? 你在执行时出现什么问题了? 本帖最后由 蛇足之王 于 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 找到问题了,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]