0%

王爽汇编语言 实验7


🍀王爽 《汇编语言》 实验7解答🍀

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
assume cs:code,ds:data,ss:stack

stack segment stack
db 0,0,0,0,0,0,0,0
stack ends

data segment
;年份
db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983'
db '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992'
db '1993', '1994', '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 sumn ne ?? ')
table ends

code segment
start:
;初始化各段寄存器
mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov ax,stack
mov ss,ax
mov sp,10h
;初始化两个大指针,bx给ds段,bp给es段
mov bx,0
mov bp,0
;初始化循环次数21次
mov cx,21

s:
push bx
push cx
push bx
push cx
;在每一次大循环开始时初始化两个小指针,si给ds段,di给es段,均指向一开始的单元
mov si,0
mov di,0
;设置小循环次数为4
mov cx,4

s1:
mov al,ds:[bx][si]
mov es:[bp][di],al
inc si
inc di
loop s1
;s1结束后si=di=4

;将bx移动到收入段对应的第1个单元
add bx,84
;将si设为0,di设为5,为了传送当前收入的四个单元
mov si,0
mov di,5
;设置小循环次数为4
mov cx,4
s2:
mov al,ds:[bx][si]
mov es:[bp][di],al
inc si
inc di
loop s2
;s1结束后si=4,di=9

;将bx移动到人数对应的第1个单元
mov bx,168
;将di移动至table段雇员数所在的第1个单元
mov di,10
pop cx
shl cx,1
mov dx,42
sub dx,cx
add bx,dx
mov cx,bx
mov ax,ds:[bx]
mov word ptr es:[bp][di],ax

;开始计算人均收入
;弹出一开始入栈的bx值赋给bx,此时bx值为当前年份的第1个单元
pop bx
;将bx移动到收入段对应的第1个单元
add bx,84
;收入值的低字赋给ax,高字赋给dx
mov ax,ds:[bx]
mov dx,ds:[bx+2]
;执行除法运算,计算人均收入
mov bx,cx
div word ptr ds:[bx]
;将di移动到当前人均收入的第1个单元
mov di,13
;除法结果的商保存在ax中
mov word ptr es:[bp][di],ax

;弹出之前入栈的cx值赋给cx
pop cx
;bx+4实现data段年份的偏移,执行后bx指向下一个年份
pop bx
add bx,4
;bp+16实现table段偏移,执行后bp指向table段的下一行行首单元
add bp,16

loop s

;结束程序
mov ax,4c00h
int 21h

code ends

end start

实验结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

------------------本文已结束感谢阅读~------------------