汇编(七)——数据传送类指令二

本文介绍8086汇编语言中的数据交换指令XCHG和换码指令XLAT的使用方法及应用实例。XCHG指令实现两个操作数之间的数据互换,适用于通用寄存器间或寄存器与内存间的交换。XLAT指令则从BX指向的缓冲区中,根据AL中的偏移量取出数据并存入AL。

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

、通用数据传送指令:交换指令XCHG和换码指令XLAT

 

1、交换指令用来将源操作数和目的操作数内容交换,格式如下:
XCHG reg,reg/mem         ;reg←→reg/mem,也可以表达为:XCHG reg/mem,reg
XCHG指令中操作数可以是字、也可以是字节,可以在通用寄存器与通用寄存器或存储器之间对换数据,当不能在存储器与存储器之间对换数据。
(1)XCHG指令不影响状态标志。
(2)段寄存器不能作为XCHG指令的操作数。
指令举例:
XCHG SI,AX
XCHG AL,BL
XCHG AX,[2000H]
XCHG WORD_VAR,CX
数据交换程序实例:
例:LI7-1.ASM
将S1串与S2串交换
NAME LI7-1.ASM
DATA    SEGMENT
S1        DB 'ABCDEFG'
S2        DB '0123456'
N          DW $-OFFSET S2                    ;N为字符串长度
DATA    ENDS
CODE   SEGMENT
           ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
            MOV DS,AX
            MOV SI,0
            MOV CX,N
L1:       MOV AL,S1[SI]                         ;S1[SI]与S2[SI]交换
           XCHG AL,S2[SI]
           MOV S1[SI],AL
           INC SI                                     ;(SI)+1—〉SI
           LOOP L1
           MOV CX,N                                ;显示S1串
           MOV SI,0
           MOV AH,02H
L2:       MOV DL,S1[SI]
           INT 21H
           INC SI
           LOOP L2
           MOV DL,' '
           INT 21H
           MOV CX,N                          ;显示S2串
           MOV SI,0
L3:      MOV DL,S2[SI]
           INT 21H
           INC SI
           LOOP L3
           MOV AH,4CH
           INT 21H
CODE  ENDS
          END START 

2、换码指令用于将BX指定的缓冲区中、AL指定的位移处的数据取出赋给AL,格式为:
XLAT LABEL
XLAT               ;al←ds:[bx+al]
换码指令的两种格式完全等效。第一种格式中,label表示首地址;第二中也可以用XLATB助记符。实际的首地址在BX寄存器中。
将首地址为100H的表格缓冲区中的3号数据取出
MOV BX,100H
MOV AL,03H
XLAT
因为AL的内容实际上是距离表格首地址的位移量,只有8位,所以表格的最大长度为256,超过256的表格需要采用修改BX和AL的方法才能转换。XLAT指令中没有显式指明操作数,而是默认是用BX和AL寄存器,这种方法称为隐含寻址方式。
换码指令的应用,如扫描码转换为ASCII码,数字0~9转换为7段显示码等
换码程序实例:将二进制表示的十六进制数字转换成ASCII码在显示出来。根据题意,需要在数据段中定义一个换码表,就是0,1,2,...,16所对应的ASCII码表:
TAB_DA   DB 30H,32H,32H,33H,34H,35H,36H,37H,38H,39H
               DB 41H,42H,43H,44H,45H,46H
或者是:
TAB_DA   DB '0123456789ABCDEF'
完整程序如下:
NAME LI7-2.ASM
TABLE     SEGMENT
TAB_DA  DB 30H,32H,32H,33H,34H,35H,36H,37H,38H,39H
              DB 41H,42H,43H,44H,45H,46H
TAB_HEX DB 0,1,2,3,4,5,6,7,8,9
              DB 0AH,0BH,0CH,0DH,0EH,0FH
TABLE     ENDS
CODE     SEGMENT
             ASSUME CS:CODE,DS:TABLE
START:  MOV AX,TABLE
             MOV DS,AX
             MOV CX,10H
             MOV BX,OFFSET TAB_DA
             MOV SI,OFFSET TAB_HEX
NEXT:    MOV AL,[SI]
            XLAT TAB_DA
            MOV DL,AL
            MOV AH,02H
            INT 21H
            MOV DL 00H
            MOV AH,02H
            INT 21H
            INC SI
            LOOP NEXT
            MOV AH,4CH
            INT 21H
CODE   ENDS
            END START

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值