dx 汇编dec_汇编语言期末复习笔记(四)
第二章 8086的指令系统(上)
写在前面:这一部分开始复习汇编语言程序的指令系统,主要是数据传送类指令和算术运算类指令。如有错误欢迎指正,感谢!
一、数据传送类指令
1.传送指令movmov reg/mem,imm 立即数传送
mov al,4
;操作数类型要一致,mov al,0a0bh是非法的!
mov si,200h
mov byte ptr [si],0ah ;从立即数直接到存储器要指明数据类型
mov word ptr [si+2],0a0bh ;注意高字节在高位,低字节在低位mov reg/mem/seg reg 寄存器传送
mov ax,bx
mov [si],ax
mov ds,axmov reg/seg mem 存储器传送
mov al,[bx]
mov ds,[si]mov mem/reg 段寄存器传送
mov [si],ds
mov ax,ds
mov es,ax ;es" />传送规则注意:不允许直接修改CS的值,如“mov cs,[si]”的指令不被允许。
2.交换指令XCHGXCHG reg,reg/mem或者XCHG mem,reg
将寄存器与寄存器或存储器之间的数据进行对换。
mov ax,1234h
mov bx,5678h
xchg ax,bx ;ax=5678h,bx=1234h
xchg al,ah ;ax=7856h
xchg ax,[2000h] ;也可写xchg [2000h],ax
xchg al,[2000h] ;也可写xchg [2000h],al
3.换码指令XLAT
将BX指定的缓存区中、AL指定的位移处的一个字节取出赋给AL。
mov bx,100h
mov al,03h
xlat ;al
4.堆栈操作指令SS段寄存器记录栈的段地址,SP指向栈顶,栈顶是地址较小的那一端,栈底不变。
PUSH指令:先使SP-2,然后把一个字操作数存入堆栈顶部。
;push r16/m16/seg
push ax ;sp
;ss:[sp]
;pop r16/m16/seg
pop [2000h] ;ds:[2000h]
;sp
进栈、出栈都满足“小端方式”。
堆栈常用来临时存放数据,传递参数,保存和恢复数据寄存器(比如使用call调用子程序时,先将子程序可能调用的寄存器push,返回主程序时全部pop)等。
5.标志寄存器传送指令低八位传送LAHF和SAHF
LAHF ;AH
;SF/ZF/AF/PF/CF状态标志位
;分别送入AH的7/6/4/2/0位,其他任意
SAHF ;FLAGS的低字节
;用AH的7/6/4/2/0位设置
;SF/ZF/AF/PF/CF标志标志进出堆栈指令PUSHF和POPF
PUSHF ;sp
;ss:[sp]
POPF ;FLAGS
;sp
例:置位单步标志
pushf
pop ax ;将FLAGS存入AX
or ax,0100h ;设置TF=1,其他不变
push ax
popf ;将设置好的状态取回FLAGS
6.标志寄存器操作指令
标志位操作指令直接对CF、DF、IF标志进行复位或置位,常用于特定情况下任意设置进位标志
CLC ;复位进位标志:CF
STC ;置位进位标志:CF
CMC ;求反进位标志:CF
CLD ;复位方向标志:DF
STD ;置位方向标志:DF
CLI ;复位中断标志:IF
STI ;置位中断标志:IF
7.地址传送指令有效地址传送指令LEA
;LEA r16,mem ;r16
;不是获取该地址的内容
mov bx,0400h
mov si,3ch
lea bx,[bx+si+0f62h] ;bx=bx+si+062fh=139eh指针传送指令LDS和LES
;LDS r16,mem ;r16
;LES r16,mem ;r16
mov word ptr [3060h],0100h
mov word ptr [3062h],1450h
les di,[3060h] ;di=0100h,es=1450h
lds si,[3060h] ;si=0100h,ds=1450h
8.输入输出指令直接寻址:只用于寻址00H~FFH前256个端口,操作数i8表示端口号。
间接寻址:可用于寻址全部64K个端口,DX寄存器的值就是端口号。
输入指令IN
;IN AL/AX,i8/DX
;直接寻址,字节量输入
in al,21h ;从端口21h读入一个字节
mov ah,al
in al,20h ;从端口20h读入一个字节
;直接寻址,字量输入
in ax,20h ;与上面一段作用相同
;间接寻址,字量输入
mov dx,20h
in ax,dx输出指令OUT
;OUT i8/DX,AL/AX
;间接寻址,字节量输出
mov dx,03fch
mov al,80h
out dx,al
二、算术运算类指令
1.加法指令不带进位加法ADD:
;add reg,imm/reg/mem或者add mem,imm/reg
mov al,0fbh
add al,07h ;al=02h
mov word ptr [200h],4652h
add word ptr [200h],0f0fh ;[200h]=3743h带进位加法ADC:
在ADD的基础上再加上CF的值。常与ADD配合实现多精度加法。
例:求 0234 4652H+F0F0 F0F0H=?
mov ax,4652h
add ax,0f0f0h ;ax=3742h,CF=1
mov dx,0234h
adc dx,0f0f0h ;dx=0234h+f0f0h+CF=f325h
;最终结果就是dx ax组成的32位数,即f325 3742h
2.增量指令INC
不影响CF标志。
;inc reg/mem
inc bx
inc byte ptr [bx]
3.减法指令不带借位减法SUB:
;sub reg,imm/reg/mem或者sub mem,imm/reg
mov al,0fbh
sub al,07h ;al=f4h
mov word ptr [200h],4652h
sub word ptr [200h],0f0fh ;[200h]=3743h带借位减法SBB:
在SUB的基础上再减去CF的值。常与SUB配合实现多精度减法。
例:求F0F0 4652H-0234 F0F0H=?
mov ax,4652
sub ax,0f0f0h ;ax=5562,CF=1
mov dx,0f0f0h
sbb dx,0234h ;dx=dx-0234h-CF=eebbh
;所以最终结果是 eebb 5562h
4.减量指令DEC
不影响CF标志。
;dec reg/mem
dec bx
dec word ptr [bx]
5.求补指令NEG
对操作数求补,用0减去操作数再返回给操作数,对标志位的影响与用0减去操作数的影响相同
;neg reg/mem
neg bx
neg [200h]
6.比较指令CMP
比较方式:将目的操作数减去源操作数。
;cmp reg,imm/reg/mem或者cmp mem,imm/reg
cmp al,100 ;常与ja,jb,je等跳转指令连用
7.乘法指令无符号乘法MUL:字节(8位)乘法:MUL r8/m8,al和操作数相乘放进ax内。
字(16位)乘法:MUL r16/m16,ax和操作数相乘放进dx.ax内。
若乘积的高一半(ah或dx)为0,则OF=CF=0;否则均为1,对其他标志没有定义。
有符号乘法IMUL:字节(8位)乘法:IMUL r8/m8,al和操作数相乘放进ax内。
字(16位)乘法:IMUL r16/m16,ax和操作数相乘放进dx.ax内。
若乘积的高一半是低一半的符号扩展(无效),则OF=CF=0,否则均为1,对其他标志没有定义。
mov al,0b4h ;al=b4h=180
mov bl,11h ;bl=11h=17
mul bl ;ax=0bf4h=3060
;OF=CF=1,AX高8位不为0
;===================================
mov al,0b4h ;al=b4h=-76
mov bl,11h ;bl=11h=17
imul bl ;ax=faf4h=-1292
;OF=CF=1,AX高8位含有效数字
8.除法指令无符号除法DIV:字节(8位)除法:DIV r8/m8,ax和操作数的商放进al,余数放进ah。
字(16位)除法:DIV r16/m16,dx.ax和操作数的商放进ax,余数放进dx。
有符号除法IDIV:字节(8位)除法:IDIV r8/m8,ax和操作数的商放进al,余数放进ah。
字(16位)除法:IDIV r16/m16,dx.ax和操作数的商放进ax,余数放进dx。
除法指令对标志没有定义。
除法溢出,产生0号内部中断——除法错中断:
对DIV指令,除数为0,或者8位除时商超过8位,或者16位除时商超过16位。
对IDIV指令,除数为0,或者8位除法商不在-127~128,或者16位除法商不在-32768~32767。
9*.符号扩展指令
可以用于产生倍长的被除数。CBW:AL的符号扩展到AH
CWD:AX的符号扩展到DX
感谢阅读!
dx 汇编dec_汇编语言期末复习笔记(四)相关推荐
- c51汇编语言如何定义全局变量_汇编语言期末复习笔记(七)
第三章 汇编语言程序格式(上) 写在前面:这一部分开始复习汇编语言程序格式,包括参数的表达.变量的定义等.如有错误欢迎指正,感谢! 1.硬指令和伪指令 硬指令:使CPU产生动作,并在程序中执行时才处理 ...
- 【期末复习笔记】知识产权法——著作权、专利法、商标权
[期末复习笔记]知识产权法 著作权 著作权法不予以保护的客体 著作权的归属 著作权的内容 著作人身权 著作财产权 著作权的取得方式:自动取得 著作权的保护期限: 邻接权 表演者权 表演者义务 表演者权 ...
- 数理统计期末复习笔记(一)
数理统计期末复习笔记 主要内容: 数据压缩,点估计,假设检验,区间检验 Reference: Statistical Inference, Casella&Berger Chapter 6 D ...
- 【期末复习】北京邮电大学《数字内容安全》课程期末复习笔记(5. 社交媒体安全)
[相关链接] [期末复习]北京邮电大学<数字内容安全>课程期末复习笔记(1. 绪论) [期末复习]北京邮电大学<数字内容安全>课程期末复习笔记(2. 信息隐藏与数字水印) [期 ...
- 2021/06/29计算机视觉期末复习笔记整理
计算机视觉期末复习笔记整理 引言 我的复习参考 期末考试考题回忆 PPT对应中文笔记整理 参考的几篇博客的笔记 引言 刚结束可能是我学生时代最后一场考试了,orz热乎着,记录一下. 这门课是学校新开的 ...
- 大气气溶胶期末复习笔记
大气气溶胶期末复习笔记 文章目录 大气气溶胶期末复习笔记 (一)大气气溶胶 (二)来源 2.1 直接注入 2.2 二次生成 新粒子生成事件的判断 (三)气相粒子核化过程 3.1 物理过程 3.2 化学 ...
- 【期末复习】北京邮电大学《网络安全》课程期末复习笔记(9. 虚拟专用网络)
[相关博客链接] [期末复习]北京邮电大学<网络安全>课程期末复习笔记(1. 网络安全概述) [期末复习]北京邮电大学<网络安全>课程期末复习笔记(2. 恶意代码) [期末复习 ...
- 动力气象期末复习笔记
动力气象期末复习笔记 文章目录 动力气象期末复习笔记 拉格朗日和欧拉观点 大气运动方程 z坐标系下的基本形式 尺度分析后的大气运动方程 运动方程零级简化 运动方程的一级简化 平均运动方程(湍流项) 连 ...
- 边界层气象学期末复习笔记
边界层气象学期末复习笔记 什么是边界层 广义上的边界层是:气体流动于平板上方,平板表面的摩擦力和垂直速度切变产生的流体内摩擦力阻滞了固体边界处的气体流动,这样一个流速减少,并低于自由气流速度的区域称为 ...
最新文章
- sql 查询嵌套数组
- java如何将string转换成date_java如何将string类型转为date类型?Java的转型方法
- java gui 控制台_在GUI面板中创建Java控制台
- python简写匹配_Python简写
- 不知道哪个学校教务处管理系统的图
- 图书管理系统【JavaWeb:部署开发环境、解决分类、图书、前台页面模块】
- Python模块 - itertools循环器模块
- mysql grant tables_使用SKIP-GRANT-TABLES 解决 MYSQL ROOT密码丢失
- 超详细黑苹果安装图文教程送EFI配置合集及系统
- 如何正确的寻找电影资源
- 初识大数据 小孩子都懂的大数据
- CuteFTP Pro v8.3.1 (Build 08.07.2008.1) - patch - PakMan / Team SnD
- fw150r虚拟服务器设置,迅捷 FW150R 无线路由器端口映射设置指南
- 初学者福利:分享五个免费的 Python 学习网站,抓紧收藏吧
- iOS内购实现及测试Check List
- [OpenGL] 太阳镜头光晕效果
- java-老鼠出迷宫
- ValueError: n_splits=n cannot be greater than the number of members in each class.
- 遥控车钥匙算法之KeeLoq
- 关于移动端IOS input弹起键盘时,引起高度问题
热门文章
- 小猪猪分享:如何将pdf转换成jpg图片
- oracle系统资源,操作系统资源对Oracle性能的重要性
- 关于Echarts柱状图点击事件的实现方法charsjs柱状图点击事件
- 2019-05-19 Jave学习日记之Object类型
- COSMIC的后端学习之路——2.1 C++11新特性(1)
- android 复制文件 代码,将android项目从一台计算机复制到另一台计算机后找不到classes.dex文件...
- Android热修复原理(HotFix)初涉
- 微信小程序 ssm装潢装修订单设计案例app
- JavaScript魅力总结(14-16)
- GNU makefile 学习 - ongoing