零基础学汇编 第八章 实验7 (作业)求优化方案
本帖最后由 ┈━═☆佳佑 于 2013-6-10 21:38 编辑这道作业题花了 两天时间做完绞尽脑汁 都还没想到优化方案希望高手给出优化意见
assume cs:codesg
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983';'4',0-35
db '1984','1985','1986','1987','1988','1989','1990','1991','1992';36-71
db '1993','1994','1995' ;72-83
;以上表示21年的21个字byte型字符串
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 ;'4'84-131
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;132-167
;以上表示21年公司的总收入的21个dword型数据
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226;'2'168-209
dw 11542,14430,15257,17800
;以上表示21年公司雇员人数的21个word型数据
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 si,0
mov di,0
mov bp,0
mov cx,21
s:mov bx,0
mov ax,0
mov al, ;年份
mov es:,al
inc si
mov al, ;年份
mov es:,al
inc si
mov al, ;年份
mov es:,al
inc si
mov al, ;年份
mov es:,al
inc si
mov bx,80 ;年收入 si=4
mov ax,
mov dx,
mov es:,ax
mov es:,dx
mov bx,168 ;雇员
mov bx,
mov es:,bx
inc di
inc di
div bx ;平均人收入
mov es:,ax
add bp,16
loop s
mov ax,4c00h
int 21h
codesg ends
end start
抢个沙发等待 高手跟进 中...... 这道题本来就有些问题误导了我 胡乱想了一天多是时间
总收入
公司雇员人数
平均人收入
这三项本来 定义的都是 十进制放入寄存器后 就都是 十六进制了再放入表格 也还是十六进制 怎么可能跟以下格式一样 都显示的是 十进制数
无回帖,不论坛,这才是人道。 好,{:1_1:} 本帖最后由 金色暢想犬舍 于 2013-6-12 04:09 编辑
我写的,很烂,凑合看看吧 ,顺便说一下,有没有学到第八章了的?共同交流下? QQ81881894{:1_1:}assume CS:code,DS:data,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个字符串 ;字节类型 BX+0~83(0~53H)
;这一组数据用SI表示,这组偏移过后,SI指向下一组数据时,SI归零,重来 CX=15H
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 ;双字类型
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;双字类型
;以上是表示21年公司总收入的21个dword型数据 BX+84~168(就是54H~0A8),这一组21个数据,用SI表示
;CX=15H
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226 ;字类型
dw 11542,14430,15257,17800 ;以上是表示21年公司雇员人数的21个WORD型数据 ;字类型
;这一组21个数据,也用SI表示; CX=15H
dw 0,0
data ends
table SEGMENT
db 21 DUP ('year summ ne ?? ')
table ends
STACK segment
db 7 DUP ('year summ ne ?? ')
STACK ends
;编程,将data段中的数据按图上格式写入到table段中,并计算21年终的人均收入(取整),结果也按照图上的
;格式保存在table段中;
code SEGMENT
start: MOV AX,DATA
MOV DS,AX
MOV AX,TABLE
MOV ES,AX
MOV AX,STACK
MOV SS,AX
MOV SP,112
;>>>>>>>>>>>>>>>>>>>>>>>>>>>年份&总收入收入开始>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
MOV CX,15H
YEARMONEY: MOV DS:,CX
MOV CX,2
YEARMONEY1: MOV AX,.0 ;将年份读入一个字
MOV ES:.0,AX ;将一个字的年份写入
MOV AX,.54H ;将总收入读入一个字
MOV ES:.5,AX ;将总收入写入一个字
PUSH AX ;将总收入,入栈;
ADD SI,2
ADD DI,2
LOOP YEARMONEY1
MOV BYTE PTR ES:,' '
MOV BYTE PTR ES:,' '
ADD BP,10H
MOV DI,BX
MOV CX,DS:
LOOP YEARMONEY
;>>>>>>>>>>>>>>>>>>>>>>>>>>>年份&总收入结束>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>雇员人数&人均收入结束>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
MOV SI,2AH ;退着走
MOV BP,140H ;BP也退着走,
MOV DI,BX ;DI清零
MOV BX,0A6H ;BX偏移了,就用不到IDATA了.
MOV CX,15H ;循环次数依然是21次
S: MOV AX, ;定位到最后一个雇员人数读入
MOV ES:,AX ;将雇员人数写入对应字单元中;
POP DX
POP AX
DIV WORD PTR ES: ;除雇员人数-----
MOV ES:,AX ;将人均收入写入指定字单元
MOV BYTE PTR ES:,' ' ;在写完雇员人数后写入一个空格
MOV BYTE PTR ES:,' ' ;在最后面写入一个空格
SUB SI,2
SUB BP,10H ;BP每次-10,就是退一行
LOOP S
MOV AX,4c00h
INT 21h
code ENDS
END start ┈━═☆佳佑 发表于 2013-6-10 21:52 static/image/common/back.gif
这道题本来就有些问题误导了我 胡乱想了一天多是时间
总收入
公司雇员人数
显示十六进制就足够了,谁跟你说要显示10进制的,十六进制的10H和十进制的16,其实表示出来不都是一个数? 持楼主ing……
页:
[1]