|
主题 : : 看看高手是怎么写试验7代码的!!!强烈推荐中... [待解决] |
回复[ 104次 ]
点击[ 9699次 ] | |
|
|
|
|
[帖 主] [ 发表时间:2008-10-10 02:55 ] | |
荣誉值:0
信誉值:0
注册日期:2008-09-03 00:18 |
DATAS SEGMENT
DB '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982'
DB '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990'
DB '1991', '1992', '1993', '1994', '1995'
DD 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
DD 345980, 590827, 803530, 118300, 184300, 2759000, 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
DATAS ENDS
TABLE SEGMENT
DB 21 DUP ('year summ ne ?? ')
TABLE ENDS
STACKS SEGMENT
DB 16 DUP (0)
STACKS ENDS
ASSUME CS:CODES,DS:DATAS,SS:STACKS
CODES SEGMENT
START:
;相关寄存器初始化
MOV AX,DATAS
MOV DS,AX
MOV AX,TABLE
MOV ES,AX
MOV AX,STACKS
MOV SS,AX
MOV SP,16
MOV BX,0
MOV BP,0
MOV DI,0
MOV SI,0
MOV CX,21
cycle: ;使用栈复制年份
PUSH [DI].0
PUSH [DI].2
POP ES:[BP].2
POP ES:[BP].0
;使用栈复制收入
PUSH 54H.[DI].0
PUSH 54H.[DI].2
POP ES:[BP].7
POP ES:[BP].5
;使用栈复制雇员数
PUSH 0A8H.[SI]
POP ES:[BP].0AH
;计算人均收入
MOV AX,ES:[BP].5
MOV DX,ES:[BP].7
DIV WORD PTR ES:[BP].0AH
MOV ES:[BP].0DH,AX
ADD SI,2H
ADD DI,4H
ADD BP,10H
loop cycle
MOV AH,4CH
INT 21H
CODES ENDS
END START
-------------------------------------------------------------------
栈的使用、结构化程序设计的思想...
话就不多说了,自己体会吧 | | |
|
|
|
|
[第42楼] [ 回复时间:2010-09-05 11:20 ] | |
荣誉值:0
信誉值:0
注册日期:2010-04-06 11:41 |
assume cs:code
data segment
db '1975','1976','1978','1979'
dd 16,22,382,1356
dw 3,7,9,13,28,38,130
data ends
table segment
db 5 dup ('year summ ne ?? ')
table ends
stack segment
db 16 dup(0)
stack ends
code segment
s: mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov ax,stack
mov ss,ax
mov sp,16
mov bx,0
mov si,0
mov di,0
mov cx,4
xh: push 32[di]---压入人数
push 18[si]
push 16[si]---压入收入
push 2[si]
push [si]---压入年份
pop es:[bx]
pop es:2[bx]---一以上2句弹出年份
pop es:5[bx]
pop es:7[bx]---以上2句弹出收入
pop es:0ah[bx]--弹出人数
mov ax,es:5[bx]
mov dx,es:7[bx]
div word ptr es:0ah[bx]
mov es:0dh[bx],ax--复制平均收入
mov byte ptr es:4[bx],20h--以下4句对应TABLE段4空格
mov byte ptr es:9H[bx],20h
mov byte ptr es:0cH[bx],20h
mov byte ptr es:0FH[bx],20h
add si,4---以下3句为下次循环准备数据
add di,2
add bx,16
loop xh
mov ax,4c00h
int 21h ----------共计32行代码
code ends
end s
此程序是看到有人用栈命令。所以我也写一个,果然简洁明了,省略很多DATA段的数据地址。看来栈命令对于复制数据要比MOV强很多。2种传送命令结合起来用,比单纯用MOV传送指令强。
在此再次感谢发贴的朋友,让我受到启发
------------------
回复:终于有人肯把空格 写上了 | | |
|