汇编语言学习笔记(4) | 您所在的位置:网站首页 › 内存条n1和n2 › 汇编语言学习笔记(4) |
注:为讲授方便,使用下列符号: N 代表立即数 N8、N16、N32代表8、16、 32位立即数 R 代表寄存器操作数 R8、R16、R32代 表8、16、32位寄存器操作数 M 代表内存操作数 M8、M16、M32代 表8、16、32位内存操作数 S 代表段寄存器一、传送类指令 1. 通用传送 数据传送功能:计算内存单元的有效地址(不是其中的操作数)→目标 LEA BX , BUF;将BUF单元的有效地址→BX LEA BX , [SI+5] ;将数据段SI+5变址的那个单元的有效地址→BX 注:有效地址就是偏移地址,LEA指令等效于 OFFSET运算符;LEA BX,BUF 等效于 MOV BX,OFFSET BUF 交换指令 2 . 堆栈操作指令 栈顶:栈区的低地址 栈底:栈区的高地址 堆栈段寄存器SS:存放堆 栈段段基址 堆栈指针ESP(SP):存放 栈顶单元的偏移地址 SS、ESP(SP)初值,由程序 员赋值或DOS系统自动赋值 堆栈指针SP的初值决定了堆栈的大小,SP 始终指向堆栈的顶部,即始终指向最后压入堆栈的信息所在的单元 。 堆栈指令 堆栈指令说明:非直接寻址的内存操作数,必须用PTR说明属性 出栈指令
二、算数运算 加减法功能:I NC:目+1→目;影响A、O、P、S、Z,不影响C标 I NC:目+1→目;影响A、O、P、S、Z,不影响C标 I NC:目+1→目;影响A、C、O、P、S、Z 说明:对于非直接寻址的内存操作数,要用PTR 明确说明属性 比较指令
功能:目-源,产生A、C、O、P、S、Z 6个状态标志, 不破坏源、目。该指令一般后跟条件转移指令。 说明:★ 源、目操作数不能同为M ★ 操作数中出现内存操作数时,请注意是否需 要使用PTR运算符 二进制乘法 ★ MUL默认乘数、被乘数、乘积为无符号二进数 ★ IMUL默认乘数、被乘数、乘积为有符号二进数 ★ 高位积为0,则C标、O标=0,否则为1 ★ 乘数、被乘数等长,乘积为双倍长 说明:源、目不能同为M 功能:源×目→目 功能:源×立即数→目 二进制除法 功能:
说明:★ DIV默认除数、被除数、商、余数均为无 符号数;IDIV默认除数、被除数、商、余数 均为有符号数 ★ 被除数应为除数的双倍长 ★ 如除数太小,使商超出范围,则引发CPU中断 ,具体处理方法由操作系统决定,若为DOS操作 系统,则显示:Divided overflow 后返回DOS BCD码调整指令 组合/未组合BCD码数(即压缩/未压缩BCD 码数) 组合BCD码:一字节中含有2位BCD码 未组合BCD码:一字节中含有1位BCD码(高4位为0) 注意:1010~1111不是BCD码 BCD码数的加减运算 指令系统中没有实现BCD码数加法的指令,只能借用ADD、ADC指令。但是ADD、ADC指令默 认操作数是二进数,其运算法则是“逢二进一” , 而BCD码数加法要求按“逢十进一”运算。 因此借用ADD、ADC指令进行BCD码数的加 法还必须对结果进行修正,修正后的结果才是 BCD码数的和数。
组合BCD码加法调整:DAA 功能:默认操作对象为AL,并且根据具体情况对 AL中的高/低4位进行修正。 应用:紧跟在以AL为目标寄存器的ADD/ADC之 后,但AL中必须是组合BCD码数之和。
三、 转移和调用指令 转移类指令分类 按照转移条件分:无条件转移和有条件转移 按照转移范围分:段内转移和段间转移 按照获取转移地址的方法分: 直接转移和间接转移 无条件转移 功能:无条件转移,执行指定标号处的指令说明: ①标号是转移地址标号。 ②SHORT是短转移,其转移范围相对于指令地址 而言在+129~ -126个单元之间。③段内“JMP 标号”,在实模式下,可转移到64K代码 段的任何位置。 有条件转移 按标志位的当前状态转移(设转移地址标号为XYZ) JC XYZ ;当前C标志为1转 JNC XYZ ;当前C标志为0转 JZ XYZ ;当前Z标志为1转 JNZ XYZ ;当前Z标志为0转 JC XYZ ;当前C标志为1转 JNC XYZ ;当前C标志为0转 JZ XYZ ;当前Z标志为1转 JNZ XYZ ;当前Z标志为0转 无符号数条件转移(设转移地址标号为XYZ) 应用:CMP N1, N2 ;N1,N2为无符号数 JA XYZ ;N1 > N2转 JNA XYZ ;N1≤N2转 JC XYZ ;N1 |
CopyRight 2018-2019 实验室设备网 版权所有 |