汇编语言

期末复习要求

  • 指令格式
  • 寻址方式
  • 各类指令的功能和特点
    • 数据传送类指令
    • I/O数据传送指令
    • 算术指令
    • 辅助的算术指令
    • 逻辑指令
    • 移位和循环指令
    • 跳转指令
    • 循环指令
    • 串指令
    • 标志操作指令
    • 其他指令

一、指令格式

标号: 指令助记符 操作数 ;注释
有的指令为双操作数,有的指令为单操作数,有的指令无操作数。

二、寻址方式

在微型计算机中,操作数可能在哪里?

  1. 操作数包含在指令中(在指令中)
  2. 操作数包含CPU的某一寄存器中(在寄存器中)
  3. 操作数包含在内存的数据区中,且指令中的操作数场包含着此操作数的地址(内存操作数,存储器操作数)

因此,寻址方式有7种

  • 立即数寻址

    • 操作数由指令给出
    • MOV DX 100H
  • 寄存器寻址
    • 操作数在寄存器中
    • ADD AX,BX
  • 直接寻址
    • 操作数的有效地址由指令直接给出
    • MOV AX,[100]
  • 寄存器间接寻址
    • PA=DS*10H+DI/SI/BX
    • PA=SS*10H+BP
    • MOV AX,[BX]
  • 寄存器相对寻址
    • PA=DS*10H+DI/SI/BX+位移量
    • PA=SS*10H+BP+位移量
    • MOV AL,MESS[SI]
  • 基址加变址寻址
    • PA=DS*10H+BX+DI/SI
    • PA=SS*10H+BP+DI/SI
    • MOV AX,[BX][DI]
    • MOV AX,[BX+DI]
  • 相对基址变址寻址
    • PA=DS*10H+BX+DI/SI+位移量
    • PA=SS*10H+BP+DI/SI+位移量
    • MOV AX,BUFF[BX][DI]
    • MOV AX,BUFF[BX+DI]

注意:用BX寄存器进行间接寻址时,默认的段寄存器为DS,因为BX称为基址寄存器。如果要对其他段寄存器所指的区域进行寻址,则必须在指令前用前缀指出寄存器名。

如果以寄存器BP对操作数进行间接寻址,则必须注意:操作数默认在堆栈段中

在双操作数指令中,源操作数和目的操作数不能同时为存储器地址。

注意哦,上述的间接寻址的寄存器,只有BX BP DI SI

代码段寄存器,CS,不能用作指令的寄存器

