《汇编语言(第四版)》 . 王爽著 . 清华大学出版社 . 2019
¶实验 7 寻址方式在结构化数据访问中的应用
¶数据处理的基本问题
数据处理的两个基本问题:
1)处理的数据在何处?
2)处理的数据有多长?
¶在何处?
汇编语言中用三个概念来表达数据的位置,即立即数、寄存器、段地址(SA)和偏移地址(EA)
立即数:直接包含在机器指令中的数据
1 | add bx,2000H |
寄存器:指令要处理的数据在寄存器中
1 | mov ds,ax |
段地址(SA)和偏移地址(EA):指令要处理的数据在内存中,在指令中用 [X]
的格式给出 EA,SA 在某个段寄存器中
注意,只有 bx、si、di 和 bp 这 4 个寄存器可以用在 [...]
中来进行内存单元的寻址
1 | mov ax,[bx+si+8] ;隐式给出存放段地址的寄存器 |
¶有多长?
8086CPU 的指令,可以处理两种尺寸的数据,byte 和 word,在机器指令中要指明,指令进行的是字操作还是字节操作,常见的处理方法有三种
1)通过寄存器名指明指令进行的是字操作还是字节操作
1 | mov ds:[0],ax ;字操作 |
2)用操作符 word ptr
和 byte ptr
指明内存单元的长度,注意,在没有寄存器参与的内存单元访问指令中,用操作符显性地指明所要访问的内存单元的长度是很有必要的
1 | mov word ptr ds:[0],1 ;字操作 |
3)有些指令默认了访问的是字单元还是字节单元,例如 push
指令就只进行字操作
¶结构化数据访问
[bx+si+idata]
的寻址方式为结构化数据的处理提供了方便,我们可以用 bx 定位整个结构体,用 idata 定位结构体中的某一个数据项,用 si 定位数组项中的每个元素,为此,有更贴切的书写方式:[bx].idata
、[bx].idata[si]
¶实验任务
思路都写在注释中了
1 | cs:code,ds:data,ss:stack |
¶汇编语言实验合集
实验 1 查看 CPU 和内存,用机器指令和汇编指令编程
实验 2 用机器指令和汇编指令编程
实验 3 编程、编译、连接、跟踪
实验 4 [bx] 和 loop 的使用
实验 5 编写、调试具有多个段的程序
实验 6 实践课程中的程序
实验 7 寻址方式在结构化数据访问中的应用
实验 8 分析一个奇怪的程序
实验 9 根据材料编程
实验 10 编写子程序
课程设计 1
实验 11 编写子程序
实验 12 编写 0 号中断的处理程序
实验 13 编写、应用中断例程
实验 14 访问 CMOS RAM
实验 15 安装新的 int9 中断例程
实验 16 编写包含多个功能子程序的中断例程
实验 17 编写包含多个功能子程序的中断例程
课程设计 2