《汇编语言》王爽——第八章 实验7

这次实验是一次总结性的实验,难度也比之前的实验要难。

这里我在第一次敲完的时候debug界面报了11个错- -

mov 指令不能直接操作两个存储单元的数据——Improper operand type

后面调试完成之后程序逻辑出现了问题,而且g命令会卡死

发现是dw数据那块的地址出了问题,应该是地址溢出到系统内存去了。

后修改之后成功了。

上代码:

assume cs:code
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1975','1986','1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
;21年的21个字节
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个双字
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个字
data ends 
table segment
 db 21 dup('year summ ne ?? ')
table ends
code segment
start:
;将data段的数据写入table段之中
mov ax,data
mov ds,ax



mov ax,table
mov es,ax ;table段段地址
mov bp,0  ;table段的ip指针
mov di,168 ;data段里面dw数据的ip指针
mov bx,0   ;data段里db数据和dd数据的Ip指针
mov cx,21 ;大循环21次
s:
mov si,0 ;table段ip指针
;复制年份的四个字节
;本来这里想用循环的 但是想想四次也不是那么多就直接写了 而且也不用多开辟空间存放cx
mov al,ds:[bx+0]  ;不能直接使用两个存储器操作数!!! error点
mov es:[bp+si],al ;年份数据保存table段
inc si
mov al,ds:[bx+1]
mov es:[bp+si],al 
inc si
mov al,ds:[bx+2]
mov es:[bp+si],al 
inc si
mov al,ds:[bx+3]
mov es:[bp+si],al 

;复制完了年份该复制收入了 双字数据
add si,2 ;空格跳过
mov ax,ds:[bx].84 ;不能直接使用两个存储器操作数!!! error点
mov word ptr es:[bp+si],ax ;低位数据保存table段

add si,2
mov dx,ds:[bx+2+84] ;不能直接使用两个存储器操作数!!! error点
mov word ptr es:[bp+si],dx ;高位数据保存table段

 ;定位到雇员数那里去 字数据
add si,3
div word ptr ds:[di] ;做除法 结果存储在ax中
mov dx,ds:[di]   	 ;不能直接使用两个存储器操作数!!! error点
mov word ptr es:[bp+si],dx ;雇员数据保存table段

add si,3 
;定位到人均收入 人均收入等于收入除以人数
mov es:[bp+si],ax  ;将人均收入保存table段

;至此一轮数据已经存储完毕 bx+4指向下一个年份,bp+16指向下一行 di+2指向下一个dw数据
add bx,4
add di,2
add bp,16

loop s

mov ax,4c00h
int 21h
code ends
end start 

 

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值