|
主题 : : 实验7 [已解决] |
回复[ 4次 ]
点击[ 458次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-12-26 18:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12 |
发上来看看
;实验7,将data段中的数据按要求填入table段中
assume ds:datasg,cs:codesg,es:table
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,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11452,14430,15257,17800
datasg ends
table segment
db 21 dup ('year sume ne ?? ')
table ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov ax,table
mov es,ax
mov bx,0
mov di,0
mov cx,21
s0:
mov ax,[bx];年份输入
mov word ptr es:[bx],ax
mov ax,[bx+2]
mov word ptr es:[bx+2],ax
mov ax,54h[bx];收入输入
mov word ptr es:5[bx],ax
mov ax,54h[bx+2]
mov word ptr es:5[bx+2],ax
mov ax,0a8h[di];人数输入
mov word ptr es:0ah[di],ax
mov ax,54h[bx];人均收入输入
mov dx,54h[bx+2]
div word ptr 0a8h[di]
mov es:0dh[bx],ax
add bx,4
add di,2
loop s0
mov ax,4c00h
int 21h
codesg ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-12-29 15:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-11-16 17:02 |
仔细看了一遍,存在2个问题:
第一:bx变量作为data数据段中,每次递增4,指向下一个数据,在年份和收入段中没错,但在雇员段就错了,因为雇员段每个数据是2个字节,递增2就指向下一个数据。递增4指向第3个数据了。
第二:当bx变量作为es,既table段的偏移地址时,两个数据间的差距是16,比如,1975-1976间的地址差距是16,而不是data段的存储排序方式递增4就可以了,这里bx共用,估计很难实现。
其它细节好像处理很好,解决这2个问题,应该可以实现,
呵呵,个人意见,供参考! | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-12-29 18:36 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12 |
bx 管4字节的
di 管2字节的啊
况且我调试了 应该没问题的啊 | | |
|
|
|
|
[第3楼]
[ 回复时间:2011-01-03 12:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12 |
谢谢ares313 我的错了 现将修改后的发上来
assume ds:datasg,cs:codesg,es:table
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,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11452,14430,15257,17800
datasg ends
table segment
db 21 dup ('year sume ne ?? ')
table ends
codesg segment
start:
mov ax,datasg
mov ds,ax
mov ax,table
mov es,ax
mov bx,0
mov di,0
mov cx,21
xor si,si
s0:
mov ax,[bx];年份输入
mov word ptr es:[si],ax
mov ax,[bx+2]
mov word ptr es:[si+2],ax
mov ax,54h[bx];收入输入
mov word ptr es:5[si],ax
mov ax,54h[bx+2]
mov word ptr es:5[si+2],ax
mov ax,0a8h[di];人数输入
mov word ptr es:0ah[si],ax
mov ax,54h[bx];人均收入输入
mov dx,54h[bx+2]
div word ptr 0a8h[di]
mov es:0dh[si],ax
add bx,4
add si,16
add di,2
loop s0
mov ax,4c00h
int 21h
codesg ends
end start | | |
|
|
|
|
[第4楼]
[ 回复时间:2011-01-03 16:33 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-10-06 11:12 |
此贴由 贴主 于 [ 2011-01-03 16:33 ] 结贴。 结贴原因:问题已解决 | | |
|