汇编程序设计笔记(二),王爽汇编语言实验7,如何熟练实现数据段间数据的传输(寻址部分)

一.前言

  汇编学习的过程参考了王爽老师的《汇编语言》第三版,在笔记当中会相应的书目页数,可以翻书查阅。
  看到实验感觉可以写,但是开始写之后感觉寻址没思路的初学者可以参考下
  本次实验的内容在《汇编语言》的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.总结部分是层层递进的,阔以仔细阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值