汇编指令的实验 实验二 汇编指令
一、 实验目的
学习数据传送、算术运算、串处理和控制转移等常用指令的用法;掌握数据定义伪指令的格式。
二、 实验原理
数据传送、算术运算、串处理和控制转移等常用指令的用法以及数据定义伪指令的格式。
三、 主要仪器及耗材
计算机、MASM软件包。
### 汇编实验知识点详解
#### 一、实验目的
本实验的主要目的是让学生通过实践操作,深入理解并掌握汇编语言中的基本指令及其应用场景。具体包括以下几点:
1. **数据传送指令**:了解如何在不同的寄存器之间、寄存器与内存之间进行数据的传递。
2. **算术运算指令**:熟悉加减乘除等基本运算的操作方法,了解无符号和有符号运算的区别。
3. **串处理指令**:掌握字符串的复制、比较等常见操作。
4. **控制转移指令**:学会根据不同的条件选择程序的执行路径。
5. **数据定义伪指令**:了解如何定义和初始化数据段中的变量。
#### 二、实验原理
汇编语言是一种低级编程语言,它与处理器架构紧密相关,能够直接访问硬件资源。本实验将重点介绍以下几个方面的原理:
1. **数据传送**:使用如`MOV`指令实现数据的复制操作。
2. **算术运算**:通过`ADD`、`SUB`、`MUL`、`DIV`等指令进行基本数学运算。
3. **串处理**:利用`MOVSB`、`CMPSB`等指令进行字符串处理。
4. **控制转移**:通过`JMP`、`JE`、`JNE`等指令实现条件跳转。
5. **数据定义**:使用`.data`段定义数据,并利用`.byte`、`.word`等伪指令初始化变量。
#### 三、主要仪器及耗材
本次实验需要用到的工具包括:
1. **计算机**:提供实验平台。
2. **MASM软件包**:Microsoft宏汇编程序,用于编写和编译汇编语言程序。
#### 四、实验内容与步骤
##### 内容
1. **内存操作数及各种寻址方式使用**:学习如何在汇编语言中使用不同的寻址方式来操作内存中的数据。
2. **数据串传送指令的使用**:掌握串处理指令的基本用法。
3. **算术运算指令的使用**:了解常见的算术运算指令。
4. **条件转移指令的使用**:学习条件转移指令的语法和功能。
##### 步骤
1. **内存操作数及各种寻址方式使用**
```assembly
MOV AX, 1234 ; 将数值1234加载到AX寄存器
MOV [1000], AX ; 将AX寄存器中的值存储到地址1000处
MOV BX, 1002 ; 将数值1002加载到BX寄存器
MOV DL, 39 ; 将数值39加载到DL寄存器
INC BX ; 将BX寄存器的值加1
MOV [BX], DL ; 将DL寄存器的值存储到BX指向的地址
DEC DL ; 将DL寄存器的值减1
MOV SI, 3 ; 将数值3加载到SI寄存器
MOV [BX + SI], DL ; 将DL寄存器的值存储到BX+SI指向的地址
MOV [BX + SI + 1], DL ; 将DL寄存器的值存储到BX+SI+1指向的地址
```
- **操作步骤**
1. 使用A命令输入上述程序代码。
2. 使用T命令逐条执行程序,并使用D命令检查内存单元的内容。
2. **算术运算指令的使用**
- **加法指令add的使用**
```assembly
Mov ax, 1234
Add ax, 5678
Mov bx, 1131
Add bx, ax
```
- **执行结果**: `AX`寄存器的值变为6912(1234+5678),然后`BX`寄存器的值变为8043(1131+6912)。
- **加法指令add和adc的使用**
```assembly
Mov ax, 4652
Add ax, f0f0
Mov dx, 0234
Adc dx, f0f0
```
- **执行结果**: `AX`寄存器的值变为0002(4652+f0f0=0002且进位),`DX`寄存器的值变为0328(0234+f0f0+进位=0328)。
- **减法指令sub的使用**
```assembly
Mov ax, 5678
Sub ax, 1234
Mov bx, 3354
Sub bx, 3340
```
- **执行结果**: `AX`寄存器的值变为4444(5678-1234),`BX`寄存器的值变为0014(3354-3340)。
- **减法指令sub和dec,neg的使用**
```assembly
Mov ax, ff64
Neg al
Sub al, 9d
Neg ax
Dec sl
Neg ax
```
- **执行结果**: `AL`寄存器的值变为9d(对ff64取反后减去9d),之后再取反,并递减`SL`寄存器,最后再次取反`AX`寄存器。
- **乘法指令mul的使用**
```assembly
Mov al, a3
Mov bl, 11
Mul bl
```
- **执行结果**: `AX`寄存器的值变为00b3(a3*11)。
- **带符号的乘法指令imul的使用**
```assembly
Mov al, b4
Mov bl, 11
Imul bl
```
- **执行结果**: `AX`寄存器的值变为00c4(b4*11)。
- **除法指令div的使用**
```assembly
Mov ax, 400
Mov bl, b4
Div bl
```
- **执行结果**: `AX`寄存器的高位部分为商(6),低位部分为余数(16)。
- **带符号的除法指令idiv的使用**
```assembly
Mov ax, 400
Mov bx, b4
Idiv bx
```
- **执行结果**: `AX`寄存器的高位部分为商(6),低位部分为余数(16)。
通过这些具体的实验步骤和示例,学生可以更好地理解和掌握汇编语言中的基本指令及其应用场景,为进一步学习高级编程语言和系统开发打下坚实的基础。