计组(day2)8086指令系统——输入输出指令、取偏移地址指令、其他传送指令

1. 输入输出指令

1.1 什么是输入输出指令?

  1. 输入指令:输入指令IN用于从I/O端口读数据到累加器AL(或AX)中
  2. 输出指令:输出指令OUT用于把累加器AL(或AX)的内容写到I/O端口
    注意 输入输出指令中,只有累加器AL(或AX)才能与I/O端口进行数据传送,所以这两条指令又称为累加器专用指令。

1.2 输入输出指令格式及功能

长格式:
IN acc, port
OUT acc, port

        直接寻址,port为8位立即数表示的端口地址
短格式:
IN acc, DX
OUT acc, DX

        寄存器间接寻址,16位端口地址由DX指出
功能:

  1. IN指令从端口输入一个字节到AL或输入一个字到AX中
  2. OUT指令从端口输入一个字到AL或输入一个字到AX中

1.3 输入输出指令的实例

MOV DX, 03B0H              ; 目的操作数:DX ,寄存器寻址   源操作数:03B0H,立即寻址  语句:将16位端口地址送DX
IN AL,DX                   ; 寄存器间接寻址方式,从地址为03B0H的端口输入一个字节到AL
IN AX,3FH		           ; 直接寻址,从地址为3FH的端口输入一个字到AX


OUT 43H,AL			;直接寻址,将AL的内容输出到地址为43H的端口
OUT 44H,AX		    ;直接寻址,将AX的内容输出到地址为44H的端口
MOV DX,33FH         ;目的操作数:DX,寄存器寻址     源操作数:333FH,立即寻址  语句:将16位端口地址33FH送DX
OUT DX,AL			;寄存器间接寻址,将AL的内容输出到地址为33FH的端口

1.4 输入输出指令的两种寻址方式及注意事项

注意1: 从上述实例中我们看到了IN指令和OUT指令的寻址方式,需要注意的是,I/O寻址方式和存储器寻址方式是不同的,不要混淆了。例如,

在存储器寻址中:
MOV DX,03B0H     中 03B0H 是立即数,在存储器寻址中由指令直接给出,是立即寻址
MOV DX, [03B0H]  中 [03B0H] 是指存储器偏移地址为03B0H中存放的内容,是直接寻址 
MOV DX,AX        中AX是指寄存器AX里的值,表示把AX的值复制给DX, 是寄存器寻址
MOV DX,[AX]      中[AX] 是指 先得到寄存器AX存放的值,将这个值作为存储器的偏移地址,然后把这个偏移地址里的值复制给寄存器DX,是寄存器间接寻址

在I/O寻址中:
IN AX,3FH    中3FH是立即数,并且没有[]围起来,这是I/O寻址中的直接寻址,不要当成存储器寻址的立即数寻址
OUT DX,AL    中DX是寄存器,但这是I/O寻址中的寄存器间接寻址,不要当成存储器寻址的寄存器寻址

注意2: 采用间接寻址的IN/OUT指令只能用DX寄存器作为间接寻址寄存器

I/O指令的两种寻址方式:直接寻址、寄存器间接寻址

2. 取偏移地址指令

2.1 什么是取偏移地址指令?

取偏移地址指令是将存储器操作数的16位偏移地址送到指定的寄存器。

2.2 指令格式

指令格式:

	LEA reg16,mem

LEA指令即取偏移地址指令,这里,源操作数必须是存储器操作数,目标操作数必须是16位通用寄存器。因该寄存器常用来作为地址指针,故在此最好选用4个间址寄存器之一。

2.3 取偏移地址指令的实例

LEA BX,BUFFER       ;将内存单元BUFFER的偏移地址送BX
MOV AL,[BX]			;取出BUFFER的第一个数据送AL
MOV AH,[BX+1]		;取出BUFFER的第二个数据送AH

3. 其他传送类指令

指令类型汇编格式指令的操作示例
字位扩展指令CBW将AL中的字节数扩展为字,
并存放在AX中。扩展的原则
是:将符号位扩展到整个高位
MOV AL,8EH
CBW
;结果:AX=FF8EH
CWD将AX中的字扩展为双字,扩
展后的高16位存放在DX中。
扩展的原则与CBW指令相同
MOV AX,438EH
CWD
;结果:AX=438EH,DX=0000H
远地址传送指令 LDS reg16,mem32mem32为内存中连续4个单
元的首地址。指令将[mem32]
和[mem32+1]单元的内容送
reg16,将[mem32+2]和
[mem32+3]单元的内存送DS
设1234H为首的4个单元的内容
分别为:11H,22H,00H,90H,
则执行完指令:
LDS SI,[1234H]
:SI=2211H,DS=9000H
LES reg16,mem32指令将[mem32]和[mem32+1]单元
的内容送reg16,将[mem32+2]
和[mem32+3]单元的内容送ES
标志传送指令LAHF将FLAGS低8位的内容送AH设SF=1,ZF=0,AF=1,PF=1;
CF=0执行指令LAHF;AH各位
状态为10X1X1X0
SAHF将AH的内容送到FLAGS低8位
PUSH将FLAGS的内容压入堆栈中保存
POPF 把当前栈顶的两个单元的内容弹出到FLAGS中
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值