assume cs:codesg
data 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,2579000,3753000,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 summ ne ?? ')
table ends
codesg segment
start: ;初始化 ↓
mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov bx,0
mov si,0
mov di,0
mov cx,21
s0:;复制年份 ↓
mov ax,ds:[di]
mov es:[bx].0,ax
mov ax,[di+2]
mov es:[bx+2],ax
;复制收入 ↓
mov ax,84[di]
mov es:[bx+5],ax
mov ax,86[di]
mov es:[bx+7],ax
;复制雇员 ↓
mov ax,ds:168[si]
mov es:[bx+10],ax
;计算人均收入 ↓
mov ax,es:[bx+5]
mov dx,es:[bx+7]
div word ptr es:[bx+10]
mov es:[bx+13],ax
add si,2
add di,4
add bx,16
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
-----------------------------------------------------
程序我觉得应该写对了,但是debug得结果并不是要求的结果啊:
-d es:0
0B63:0000 31 39 37 35 20 10 00 00-00 20 03 00 20 05 00 20 1975 .... .. ..
0B63:0010 31 39 37 36 20 16 00 00-00 20 07 00 20 03 00 20 1976 .... .. ..
0B63:0020 31 39 37 37 20 7E 01 00-00 20 09 00 20 2A 00 20 1977 ~... .. *.
0B63:0030 31 39 37 38 20 4C 05 00-00 20 0D 00 20 68 00 20 1978 L... .. h.
0B63:0040 31 39 37 39 20 56 09 00-00 20 1C 00 20 55 00 20 1979 V... .. U.
0B63:0050 31 39 38 30 20 40 1F 00-00 20 26 00 20 D2 00 20 1980 @... &. ..
0B63:0060 31 39 38 31 20 80 3E 00-00 20 82 00 20 7B 00 20 1981 .>.. .. {.
0B63:0070 31 39 38 32 20 A6 5F 00-00 20 DC 00 20 6F 00 20 1982 ._.. .. o.
我刚开始以为是我的程序写错了!但我看了看当把data的数据放到ds段的时候debug一下:
-d ds:0
0B55:0000 31 39 37 35 31 39 37 36-31 39 37 37 31 39 37 38 1975197619771978
0B55:0010 31 39 37 39 31 39 38 30-31 39 38 31 31 39 38 32 1979198019811982
0B55:0020 31 39 38 33 31 39 38 34-31 39 38 35 31 39 38 36 1983198419851986
0B55:0030 31 39 38 37 31 39 38 38-31 39 38 39 31 39 39 30 1987198819891990
0B55:0040 31 39 39 31 31 39 39 32-31 39 39 33 31 39 39 34 1991199219931994
0B55:0050 31 39 39 35 10 00 00 00-16 00 00 00 7E 01 00 00 1995........~...
0B55:0060 4C 05 00 00 56 09 00 00-40 1F 00 00 80 3E 00 00 L...V...@....>..
0B55:0070 A6 5F 00 00 91 C3 00 00-C7 7C 01 00 81 24 02 00 ._.......|...$..
后面面的数据怎么没放到数据段里面?我漏看了那个知识点?
- [nuojiya8] 2001也不是16的倍数呀 03/16 21:43
- [q2719833] 哦,我想让它闪烁,看看闪烁的效果,呵呵!闪烁的时候还是书上要求的颜色! 05/07 12:54
- [wsrf] 颜色属性怎么没有按书上的来呢? 05/06 22:37
- [q2719833] 哦 明白了!谢谢tomato!我都当字节看了。晕! 05/04 12:06
- [tomato] 很正确,而且也很清晰。后面的数据不是放进去了吗?你为什么认为没有放进去? 05/04 10:49
- [游客] 定义栈空间大点,能保证debug下也能正确执行。跟中断使用栈有关,博主先不必着急理解,你在这里的理解 04/29 10:48
- [游客] 博主说的对。 04/29 10:47
- [q2719833] 对 ,就是。我没考虑到!还是思考的不够严谨!谢谢aten 和tomato了! 04/22 12:54
- [aten] -_-!!我打错字了,最后改写了0:240里的数据!不知道怎么,老打错 04/21 13:34
- [aten] 呵呵,感觉也是编程习惯问题吧!你自己都已经知道了,为什么不再想想呀! 向内存0:200-0:2 04/21 13:31