《汇编语言(第二版)》实验七,EIO版参考答案
努力了好几个小时,终于有了回报。。。。。。小甲鱼老师的讲解还没看,测试下自己学的扎实不扎实,发完此贴继续看小甲鱼老师的讲解,欢迎纠错,千万别喷我- -assume cs:code,ds:data,es:table,ss:stackdata segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984'
db '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994'
db '1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,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
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends ;以上是实验七数据
stack segment
dw 0
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov ax,stack
mov ss,ax
mov sp,16 ;为各个段寄存器赋值
mov si,0
mov di,0
mov bx,0 ;从头开始,为偏移地址的各个寄存器置零
mov cx,2 ;总结data数据段发现:年份与收入所需空间均为4字节,循环两次,将年份与收入录入内存中的表格
a: push cx ;cx入栈,双重循环
mov cx,21 ;年份与收入部分均为21份数据,循环21次,实现全部录入
b: mov ax, ;用寄存器ax录入,算是自己能想到的小小的优化吧
mov dx,2 ;dx空着,压榨劳动力,不努力工作不给你奖金,嘿嘿
mov es:,ax
mov es:,dx ;为内存中所谓的表格赋值,(相对)基址变址寻址用上
add bx,10h
add si,4 ;bx控制行,si继续寻找数据段中的下一个数据,由于ax一次传输16位数据,由于dx跟着一起传输数据,所以si+4
loop b
mov di,5
mov bx,0 ;第二次循环开始录入收入,di控制列,bx重新置零,控制行
pop cx
loop a
mov cx,21 ;传输数据以及计算平均收入,均循环21次,所以cx置为21
mov di,0ah ;di还是控制列,di置为雇员的地址,0ah,bx循环后已置零
d: mov ax, ;不只为何,循环的标号写成c就会报错,一会查查,
mov es:,ax ;偏移地址si刚好指向雇员数,通过循环,通过ax寄存器将人数数据依次送入bx与di控制的数组中
mov ax,es:5 ;除法了,求平均收入
mov dx,es:7
div word ptr
mov es:0dh,ax
add bx,10h
add si,2 ;si指向下一个数据,一个数据占一个字的空间,所以si+2
loop d
mov ax,4c00h
int 21h
code ends ;没了
end start ;真的没了 帮顶。,。
、。 很好,继续加油!
页:
[1]