|
主题 : : 绝了!比置顶程序还要牛的程序,不另外定义段,只用23条汇编指令完成程序要求。比最牛程序少用了七行代码。 [待解决] |
回复[ 66次 ]
点击[ 6561次 ] | |
|
|
|
|
[帖 主] [ 发表时间:2009-07-02 10:50 ] | |
荣誉值:0
信誉值:0
注册日期:2008-09-26 07:46 |
code segment
start:mov ax,data
mov ds,ax
mov bx,0
mov si,0a8h
mov ax,table
mov ss,ax
mov bp,0
mov cx,21
s:mov ax,[si]
mov [bp+0ah],ax
mov ax,[bx]
mov dx,{bx+2}
mov [bp],ax
mov [bp+2],dx
mov ax,[54h+bx]
mov dx,[56h+bx]
mov [bp+05h],ax
mov [bp+07h],dx
div word ptr [bp+0ah]
mov [bp+0dh],ax
add bx,4
add si,2
add bp,10h
loop s
mov ax,4c00h
int 21h
code ends
end start
我的QQ:479488993 我的博客:http://www.asmedu.net/blog/user/usermain.jsp?neighborId=14266 希望与热爱技术的人为伍。 | | |
|
|
|
|
[第27楼] [ 回复时间:2010-12-07 18:49 ] | |
荣誉值:0
信誉值:0
注册日期:2010-12-04 20:54 |
8楼写的确实好,我给加了注释
codesg segment
start:
mov ax,data
mov ds,ax ;用ds指向data 段
mov ax,table
mov es,ax ;用es指向table段
mov bx,0 ;初始化各数据指针
mov si,0
mov di,0
mov cx,21 ;设置循环次数
s:
mov ax,[si] ;复制年份
mov es:[bx],ax
mov ax,[si+2]
mov es:[bx+2],ax
mov ax,[di+168] ;复制员工数
mov es:[bx+10],ax
mov ax,[si+84] ;复制年总收入,使用dx方便人均收入的计算
mov es:[bx+5],ax
mov dx,[si+86]
mov es:[bx+7],dx
div word ptr [di+168] ;计算人均收入
mov es:[bx+13],ax ;写入人均收入
add si,4 ;准备下一次循环的数据指针
add di,2
add bx,16
loop s ;精妙之处在于作者在1.复制年份和总收入时,各用了两个常数(0,2和84,86)作为数据指针
;2.先复制员工数,这极大的方便了人均收入的计算。
mov ax,4c00h
int 21h
codesg ends
end start | | |
|