;学习汇编的一个比较综合性的程序,将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汇编学习历程(内存定位与数据拷贝)
最新推荐文章于 2023-06-05 14:42:29 发布
本文介绍了一个使用汇编语言进行数据处理的综合性程序案例。该程序将原始数据段中的年度、总收入及公司雇员数量等信息复制到指定内存区域,并通过循环结构计算每年的人均工资。
3510

被折叠的 条评论
为什么被折叠?



