8086中的指令
2016-10-20 23:04
155 查看
一、传送指令mov
![](http://img.blog.csdn.net/20160930160212560?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
解释一下: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
![](http://img.blog.csdn.net/20160930163623753?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
一开始sp是指向高地址的,然后每压进去一个字,就sp=(sp)-2,向地地址方向伸展,压栈和出栈只能是字,没有字节,所以sp要么加2,,要么减2。理解栈这边很简单,你们看我之前写的8086提供的栈机制博客就能理解,这里不在重复。
三、交换指令XCHG
下面我们来看一下交换嘛,只能是寄存器和寄存器或寄存器和主存之间交换。XCHG DST,SRC ;(DST)<-->(SRC)
![](http://img.blog.csdn.net/20161001120706568?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
例如: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端口。
解释一下: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端口。
相关文章推荐
- 8086/8088指令系统
- [转]8086/8088指令系统
- 8086/8088指令详解
- [汇编]8086指令系统---逻辑指令
- 8086汇编语言自学经验分享 mul word ptr 指令示例16位乘以16位
- 8086CPU汇编loop指令和cx寄存器
- 8086指令
- 8086/8088指令
- 8086中的jmp相关指令
- [汇编]8086指令系统---算术指令(二)
- 8086 MOV 指令的注意事项
- 8086中的jmp指令
- 8086PC读取和执行指令相关部件
- 8086/8088移位指令
- 8086汇编7:跳转指令
- 收藏2 8086/8088指令详解
- [汇编]8086指令系统---算术指令(一)
- 8086指令系统---逻辑指令,移位指令
- 8086PC读取和执行指令相关部件
- 8086/8088指令详解