50行代码实现《汇编语言》王爽 实验七

Posted sndapk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了50行代码实现《汇编语言》王爽 实验七相关的知识,希望对你有一定的参考价值。

实验七:寻址方式在结构化数据访问中的应用

要求

50行代码实现《汇编语言》王爽


思路

近21年的数据要保存在表格中(我们想像中的表格,其实就是table区域内存),我们尝试用21个loop完成

根据源数据(data)可得到:

年份数据:每年为4个byte,所以总大小为21*4=84字节,内存偏移区间为0~83(十六进制0~53h)

收入数据:每年为1个double word,双字=4字节,所以总大小为21*4=84字节,内存偏移区间为84~167(十六进制54h~A7h)

雇员数据:每年为1个word,字=2字节,所以总大小为21*2=42字节,内存偏移区间为168~209(十六进制a8h~d1h)

(注:以上各项的偏移位置的起点在每个loop中会用到)

根据目标内存区域格式可得到每年的各项数据位置:

每个年份占用整16字节(一行)

年份占4字节,行偏移位置:0~3h

4h为空格

收入占4字节,行偏移位置:5h~8h

9h为空格

雇员占2字节,行偏移位置:ah~bh

ch为空格

待计算的收入占2字节,行偏移位置:dh~eh

fh为结尾空格

(注:以上各项的偏移位置的起点在每个loop中会用到)

寄存器选择:

ds中的数据项因为2个4字节,1个2字节,所以需要2个寄存器(相当于高级语言临时变量)来保存偏移,这里使用bx, si
es中需要1个寄存器,指向每一行就可以 ,这里使用di

代码

assume cs:codesg, es:table, ds:data

data segment
;21年份的21个字符串
db 1975,1976,1977,1978,1979,1980,1981,1982,1983
db 1984,1985,1986,1987,1988,1989,1990,1991,1992
db 1993,1994,1995

;21年公司总收入的21个dword型数据
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个word型数据
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
;引号中的这些为占位符,无意义,也可以用16个空格替换掉
db 21 dup (year summ ne ?? )
table ends

codesg segment
start:
mov ax, data
mov ds, ax
mov ax, table
mov es, ax

;初始化寄存器
mov bx, 0
mov si, 0
mov di, 0

mov cx, 21
;处理年份,由于是字符只能按位操作
s:
mov al, ds:[bx]
mov es:[di], al
mov al, ds:[bx+1]
mov es:[di+1h], al
mov al, ds:[bx+2]
mov es:[di+2h], al
mov al, ds:[bx+3]
mov es:[di+3h], al

;处理雇员
mov ax, ds:[si+0a8h]
mov es:[di+0ah], ax

;处理收入(放在处理雇员后面,减少一次mov)
mov ax, ds:[bx+54h]
mov dx, ds:[bx+54h+2h]
mov es:[di+5h], ax
mov es:[di+5h+2h], dx

;计算人均收入
div word ptr es:[di+0ah]
mov es:[di+0dh], ax ;只保留商

add bx, 4h ;十进制4也可以
add si, 2h ;十进制2也可以
add di, 10h ;十进制16也可以
loop s

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

结果

50行代码实现《汇编语言》王爽






以上是关于50行代码实现《汇编语言》王爽 实验七的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言 王爽 实验七

王爽 汇编 实验10.1

汇编语言(王爽)实验十

汇编语言-王爽-实验10

汇编语言(王爽) 实验十一

汇编语言(王爽) 实验九