王爽的汇编语言实验7解答

这道题主要考察了汇编语言寻址方式和数据的存取规则是否熟练,调试过程还是颇费了些周折。好歹还是坚持把代码调试通过了。这里把代码贴出来和感兴趣的朋友分享一下。

下面的代码在MASM5下调试通过。(不失一般性,选取了后面的3年数据)

; analysis for 3 years for efficiency and it is easy to extend to 21 years.
assume cs:codesg 

stack segment
	db 32 dup (0)  
stack ends

year segment
	db '1993','1994','1995'
year ends

salary segment
	dd 3753000,4649000,5937000;394428h,46f028h,5a9768h
salary ends

;employee num
enum	segment
	dw 14430,15257,17800;385eh,3b99h,4588
enum ends

table segment
	db 3 dup ('year sala en as ')
table ends

codesg segment
start:
	;stack init
	mov ax,stack
	mov ss,ax
	mov sp,32
	
	;loop init
	mov si,0 ; year size and salary size =4
	mov bp,0 ; enum size =2
	mov cx,3
	mov ax,table
	mov es,ax ; es put table
	mov di,0
loop_entry:
	push cx
	
	;copy year 
	mov ax,year
	mov ds,ax	
	mov cx,4
	mov bx,si	
	
loop_year:
	mov ah,[bx]
	mov es:[di],ah
	inc di
	inc bx
	loop loop_year
	;copy space
	mov byte ptr es:[di],' '
		
	;copy salary
	inc di
	mov ax,salary
	mov ds,ax	
	mov cx,4
	mov bx,si
	;prepare for calc average salary
	push [bx+2]
	push [bx]		
loop_salary:
	mov ah,[bx]
	mov es:[di],ah
	inc di
	inc bx
	loop loop_salary
	;copy space
	mov byte ptr es:[di],' '

;copy employee num
	inc di
	mov ax,enum
	mov ds,ax	
	mov cx,2
	mov bx,bp
	;prepare for calc average sala
	push [bx]
loop_enum:
	mov ah,[bx]
	mov es:[di],ah
	inc di
	inc bx
	loop loop_enum
	;copy space
	mov byte ptr es:[di],' '

	;calc avarage salay
	pop bx;
	pop ax;
	pop dx;		
	div bx
	
	;averary salary
	inc di
	mov es:[di],ax
	inc di
	inc di
	;copy space
	mov byte ptr es:[di],' '
	inc di
	
	add si,4
	add bp,2
	pop cx
	loop loop_entry
 	
	mov ax,4c00H
	int 21H

codesg ends

end start
	

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值