王爽 汇编 实验7寻址方式在结构化数据访问中的应用
一、需求
编程将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照下面的格式保存在table段中
二、代码实现
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
1.首先对源程序进行编译链接生成可执行文件(我这里源程序名称为p185.asm,编译链接生成p185.exe文件),然后就开始
debug p185.exe并查看各个寄存器的数据情况
2.用t指令开始单步调试程序,执行第一条指令mov ax,0b34,执行完成后,数据段地址0b34赋值给寄存器ax
3.继续单步,执行完mov ds,ax后,寄存器ax中的值传递给数据段寄存器ds
此时,我们需要查看一下,数据段data中初始化的数据,一共初始化了210个字节
4.继续单步,执行指令mov ax,0b42后,附加段地址0b42赋值给寄存器ax
5.继续单步,执行完mov es,ax后,寄存器ax中的值传递给数据段寄存器es
此时,我们需要查看一下,数据段table中初始化的数据,一共初始化了336个字节
6.连续执行5条指令,初始化临时变量
7.连续执行4条指令,将数据段中的年份数据填充到es段的table表中
8.连续执行4条指令,将数据段中的收入数据填充到es段的table表中
9.连续执行2条指令,将数据段中的雇员人数数据填充到es段的table表中
10.连续执行3条指令,将数据段中的人均收入数据填充到es段的table表中
11.连续执行3条指令,为table表中的下一行做准备
12.在上图的状态下,执行-p指令,让计算机自动执行完循环体,在执行-t -p指令程序正常退出
13.忘记了点事情,没有查看table中的数据,程序在重新走一遍吧~_~……,把结果补上
从图中可以看出,原始数据已经正确的填充到了table表中
总结:相信你一步一步的这样调试,对汇编中寻址方式在结构化数据访问中的应用会很大帮助与提高,
感谢仔细观看这篇文章的朋友!学习汇编语言,最重要的就是多上机debug调试自己写的程序,这样
如此下去,你会有意想不到的收获和惊喜,^_^,祝君天天有好心情!