三、各类指令的功能和特点

  • 数据传送类指令

    • MOV

      • 要求两操作数字长必须相同,不允许同时为存储器操作数,不允许同时为段寄存器,在源操作数是立即数时,目标操作数不能是段寄存器,IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。
    • XCHG
      • 实现字节,字交换
      • XCHG 目的,源
    • LEA
      • 取有效地址指令,将存储器地址送到一个寄存器。要求源操作数必须为内存单元地址,目标操作数必须为一个16位的通用寄存器。
    • LDS
      • 把4个字节的地址指针(包括一个段地址和一个偏移量)传送到两个目的寄存器,其中,地址指针的后两个字节即段地址一定送到DS中。
    • LES
      • 把4个字节的地址指针(包括一个段地址和一个偏移量)送到两个目的的寄存器,地址指针的后两个字节即段地址一定送到ES中。
    • PUSH
      • SP-2
    • POP
      • SP+2
    • XLAT
      • 换码指令,将累加器中的一个值变换为内存表格中的一个值,实现编码值之间的转换。要求,BX寄存器指向表的首地址,AL中为表中某一项与表格首地址之间的偏移量,指令执行时,将BX和AL中的值相加,把得到的值作为地址,将地址对应单元的值给AL
    • LAHF
      • 将标志寄存器中的低8位传送到AH中,其指令隐含操作数中AH
    • SAHF
      • 将AH寄存器的相应位传送到标志寄存器的低8位,指令隐含操作数AH
    • PUSHF
      • 将标志寄存器的值压入堆栈顶部,同时栈指针SP的值-2
    • POPF
      • 和PUSHF功能正好相反
  • I/O数据传送指令

    • IN 累加器,端口

      • 用来完成累加器AX/AL和I/O端口之间的数据传送
    • OUT 端口,累加器
      • 同上,完成累加器AX/AL和I/O端口之间的数据传送
        其中端口的给出方式有两种,直接寻址:8位,间接寻址:16位,由DX指定
  • 算术指令

    • ADD ADC SUB SBB MUL IMUL DIV IDIV

      • 乘法隐含了累加器,被乘数位于AL或AX,当得到16位乘积时结果放在AX里,但得到32位乘积时结果放在DX和AX里,其中DX为高16位,AX为低16位。
      • 除法,如果除数是字节数,则被除数为AX,AL为商,AH为余数;如果除数是双字节数,则被除数为DXAX,AX为商,DX为余数
    • INC DEC
      • 操作数不能是段寄存器或立即数
    • CMP
      • 需要注意有符号和无符号数比较的区别,有符号数的比较大小由OF SF共同决定。无符号数由CF决定。
    • NEG
      • 求补指令,对指令中给定的操作数求补码,再将结果送回操作数。
  • 辅助的算术指令

    • CBW

      • 字节到字的扩展指令,将AL的内容扩展到AX中,将AL寄存器中的符号位扩展到AH中
    • CWD
      • 字到字节的扩展指令,将AX的内容扩展到DX,AX中,将AX的符号位扩展到DX中
    • DAA DAS AAA AAS AAM AAD
      • BCD码运算指令
  • 逻辑运算指令

    • AND

      • 两操作数相与,结果送OPR1,一般用某些为清零,在操作数不变的情况下使CF和OF清零
    • OR
      • 两操作数相或,目标送操作地址。一般用来对一个指定位置1.在不改变操作数的情况下使OF=CF=0
    • XOR
      • 两操作数异或,结果送目标地址,用来对某一寄存器清零,用于初始化寄存器。
    • TEST
      • 一般用来检测某一位是1还是0.通过ZF的判断来了解指定位的数值。和AND的不一样的地方在于,只影响标志位,不改变操作数。
    • NOT
      • 操作数按位取反后再送回原地址。不影响标志位
  • 移位和循环指令

    • 非循环移位指令

      • 算术左移SAL
      • 逻辑左移SHL
      • 算术右移SAR
      • 逻辑右移SHR
    • 循环移位指令
      • 不带进位的循环左移ROL
      • 不带进位的循环右移ROR
      • 带进位的循环左移指令RCL
      • 带进位的循环右移指令RCR
  • 串操作指令

    • 字符串传送指令:MOVSB MOVSW

      • 将一个字节/字从( DS:SI)传送到(ES:DI)完成操作后自动修改SI、DI,使其指向串的下一个元素。通常指令前加重复前缀RET,字符串长度送CX寄存器
    • 字符串比较指令:CMPSB CMPSW
      • 比较( DS:SI)和(ES:DI)的值,指令前通常加重复前缀REPZ/REPE,从而当发现两个串不同时结束比较。REP:重复;REPZ/REPE:相等/为0则重复;REPNZ/REPNE:不相等/不为0则重复
    • 字符串检索指令:SCASB SCASW
      • 在首地址为ES:DI的串中搜索某个元素(字节/字)事先要将待搜索的元素存入AL/AX,指令前通常加重复前缀REPNZ/REPNE,从而当发现待搜索的元素时结束搜索。注意比较REP,REPE/REPZ以及REPNE/REPNZ的退出循环条件有何不同。
    • 取字符串指令:LODSB/LODSW
      • 将地址为DS:SI的一个字节/字读入AL/AX
    • 存字符串指令:STOSB/STOSW
      • 将AL/AX的值存入地址为ES:DI的内存单元
  • 跳转指令

    • CALL RET
    • JMP
      单个标志条件转移
    • JZ/JE
      • 结果为0或相等则转移
    • JNZ/JNE
      • 结果不为0或不相等则转移
    • JS
      • 结果为负,则转移
    • JNE
      • 结果为正,则转移
    • JO
      • 溢出,则转移
    • JNO
      • 不溢出,则转移
    • JP/JPE
      • 奇偶位为1则转移
    • JNP/JPO
      • 奇偶位为0则转移
    • JC
      • 进位为1,则转移
    • JNC
      • 进位为0,则转移
        比较两个无符号数
    • JB/JNAE
      • 小于,则转移
    • JBE/JNA
      • 小于等于,则转移
    • JAE/JNB
      • 大于等于,则转移
    • JA/JNBE
      • 大于,则转移
        比较两个带符号数
    • JL/JNGE
      • 小于,则转移
    • JNL/JGE
      • 大于等于,则转移
    • JLE/JNG
      • 小于等于,则转移
    • JNLE/JG OPR
      • 大于,则转移
    • JCXZ
      • CX为0,则转移
  • 条件循环指令

    • LOOP
    • LOOPZ/LOOPE
    • LOOPNZ/LOOPNE
  • 中断控制指令

    • INT n
    • INTO
    • IRET
      中断和过程调用的区别
  1. 中断是异常引起的,调用是事先安排好的
  2. 中断不仅要保护断点,还要保护标志寄存器的值
  3. 调用指令在指令中直接给出子程序入口地址,中断指令只给出中断向量码,入口地址则在向量码指向的内存单元中。

