汇编语言学习笔记(4) 您所在的位置:网站首页 内存条n1和n2 汇编语言学习笔记(4)

汇编语言学习笔记(4)

2024-06-27 04:13| 来源: 网络整理| 查看: 265

注:为讲授方便,使用下列符号:

N 代表立即数 N8、N16、N32代表8、16、 32位立即数 R 代表寄存器操作数 R8、R16、R32代 表8、16、32位寄存器操作数 M 代表内存操作数 M8、M16、M32代 表8、16、32位内存操作数 S 代表段寄存器  

一、传送类指令

 1. 通用传送

数据传送

功能:源→目,源不变,不影响6种标志 说明:CS不能做目标,不能向段寄存器写入立即数 ;禁止2个内存单元直接传送 ;源、目属性要一致 有效地址传送

 

功能:计算内存单元的有效地址(不是其中的操作数)→目标 LEA BX , BUF;将BUF单元的有效地址→BX LEA BX , [SI+5] ;将数据段SI+5变址的那个单元的有效地址→BX 注:有效地址就是偏移地址,LEA指令等效于 OFFSET运算符;LEA BX,BUF 等效于 MOV BX,OFFSET BUF 交换指令

功能:完成2个操作数互换 说明: 段寄存器、立即数不能参加互换 !;2个内存操作数不能互换,源、目的类型一致

 2 . 堆栈操作指令

栈顶:栈区的低地址 栈底:栈区的高地址 堆栈段寄存器SS:存放堆 栈段段基址 堆栈指针ESP(SP):存放 栈顶单元的偏移地址 SS、ESP(SP)初值,由程序 员赋值或DOS系统自动赋值 堆栈指针SP的初值决定了堆栈的大小,SP 始终指向堆栈的顶部,即始终指向最后压入堆栈的信息所在的单元 。 堆栈指令 堆栈指令

 

说明:非直接寻址的内存操作数,必须用PTR说明属性 出栈指令

 

说明: 非直接寻址的内存操作数,必须用PTR说明属性 16位寄存器进栈/出栈 PUSHA ;依次把AX、CX、DX、BX、 SP、BP、SI、DI压栈(共2´8 字节) POPA ;从栈顶弹出2*8字节依次放入DI、 SI、BP、SP、BX、DX、CX、 AX

        

 

二、算数运算 

加减法

功能:ADD :源+目→目            SUB :目–源→目            ADC :源+目+上条指令执行后的C标→目            SBB :目–源–上条指令执行后的C标→目 注:此四种操作都影响A、C、O、P、S、Z标志 说明:源、目操作数的属性(长度)要一致 ;若操作数中有内存操作数时,请注意是 否需要使用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码数的和数。

事实上,N1和N2可以是任意的BCD码数, 借用ADD、ADC运算后必须具体分析运算结果, 然后根据不同的情况选择加06H修正,或是加 60H修正,或是加66H修正。 因此借用ADD、ADC指令进行BCD码数的加 法还必须对结果进行修正,修正后的结果才是 BCD码数的和数。 如果对于每一次BCD码数的加法都要由 程序员来判断结果的话,这太麻烦了,因此 指令系统中设计了一条“组合BCD码数加法 调整指令¾¾DAA”由硬件进行分析,再对 结果进行调整。 上例编程时只需要按以下方式设计程序即可

 

   

 

组合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 实验室设备网 版权所有