数据传输指令

本文详细介绍了8086汇编语言中的多种指令应用,包括数据传输指令如MOV、XCHG,查表转换指令XLAT,输入输出指令IN/OUT等,并解释了这些指令的具体使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两个内存单元间的数据传送需要用两条mov指令实现,在这里用循环程序指令来完成200个单元数据的传输。

                 MOV  SI,OFFSET  MEM1

                 MOV  DI,OFFSET  MEM2

                 MOV  CX 200

NEXT:      MOV   AL,[SI]

                 MOV  [DI],AL

                 INC  SI

                 INC  DI

                DEC  CX

                JNZ  NEXT

                HLT

交换指令 XCHG

           XCHG  OPRD1,OPRD2                                  将OPRD1的内容与OPRD2交换 

交换指令的要求

(1)  源操作数和目标操作数可以是寄存器或存储器,但不能同时是存储器

(2)  不能为段寄存器操作数,即段寄存器的内容不能参加交换

(3)  两个操作数字长必须相同,可以使字节交换,也可以是字交换

                XCHG  AX,BX

                XCHG  CL,DL

查表转换指令XLAT

                X DW 1122H,3344H,5566H,7788H
                LEA  BX,X
                MOV  AL,03H
                XLAT
结果AL为33H。
XLAT作用:将((BX)+(AL))送给(AL)----简单:将BX为首 地址的, 偏移地址为AL的内容送给AL。
在运行XLAT之前,AL=3 BX=(X的首 地址)。
这时BX+AL就是33....为什么?注意高 地址放在下面。
也就是。
22------BX指向这里。
11。
44。
33----- 偏移地址AL为3的位置就是这里。
XLAT X。
在执行XLAT之前,先将X的 地址送给BX,偏移次数送给AL。
XLXT即为查找指令


输入(in)/输(out)出指令

输入指令

    IN AL,DX                      ;从地址为3B0H的端口输入一个字节到AL

    IN AX,3FH                    ;从地址为3FH的端口输入一个字节到AX

输出指令

   OUT  port,acc            ;直接寻址,port为8位立即数表示的端口地址

   OUT   DX,acc             ;间接寻址,16位端口地址由DX给出

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

去偏移地址指令

    LEA  BX,BUFFER          ;将内存单元BUFFER的偏移地址送BX

    MOV  AL,[BX]                   ;取出BUFFER  中的第一个数据送AL

   MOV  AH,[BX+1]               ;取出BUFFER  中的第二个数据送AL

The CBW (convert byte to word) instruction extend s the sign bit of AL into the AH register. This preserves the number 's sign:


    .DATA
    byte_val SBYTE -101
    .CODE
    mov al, byte_val ; AL = 9Bh
    cbw              ; AX = FF9Bh
Note that both 9Bh and FF9Bh both equal decimal -101, the only difference is the storage size.


The CWD (convert word to doubleword) instruction extends the sign bit of AX into the DX register:


    .DATA
    word_val SWORD -101 ; FF9Bh
    .CODE
    mov ax, word_val    ; AX = FF9Bh
    cwd                 ; DX:AX = FFFFh:FF9Bh
The CDQ (convert doubleword to quadword) instruction extends the sign bit of EAX into the EDX register:


    .data
    dword_val SDWORD -101
    .code
    mov eax, dword_val  ; EAX = FFFFFF9Bh
    cdq                 ; EDX:EAX = FFFFFFFh:FFFFFFF9Bh




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值