|
主题 : : 不是说,有空格的吗?看一下我写的程序[实验七]: [待解决] |
回复[ 0次 ]
点击[ 262次 ] | |
荣誉值:0
信誉值:0
注册日期:2012-11-05 12:07 |
assume cs:code, ss: stack
stack segment
dd 4 dup (0);定义16个字节的栈段。
stack ends;定义栈段到此结束!
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个字符串 0 ~ 83
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型数据。 84 ~ 167
dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635
dw 8226, 11524, 14430, 15257, 17800
;以上是表示21年公司雇员人数的21个word 型数据! 168 ~ 208
data ends;定义数据段到此结束!
table segment
db 21 dup ('year summ ne ?? ');共16个字节*21个字节。
table ends
code segment
start: mov ax, stack;设置栈顶!初始状态下栈为空,为什么用栈,因为数据的
mov ss, ax;暂存一般都是用栈来进行的!作者说了,用
mov sp, 10H;到了前面的所有的知识,所以还是尽量使用栈!!!!
mov ax, data
mov ds, ax;设置源数据段的段地址保存在ds中。
mov ax, table
mov es, ax;设置目标数据段的段地址保存在es中。
mov cx, 21;总共有21条数据!所以循环21次!
mov bx, 0;这里用bx作为每一行的首偏移地址的变量,段在地在ds中。
mov si, 0;这里用si作为4个字节(年份 和总收入)的相对偏移地址。
mov di, 0;这里用di作为员工人数的2个字节的相对偏移地址。
s: ;完成年份的录入,中间以空格隔开。
push 0[si]
pop es:0[bx]
push 2[si]
pop es:2[bx];
mov byte ptr es:4[bx],' '
;完成总收入的录入,中间以空格隔开。
mov ax,84[si]
mov es:5[bx], ax;这里为后面的求人均收入做好准备。
mov dx,86[si]
mov es:7[bx], dx;要注意es: (*)[bx]。
mov byte ptr es:9[bx],' '
;完成员工人数的录入!
push 168[di];这里要用di,因为到时循环的时候,增加的不一样!
pop es:10[bx]
mov byte ptr es:12[bx],' '
;完成对平公资的求解和录入。
div word ptr es:10[bx];员工人数作为除数!
mov es:13[bx], ax
mov byte ptr es:15[bx],' '
add si, 4;因为每次操作的是dw类型的。
add di, 2;因为每次操作的是w类型的。
add bx, 10H ;因为每一行的大小是10H!所以下一行为+10H。
loop s
mov ax, 4c00H
int 21H
code ends;定义的代码段到此结束!
end start | | |