微机原理——汇编语言
汇编语言
期末复习要求
- 指令格式
- 寻址方式
- 各类指令的功能和特点
- 数据传送类指令
- I/O数据传送指令
- 算术指令
- 辅助的算术指令
- 逻辑指令
- 移位和循环指令
- 跳转指令
- 循环指令
- 串指令
- 标志操作指令
- 其他指令
一、指令格式
标号: 指令助记符 操作数 ;注释
有的指令为双操作数,有的指令为单操作数,有的指令无操作数。
二、寻址方式
在微型计算机中,操作数可能在哪里?
- 操作数包含在指令中(在指令中)
- 操作数包含CPU的某一寄存器中(在寄存器中)
- 操作数包含在内存的数据区中,且指令中的操作数场包含着此操作数的地址(内存操作数,存储器操作数)
因此,寻址方式有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功能正好相反
- MOV
I/O数据传送指令
- IN 累加器,端口
- 用来完成累加器AX/AL和I/O端口之间的数据传送
- OUT 端口,累加器
- 同上,完成累加器AX/AL和I/O端口之间的数据传送
其中端口的给出方式有两种,直接寻址:8位,间接寻址:16位,由DX指定
- 同上,完成累加器AX/AL和I/O端口之间的数据传送
- IN 累加器,端口
算术指令
- 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
- 求补指令,对指令中给定的操作数求补码,再将结果送回操作数。
- ADD ADC SUB SBB MUL IMUL DIV IDIV
辅助的算术指令
- CBW
- 字节到字的扩展指令,将AL的内容扩展到AX中,将AL寄存器中的符号位扩展到AH中
- CWD
- 字到字节的扩展指令,将AX的内容扩展到DX,AX中,将AX的符号位扩展到DX中
- DAA DAS AAA AAS AAM AAD
- BCD码运算指令
- CBW
逻辑运算指令
- AND
- 两操作数相与,结果送OPR1,一般用某些为清零,在操作数不变的情况下使CF和OF清零
- OR
- 两操作数相或,目标送操作地址。一般用来对一个指定位置1.在不改变操作数的情况下使OF=CF=0
- XOR
- 两操作数异或,结果送目标地址,用来对某一寄存器清零,用于初始化寄存器。
- TEST
- 一般用来检测某一位是1还是0.通过ZF的判断来了解指定位的数值。和AND的不一样的地方在于,只影响标志位,不改变操作数。
- NOT
- 操作数按位取反后再送回原地址。不影响标志位。
- AND
移位和循环指令
- 非循环移位指令
- 算术左移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的内存单元
- 字符串传送指令:MOVSB MOVSW
跳转指令
- CALL RET
- JMP
单个标志条件转移 - JZ/JE
- 结果为0或相等则转移
- JNZ/JNE
- 结果不为0或不相等则转移
- JS
- 结果为负,则转移
- JNE
- 结果为正,则转移
- JO
- 溢出,则转移
- JNO
- 不溢出,则转移
- JP/JPE
- 奇偶位为1则转移
- JNP/JPO
- 奇偶位为0则转移
- JC
- 进位为1,则转移
- JNC
- 进位为0,则转移
比较两个无符号数
- 进位为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
中断和过程调用的区别
- 中断是异常引起的,调用是事先安排好的
- 中断不仅要保护断点,还要保护标志寄存器的值
- 调用指令在指令中直接给出子程序入口地址,中断指令只给出中断向量码,入口地址则在向量码指向的内存单元中。
微机原理——汇编语言相关推荐
- 微机原理/汇编语言/8088知识总结
第一章 1.进制 200 16进制 (C8H) BCD压缩码(200H) 非压缩BCD(020000H) ASCII(323030H)0的ASCII码是30H a的ASCII码为61H,A ...
- 微机原理-汇编语言设计
文章目录 一.序言 二.汇编语言程序格式和伪指令 2-1 汇编语言程序格式 2-2 伪指令语句 2-2-1 段定义语句 2-2-2 段分配语句 2-2-3 过程定义语句 2-2-4 变量定义语句 2- ...
- 微型计算机原理上机实验改错,北京理工大学微机原理汇编语言上机实验题
实验一 请在数据段中定义两个数,要求编写程序分别计算出这两个数的和.差.积.商,并用Debug 的相关命令查询计算结果. (略) 实验二 内存自TABLE开始的连续16个单元中存放着0-15的平方值, ...
- 微机原理-汇编语言-控制转移/跳转语句总结(JMP JE...)
跳转指令分三类: 一.无条件跳转,即为JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转) JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志 ...
- 用汇编语言与C语言实验其他排序,微机原理实验报告冒泡排序
微机原理实验报告冒泡排序 五.运行结果 (1)对300,250,280,240,260五个数进行冒泡排序,运行结果如下: (2)对-1,2,54,-38,43五个数进行冒泡排序,运行结果如下 (1)当 ...
- 微机原理8086汇编语言上机——Masm环境搭建与常用汇编调试指令
学校的微机原理与接口技术课,最近开始 考古 上机实验了. 1.弯路 为什么不用宇宙最强大的IDEL--Visual Studio呢? 在我的Visual Studio专栏中有一篇文章介绍Visual ...
- 微型计算机汇编语言与接口技术答案,32位微机原理、汇编语言及接口技术教程课后习题答案.doc...
32位微机原理.汇编语言及接口技术教程课后习题答案.doc 16/32位微机原理.汇编语言及接口技术教程部分习题参考解答第1章 微型计算机系统概述习题1.2什么是通用微处理器.单片机(微控制器).DS ...
- 汇编语言与微机原理(1)基础知识
前言 (1)本人使用的是 王爽老师的汇编语言第四版和 学校发的微机原理教材配合学习. (2)推荐视频教程 通俗易懂的汇编语言(王爽老师的书): 贺老师C站账号网址: (3)文章配套资料: Github ...
- 微机原理之汇编语言程序设计
微机原理之汇编语言程序设计 还没有时间弄图床,图片都放在本地显示不了-先将就着,有空再补上 1 基础知识 1.1 总线 连接CPU和其他芯片的导线 地址总线 数据总线 控制总线 内部总线实现CPU内部 ...
最新文章
- BetaBot 木马分析
- windows server 2003 安装显卡驱动
- php爆数据库,php+MySql注入非暴力爆数据库表段
- 在写文档时如何在正文中对参考文献的引用
- python实践项目(二)
- msmms (二) sms与mms 简述!
- QT5.14.2+VS2019安装配置教程Windows
- 富士施乐Fuji Xerox DocuPrint P158 b 驱动
- 三分屏课件制作_如何利用剪辑软件制作分屏效果
- 中国猫道系统市场趋势报告、技术动态创新及市场预测
- Android 图片压缩详解
- finecms aip.php漏洞,FineCMS最新版5.0.8两处getshell(附python批量poc脚本)
- 靶机渗透练习97-hacksudo:ProximaCentauri
- 阿里云ACP云计算错题集71-100
- 【图论】网络流——最大流和最小费用流
- Josh 的学习笔记之数字通信(Part 1——信号和频谱)
- python random.randint()函数介绍
- Java程序员从携程、美团、阿里面试回来,这些面经分享给大家
- 【OTT】OTT Media Grinder (OTT TV 质量评价设备)
- JVM基础:什么是STW?