微机原理——汇编语言相关推荐

  1. 微机原理/汇编语言/8088知识总结

    第一章 1.进制 ​ 200 16进制 (C8H) BCD压缩码(200H) 非压缩BCD(020000H) ​ ASCII(323030H)0的ASCII码是30H ​ a的ASCII码为61H,A ...

  2. 微机原理-汇编语言设计

    文章目录 一.序言 二.汇编语言程序格式和伪指令 2-1 汇编语言程序格式 2-2 伪指令语句 2-2-1 段定义语句 2-2-2 段分配语句 2-2-3 过程定义语句 2-2-4 变量定义语句 2- ...

  3. 微型计算机原理上机实验改错,北京理工大学微机原理汇编语言上机实验题

    实验一 请在数据段中定义两个数,要求编写程序分别计算出这两个数的和.差.积.商,并用Debug 的相关命令查询计算结果. (略) 实验二 内存自TABLE开始的连续16个单元中存放着0-15的平方值, ...

  4. 微机原理-汇编语言-控制转移/跳转语句总结(JMP JE...)

    跳转指令分三类: 一.无条件跳转,即为JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转) JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志 ...

  5. 用汇编语言与C语言实验其他排序,微机原理实验报告冒泡排序

    微机原理实验报告冒泡排序 五.运行结果 (1)对300,250,280,240,260五个数进行冒泡排序,运行结果如下: (2)对-1,2,54,-38,43五个数进行冒泡排序,运行结果如下 (1)当 ...

  6. 微机原理8086汇编语言上机——Masm环境搭建与常用汇编调试指令

    学校的微机原理与接口技术课,最近开始 考古 上机实验了. 1.弯路 为什么不用宇宙最强大的IDEL--Visual Studio呢? 在我的Visual Studio专栏中有一篇文章介绍Visual ...

  7. 微型计算机汇编语言与接口技术答案,32位微机原理、汇编语言及接口技术教程课后习题答案.doc...

    32位微机原理.汇编语言及接口技术教程课后习题答案.doc 16/32位微机原理.汇编语言及接口技术教程部分习题参考解答第1章 微型计算机系统概述习题1.2什么是通用微处理器.单片机(微控制器).DS ...

  8. 汇编语言与微机原理(1)基础知识

    前言 (1)本人使用的是 王爽老师的汇编语言第四版和 学校发的微机原理教材配合学习. (2)推荐视频教程 通俗易懂的汇编语言(王爽老师的书): 贺老师C站账号网址: (3)文章配套资料: Github ...

  9. 微机原理之汇编语言程序设计

    微机原理之汇编语言程序设计 还没有时间弄图床,图片都放在本地显示不了-先将就着,有空再补上 1 基础知识 1.1 总线 连接CPU和其他芯片的导线 地址总线 数据总线 控制总线 内部总线实现CPU内部 ...

最新文章

  1. BetaBot 木马分析
  2. windows server 2003 安装显卡驱动
  3. php爆数据库,php+MySql注入非暴力爆数据库表段
  4. 在写文档时如何在正文中对参考文献的引用
  5. python实践项目(二)
  6. msmms (二) sms与mms 简述!
  7. QT5.14.2+VS2019安装配置教程Windows
  8. 富士施乐Fuji Xerox DocuPrint P158 b 驱动
  9. 三分屏课件制作_如何利用剪辑软件制作分屏效果
  10. 中国猫道系统市场趋势报告、技术动态创新及市场预测
  11. Android 图片压缩详解
  12. finecms aip.php漏洞,FineCMS最新版5.0.8两处getshell(附python批量poc脚本)
  13. 靶机渗透练习97-hacksudo:ProximaCentauri
  14. 阿里云ACP云计算错题集71-100
  15. 【图论】网络流——最大流和最小费用流
  16. Josh 的学习笔记之数字通信(Part 1——信号和频谱)
  17. python random.randint()函数介绍
  18. Java程序员从携程、美团、阿里面试回来,这些面经分享给大家
  19. 【OTT】OTT Media Grinder (OTT TV 质量评价设备)
  20. JVM基础:什么是STW?

热门文章

  1. 【服务器搭建个人网站】教程四:域名怎样进行备案?快来看~
  2. 苹果还未发布,华强北厂商已做出成品
  3. java不是有效的win32_不是有效的Win32应用程序的解决方法
  4. 阿里沈询直播 分布式事务一
  5. 空调风扇内机不转故障分析与检修
  6. 使用和wait让你的脚本并行执行
  7. 大学生四六级作文模板(自创版,成功跨过六级)
  8. python3:设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声
  9. 网站广告效果评测指标介绍
  10. 跟着瑜伽老师一节课程序员锻炼身体