一、需求

编程将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照下面的格式保存在table段中
王爽 汇编 实验7寻址方式在结构化数据访问中的应用

 二、代码实现 

 1 ;目的:寻址方式在结构化数据访问中的应用
 2 ;编写:Tony
 3 ;语言:asm
 4 ;时间:2020.3.26
 5 
 6 assume cs:code,ds:data,es:table
 7 
 8 ;数据段(原始数据)
 9 data segment
10     db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
11     db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
12     db '1993','1994','1995'
13     ;以上是表示21年的21个字符串
14     
15     dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
16     dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
17     ;以上是表示21年公司总收入的21个doword型数据
18     
19     dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
20     dw 11542,14430,15257,17800
21     ;以上是表示21年雇员人数的21个word型数据
22 data ends
23 
24 ;数据段(需要填充数据的表)
25 table segment
26     db 21 dup('year summ ne ?? ')    ;字符串共占用16个字节
27 table ends
28 
29 ;代码段
30 code segment
31         ;初始化数据段
32 start:  mov ax,data
33         mov ds,ax
34         mov ax,table
35         mov es,ax
36 
37         ;初始化临时变量        
38         mov bx,0
39         mov dx,0
40         mov si,0
41         mov di,0
42         mov cx,21
43                     
44         ;向table表中添加年份
45 s:      mov ax,word ptr ds:[si]    
46         mov dx,word ptr ds:[si+2]            
47         mov word ptr es:[bx],ax
48         mov word ptr es:[bx+2],dx
49         
50         ;向table表中添加收入    
51         mov ax,word ptr ds:54h[si]    
52         mov dx,word ptr ds:54h[si+2]            
53         mov word ptr es:[bx+5],ax
54         mov word ptr es:[bx+7],dx    
55         
56         ;向table表中添加雇员人数
57         mov ax,word ptr ds:0a8h[di]            
58         mov word ptr es:[bx+0ah],ax
59         
60         ;向table表中添加人均收入(需要计算)
61         mov ax,word ptr es:[bx+5]
62         mov dx,word ptr es:[bx+7]
63         div word ptr es:[bx+0ah]
64         mov word ptr es:[bx+0dh],ax
65         
66         add si,4
67         add di,2
68         add bx,10h
69         
70         loop s        
71         mov ax,4c00h
72         int 21h    
73 code ends
74 end start

 三、上机调试

详细教你一步一步调试程序实现数据表中数据的填充

编译工具:masm611(包含ml.exe、masm.exe、link.exe三个文件),在网上随便下载一个就行,搜索masm611

编译环境:vmware中的xp sp3

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

1.首先对源程序进行编译链接生成可执行文件(我这里源程序名称为p185.asm,编译链接生成p185.exe文件),然后就开始

debug p185.exe并查看各个寄存器的数据情况

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

2.用t指令开始单步调试程序,执行第一条指令mov ax,0b34,执行完成后,数据段地址0b34赋值给寄存器ax

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

 3.继续单步,执行完mov ds,ax后,寄存器ax中的值传递给数据段寄存器ds

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

 此时,我们需要查看一下,数据段data中初始化的数据,一共初始化了210个字节

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

4.继续单步,执行指令mov ax,0b42后,附加段地址0b42赋值给寄存器ax

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

 5.继续单步,执行完mov es,ax后,寄存器ax中的值传递给数据段寄存器es 

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

 此时,我们需要查看一下,数据段table中初始化的数据,一共初始化了336个字节

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

6.连续执行5条指令,初始化临时变量

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

 王爽 汇编 实验7寻址方式在结构化数据访问中的应用

7.连续执行4条指令,将数据段中的年份数据填充到es段的table表中

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

8.连续执行4条指令,将数据段中的收入数据填充到es段的table表中

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

9.连续执行2条指令,将数据段中的雇员人数数据填充到es段的table表中

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

10.连续执行3条指令,将数据段中的人均收入数据填充到es段的table表中

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

11.连续执行3条指令,为table表中的下一行做准备

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

12.在上图的状态下,执行-p指令,让计算机自动执行完循环体,在执行-t -p指令程序正常退出

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

13.忘记了点事情,没有查看table中的数据,程序在重新走一遍吧~_~……,把结果补上

王爽 汇编 实验7寻址方式在结构化数据访问中的应用

从图中可以看出,原始数据已经正确的填充到了table表中

总结:相信你一步一步的这样调试,对汇编中寻址方式在结构化数据访问中的应用会很大帮助与提高,

感谢仔细观看这篇文章的朋友!学习汇编语言,最重要的就是多上机debug调试自己写的程序,这样

如此下去,你会有意想不到的收获和惊喜,^_^,祝君天天有好心情!

 

相关文章:

  • 2022-12-23
  • 2021-12-14
  • 2021-09-23
  • 2021-08-12
  • 2021-12-24
  • 2021-10-07
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-14
  • 2021-09-09
  • 2022-01-18
  • 2021-10-27
  • 2021-05-02
相关资源
相似解决方案