址方式在结构化数据访问中的应用
一. 实验目的
1、 掌握直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址定位内存的方法。
2、 Div指令的用法。
3、 寻址方式的综合应用。
二.实验内容
1、 不同寻址方式在结构化数据访问中的灵活运用。
2、 Div指令的使用。
3、 Debug调试追踪。
三. 实验内容
Power idea公司从1975年成立一直到1995年的基本情况如下。
下面的程序中,已经定义好了这些数据:
assume cs:codesg
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’
; 以上是表示21年的21个字符串
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个dword型数据
dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226
dw 11542, 14430, 15257, 17800
; 以上是表示21年公司雇员人数的21个word型数据
data ends
table segment
db 21 dup (‘year sumn ne ?? ’)
table ends
编程,将data段中的数据按如下格式写入到table段中,并计算21年终的人均收入(取整),结果也按照下面的格式保存在table段中。
注:可将data段中的数据看出多个数组,而将table段中的数据看成是一个结构型数据的数组,每个结构型数据组包含多个数据项。可用bx定位每个结构型数据,用idata定位数据项,用si定位数组项中的每个元素,对于table中数据的访问可采用[bx].idata和[bx].idata[si]的寻址方式。
完成代码编写,并上机调试,追踪运行结果。
四. 结果
完整代码:
assume cs:code
data segment
db '1975','1976','1977','1978','1979','1980', '1981'
db '1982', '1983','1984', '1985','1986', '1987','1988'
db '1989','1990','1991','1992','1993','1994','1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479
dd 140417,197514,345980,590827,803530,118300,1843000
dd 2759000,3753000,4649000,5937000
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037
dw 5635,8226,11542,14430,15257,17800
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends
code segment
start:
mov ax,data
mov es,ax
mov ax,table
mov ds,ax
mov bx,0
mov bp,0
mov si,0
mov cx,21
a:
mov ax,es:[bp+0]
mov ds:[bx+0],ax
mov ax,es:[bp+2]
mov ds:[bx+2],ax
mov ax,es:[bp+54H]
mov ds:[bx+5],ax
mov ax,es:[bp+56H]
mov ds:[bx+7],ax
mov ax,es:[si+0A8H]
mov ds:[bx+10],ax
mov ax,ds:[bx+5]
mov dx,ds:[bx+7]
div word ptr ds:[bx+10]
mov ds:[bx+13],ax
add si,2
add bp,4
add bx,16
loop a
mov ax,4C00H
int 21H
code ends
end start
运行结果:
测试前:
测试后:
五. 心得体会
1、该汇编程序就相当于C语言程序中给结构体数组赋值。汇编中的一些寻址方式(比如:[bx+idata],[bx+si],[bx+si+idata])的操作和C语言中的数组,结构体“相似”。
2、db是字节型数据,dw是字型数据,dd双字数据。