一.前言
汇编学习的过程参考了王爽老师的《汇编语言》第三版,在笔记当中会相应的书目页数,可以翻书查阅。
看到实验感觉可以写,但是开始写之后感觉寻址没思路的初学者可以参考下
本次实验的内容在《汇编语言》的172页实验7,实验七的核心在于寻址和除法运算,本篇是关于本实验的第一篇博客,主要记录如何寻址。
王爽老师的书写的真是好…
二.寻址部分思路
比方说我们看到这么一个数据段
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年年份的字符串(二维数组)
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;表示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年公司雇员数量的word型数据
data ends
(一)要做的工作都有什么?
1.确认数据来源(原数据)的地址
2.确认数据去向的地址
3.合理使用stack segment栈段来寄存数据 //这个下篇博客再说
(二)确认数据来源(原数据)的地址
1.先确认段地址。用ds寄存器来存放原数据的段地址,因为数据来源基本上都是data segment代码段,
2.重要的是确认偏移地址
(1)首先看基本数据类型:db字节型,单个数据占一个字节;dw字型,单个数据占二个字节;dd双字型,单个数据占四个字节
(2)根据基本数据的组织形式还可以分出一下这两种:一维数组,二维数组,或者是结构体的成员。比如分析这些数据
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000
首先,基本数据类型是dd双字型;其次,数据的组织形式是8*1的一维数组(使用双字节的原因:最大的数据超过了65535,必须用更多字节来存放数据)
再看一个
db '1975','1976','1977','1978','1979','1980','1981','1982','1983
首先,基本数据类型是db字节型,每个字母占一个字节;其次,组织形式是个9*4的二维数组。
(注意这里存储的是字符串,而不是数字。一个字节最多放置一个数值为255的数据,放不下1975这么大的数字。内存中实际存放的是‘1’‘9’‘7’‘5’的ASCII码,一个字节是放得下的)
(3)基本数据类型+组织形式=偏移地址表达式。至此可以得出偏移地址。
db '1975','1976','1977','1978','1979','1980','1981','1982','1983`
以9*4的二维数组为例,偏移地址可以表示为[bp][si],其中0<=[bp]<=8,0<=[si]<=3
(三)、确认数据去向的地址
1.与(二)中一样,依然要先确认段地址。我们定义一个table segment表格段来存放数据,用es寄存器来存放新数据的段地址(ds寄存器已经被原数据用了)
在段地址上咱们都不会有什么疑问,顶多就是要记得ds存放原数据的段地址,es存放新数据的段地址罢了。
2.重要的也还是确认偏移地址。
偏移地址=基地址+相对基地址的偏移地址。关注的两个点如下,只不过是把整个偏移地址又拆分成了“基地址”和“相对基地址的偏移地址”
(1)基地址,(表格里叫行内地址),每个基地址对应一个结构体实例。经常用[bx]来表示,用来锁定一个结构体实例。
(2)相对基地址的偏移地址,用来锁定一个结构体实例的成员变量。表中的第一个成员是年份(char year[4]),它的相对基地址的偏移地址可以表示为:0[di]。这个成员的整个地址表达式是:es:[bx].0[di],表达式等同于es:[bx+0+si]
以上是书中提供的数据组织形式。显然这是个结构体的组织形式。第一个成员是char year[4],第二个成员是int income,等等
(这里可以参考一下书中p164的寻址方式小结,当然没书也不要紧)
三.小结
1.内存单元之间数据的传输,关键在于确认数据来源与数据去向两者的地址
2.确认地址的关键在于确认偏移地址
3.偏移地址的确认最依赖于数据的组织形式(一维二维数组,结构体成员)
4.各种组织形式对应的偏移地址表达式可以参考书中p164寻址方式小结,我认为最关键的有这么几种:
一维数组:[bx]
二维数组:[bx][si]
结构体第idata个成员:[bx].idata
结构体第idata个成员数组:[bx].idata[si]
5.总结部分是层层递进的,阔以仔细阅读