8086指令
来源:互联网 发布:webpack搭建php服务器 编辑:程序博客网 时间:2024/05/17 06:18
一、传送指令mov
mem(主存),imm(立即数),reg(寄存器),seg(段寄存器),DST(目的操作数),SRC(源操作数)。(以后都这样)。
mov DST,SRC ;就是将(SRC)->DST。
例如:
mov al,4 ;将十进制4,转换成的16的4,然后放到寄存器al里面,(默认数字后面不加说明就是十进制数数字) ;(分号在汇编语言里面是注释)。
mov si,200H
mov al,‘1’ ;将1所代表的ASCII放到al中。
注意:
①两个操作数类型要一致。(就是16位的数传给16位,8位的数传给8位)
②两个操作数不能都是mem。(原因:访问主存太慢了,你竟然一个命令要访问两次,当然不行)
③段寄存器操作的限制
不允许立即数传送给寄存器
不允许直接改变CS的值
不允许段寄存器之间直接数据传送。
二、堆栈操作指令PUSH/POP
一开始sp是指向高地址的,然后每压进去一个字,就sp=(sp)-2,向地地址方向伸展,压栈和出栈只能是字,没有字节,所以sp要么加2,,要么减2。理解栈这边很简单,你们看我之前写的8086提供的栈机制博客就能理解,这里不在重复。
三、交换指令XCHG
下面我们来看一下交换嘛,只能是寄存器和寄存器或寄存器和主存之间交换。XCHG DST,SRC ;(DST)<-->(SRC)
例如:xchg ax,[2000h] ;就是将ax寄存器里面的值和偏移地址位2000h的主存字单元内容互换
四、输入/输出指令 IN/OUT
大家要理解一下它的意思,对输入/输出端口的寻址有两种方式:直接寻址和DX寄存器的间接寻址。
当是一个字节时可以用直接寻址或寄存器间接寻址,但如果是一个字的话,只能是寄存器间接寻址,也就是说,直接寻址只能是8位数据。
下面举几个例子,大家根据注释理解一下即可
1)直接寻址
IN AL,50H ;将50H端口的字节读入AL中
IN AX,70H ;将70H、71H两端口的值读入AX,70端口的值读入AL,71H端口的值读入AH
OUT 80H,AX ;将ax中的内容输出到80H、81H端口
2)寄存器间接寻址
端口号必须设在寄存器DX中,现假设DX寄存器中为80H
IN AL,DX ;从DX所指的端口80H中读取1个字节
IN AX,DX ;从两端口中读取1个字节送到AX中,80H中的值送AL,81H中的值送AH
OUT DX,AX ;将AX中的字输出到80H、81H端口。
算术运算指令
①加法类指令
②减法类指令
③乘法指令
④除法指令
⑤BCD吗指令
一、加法类指令
首先我么们先看加法类指令三个(add,adc,inc)
1)不带进位位的加法指令ADD
add用来执行2个字节或2个字的相加操作,运算时不考虑CF位
ADD DST,SRC ;DST<--(DST)+(SRC)
ADD影响OF,SF,ZF,AF,PF,CF标志
2)带进位位的加法指令ADC
ADC在功能上和ADD类似,只是有一点区别,即执行ADC指令时,将进位标志CF的值加进和中。
ADC DST,SRC ;DST<--(DST)+(SRC)+CF
ADC指令多用于多字节相加运算,如进行两个8字节(64位)数据相加,应先用ADD指令将低32位相加,再用ADC指令将高32位相加,此时会把低位字节产生的进位传递到高位字节运算中。
ADC影响OF,SF,ZF,AF,PF,CF.标志位
3)增量指令INC
INC指令只有一个操作数,指令执行时,将操作数内容加1,
INC指令影响AF,OF,PF,SF,ZF.
注意:INC指令不影响进位标志CF
二、减法类指令(SUB,SBB,CMP,DEC,NEG)
1)比考虑借位的减法指令SUB
SUB和上面的加法类似,也是不带借位的减
SUB [BP+2],CL ;将ss段中的BP+2所指的单元中的值减去CL中的值,结果在BP+2所指堆栈单元中
SUB影响的标志位OF,ZF,AF,SF,PF,CF
2)考虑借位的减法指令SBB
和上面的ADC类似,就是SBB在执行减法运算时还要减去CF的值。
SBB AX,2530H ;将AX中的内容减去2530H,并减去进位位CF的值
和上面类似,这里不在重复
3)减量指令DEC
这又和上面的INC类似,就是将操作数减一,同样不会影响CF,只是执行减一而已。
和上面都一样,这里不在重复。
4)求补指令NEC
其实我更喜欢叫它求负指令,它就是对给出的操作数求一个负,然后回送,可是机器内部是以补码的形式存储的,所以就是求补指令啦。
NEG影响的标志位AF,CF,ZF,PF,SF,OF'
注意:①如果操作数的值为80H、8000H、80000000H,那么执行求补指令会溢出,结果没有变化,但溢出标志OF置1
②此指令执行时,通常使CF为1,只有当操作数为0时,CF才为0,因为此指令是用0减去某个操作数,所以除非为0,通常都会产生借位。
5)比较指令CMP
cmp也是执行两个数相减操作,但不送回相减结果,会影响标志位
此指令会影响标志位AF,CF,OF,PF,SF,ZF
那么如果判断比较结果呢?
答:如果比较的两个操作数相等的话,ZF = 1,根据ZF就可判断两数是否相等
①两个无符号比较
无符号相减时CF,就是借位标志,如果CF为0,表示无借位,则被减数大,若果,CF为1,则表示有借位,则减数大
②两个有符号数比较
看符号标志SF,而符号标志SF总是和结果的最高位相同,如果SF为0,表示被减数大,如果SF为1,则表示减数大
- 8086指令
- 8086指令系统---逻辑指令,移位指令
- 8086汇编指令
- 学习8086机器指令
- 8086/8088指令详解
- 8086汇编 算术指令
- 8086汇编 逻辑指令
- 8086汇编指令小结
- 8086/8088指令详解
- 8086指令集
- 8086汇编指令全称
- 8086汇编指令详解
- 8086中的jmp指令
- 8086指令总结
- 8086指令速查
- 8086指令用法
- 8086/8088指令
- 8086汇编指令
- 110. Balanced Binary Tree (平衡二叉树判断)
- [struts2]严重: Dispatcher initialization failed java.lang.RuntimeException: java.lang.reflect.Invocati
- 浮雕效果一键工具
- CSS学习笔记:层叠和继承
- 重新学习C语言——比较两个数大小
- 8086指令
- ps快捷键总结
- 单链表实现多项式相加
- 圆,y=x²
- 111. Minimum Depth of Binary Tree (计算二叉树最小深度)
- JQuery UI之(三)可切换面板——tabs
- HDU 2571 命运
- PCA和Softmax学习
- Android开发Bmob服务器配置