中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
汇编(七)——数据传送类指令二
作者:未知 时间:2005-09-13 23:36 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:汇编(七)——数据传送类指令二
、通用数据传送指令:交换指令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

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有