汇编学习历程(内存定位与数据拷贝)

本文介绍了一个使用汇编语言进行数据处理的综合性程序案例。该程序将原始数据段中的年度、总收入及公司雇员数量等信息复制到指定内存区域,并通过循环结构计算每年的人均工资。
;学习汇编的一个比较综合性的程序,将data段中的数据复制到table段中。并计算平均工资。
;程序如下:


assume cs:code,ds:data,es:table,ss:stack

data 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'
;以上是表示21年的21个字符串,共84字节,0-83

dd 16,22,382,1356,2390,8000,16000,25586,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;以上是表示21年的总收入,共84个字节,84-167

dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;以上是21年公司的雇员数,共42个字节,168-210
data ends

table segment
db 21 dup('year sumn ne ?? ')
table ends

stack segment
dw 8 dup(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 bx,0
	mov di,0
	
	mov cx,21						;设置循环次数
	
	year:
	push cx							;保护循环计数,貌似这里用不上
	
	mov ax,word ptr ds:[si]
	mov word ptr es:[bx + 0],ax
	add si,2
	mov ax,word ptr ds:[si]
	mov word ptr es:[bx + 2],ax
	add si,2
	
	add bx,16
	pop cx
	loop year
	;-----------------------------------以上代码实现把年复制到table内存中
	
	mov bx,0							;相关寄存器清零操作
	mov di,0
	
	mov cx,21
	sume:
	push cx
	mov ax,word ptr ds:[si]
	mov word ptr es:[bx + 5],ax
	add si,2
	mov ax,word ptr ds:[si]
	mov word ptr es:[bx + 7],ax
	add si,2
	
	add bx,16
	pop cx
	loop sume
	;----------------------------------以上代码实现把总收入复制到table内存中
	
	mov bx,0							;相关寄存器清零操作
	
	mov cx,21
	ne0:
	push cx
	mov ax,word ptr ds:[si]
	mov word ptr es:[bx + 10],ax
	add si,2

	add bx,16
	pop cx
	loop ne0
	;----------------------------------以上代码实现把年度总人数复制到table内存中
	
	mov bx,0
	
	mov cx,21
	con:
	push cx
	mov dx,word ptr es:[bx + 7]
	mov ax,word ptr es:[bx + 5]
	div word ptr es:[bx + 10]
	mov word ptr es:[bx + 13],ax
	
	add bx,16
	pop cx
	loop con
	
	;-----------------------------------以上代码实现求商指令
	mov ax,4c00h
	int 21h
	
code ends

end start


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值