我是靠谱客的博主 勤奋蜗牛,最近开发中收集的这篇文章主要介绍8086提供的一些指令详解(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天我直接系统的介绍一些8086指令用法,以便以后更好地读懂程序。能够写些简单的程序。


一、传送指令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端口。


好了,今天就到这里吧,还有的指令明天再讲,若还有疑问,欢迎发评论哦,很高兴和大家互相探讨问题!



最后

以上就是勤奋蜗牛为你收集整理的8086提供的一些指令详解(一)的全部内容,希望文章能够帮你解决8086提供的一些指令详解(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部