刚开始觉得这题目超难...
做了一个多小时没什么头绪.
参考了下论坛上牛人的代码.再自己分析了下.弄懂了.贴出我的代码.我用了2种方法.一种常规的.就是一行一行的覆盖table表.另外一种是用到了堆栈.感觉第二种方法比较好理解.贴出来备忘.
assume cs:code,ss:stack
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'
;以上是表示21年的21个字符串
;db '1975' = db '1','9','7','5'.每个数字占一个字节.所以一共为21*4=84个字节.
dd 16,22,382,1356,2390,8000,16000,2446,50065,97479,140417,197514
dd 345980,590827,83530,1183000,1843000,2759000,3753000,4649000,5937000
;以上是表示21年公司总收入的21个dword型数据.dd是双字=4个字节.所以一共占21*4=84个字节.
dw 3,7,9,13,28,130,220,476,778,1001,1442,2258,2793,4037,5636,8226
dw 11542,14430,15257,17800
;以上表示21年公司雇员总数的21个word型数据,dw是字=2个字节.所以一共占21*2=42个字节.
data ends
table segment
db 21 dup (' year summ ne?? ')
table ends
stack segment
db 16 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,10H
mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov si,0
mov di,0
mov bx,0
mov cx,21
s: push [si+0] ;年份前2位入栈
push [si+2] ;年份后2位入栈
push [si+84] ;收入前2位入栈
push [si+84+2] ;收入后2位入栈
push [168+bx] ;雇员数量入栈
pop es:[di+10] ;雇员数量出栈
pop es:[di+7] ;收入后2位入栈
pop es:[di+5] ;收入前2位入栈
pop es:[di+2] ;年份后2位入栈
pop es:[di+0] ;年份前2位入栈
mov ax,es:[di+5] ;高8位放到ax
mov dx,es:[di+7] ;低8位放到dx
div WORD ptr es:[di+10] ;除以雇员数量
mov es:[di+13],ax ;ax是所得的商
mov es:[di+4],20H
mov es:[di+9],20H
mov es:[di+12],20H
mov es:[di+15],20H
add si,4
add bx,2
add di,16
loop s
mov ax,4c00h
int 21h
code ends
end start
ps:网上牛人真多...哎.我怎么就没想到用栈呢...
- [游客] 过程的回味真是无穷! 08/05 17:57
- [kingwrcy] 多谢提示.已经过去接近4个月了.由于工作原因,汇编一直没碰了.哎.准备重新温习下. 07/31 15:09
- [younggay] 分析没有问题。加油! 04/15 16:43
- [younggay] 回答正确。 04/15 16:41
- [游客] 不知道为什么用c做code段老是报错.改成才c1就可以了.莫名其妙 我用的编辑器是masmp 04/15 15:48
- [游客] 嗯,说的很对。这里的栈操作就是一个一个的完成数据移送。 04/15 15:44
- [游客] 刚开始是这样的,弄得慢没关系,只要你努力,总会有结果的。思维是锻炼出来的,经过这程序,再有类似的思维 04/15 11:29
- [游客] 得到别人的技术,不如学会别人的思维方式。从自己参考别人的代码过程,要反思自己思维上的不足。 完 04/15 11:25
- [游客] 嗯。分析的很正确。 注意体会jmp的执行原理。 04/15 11:21
- [游客] 调程序,尤其是汇编程序,耐心是必备的。 04/15 09:37
[ 游客 发表于 2009-04-15 11:25 ]
得到别人的技术,不如学会别人的思维方式。从自己参考别人的代码过程,要反思自己思维上的不足。
完成之后,多回顾,多总结。