80x86 汇编语言:实现两个字符串内容交换

来源:互联网 发布:windows ad域管理软件 编辑:程序博客网 时间:2024/05/18 01:03


在data segment段定义了有两个字符串StringA和StringB,

程序执行的时候,从键盘输入为二者赋值了。


然后我想交换StringA与StringB字符串的内容,这个在汇编中怎么实现呢?


莫非只能一个字符一个字符的复制到中间变量,然后再给寄存器,再交换?


求简洁的方法与代码!


题目链接:http://zhidao.baidu.com/question/551073803.html


做而论道回答如下:  (2013-05-17 13:17 提问者采纳)


可以为它们分别定义起始地址变量,即地址指针。

需要交换时,交换一下指针即可。


追问:2013-05-17 13:29

能不能给具体点代码或者思路???


回答:2013-05-17 15:01

两个字符串,不等长,才有普遍意义。


代码如下:

;================================================

ASSUME  CS:CODE, DS:DATA

DATA   SEGMENT

    MSG1    DB  13, 10, 'STR 1 is : $'

    MSG2    DB  13, 10, 'STR 2 is : $'

    MSG3    DB  13, 10, 13, 10, 'Have Exchanged. ', 13, 10, 36


    STR1    DB  '13579@#!^&%^!@!@~!@. $'      ;这是两个不等长的字符串

    STR2    DB  '24680asdfdfgdfgdfhghghfgfghargregfdghf. $'


    SP_STR1  DW  STR1         ;定义两个字符串的指针

    SP_STR2  DW  STR2

DATA   ENDS

;----------------------------------

CODE   SEGMENT


START:                        ;主程序开始.

    MOV   AX, DATA

    MOV   DS, AX

;-----------------------------

    CALL  PROGRAM  ;数据处理(仅仅是显示而已)


    PUSH  SP_STR1  ;交换两个指针

    PUSH  SP_STR2

    POP   SP_STR1

    POP   SP_STR2


    MOV   DX, OFFSET MSG3

    MOV   AH, 9

    INT   21H


    CALL  PROGRAM  ;再次调用同一个程序,可看出,显示内容,已经交换了


EXIT:

    MOV  AH, 4CH

    INT  21H                   ;返回DOS

;-----------------------

PROGRAM:

    MOV   DX, OFFSET MSG1

    MOV   AH, 9

    INT   21H

    MOV   DX, SP_STR1  ;取起始地址

    MOV   AH, 9

    INT   21H


    MOV   DX, OFFSET MSG2

    MOV   AH, 9

    INT   21H

    MOV   DX, SP_STR2  ;取起始地址

    MOV   AH, 9

    INT   21H

RET

;-----------------------


CODE   ENDS

    END   START                ;程序结束

;----------------------------------


提问者评价:你给了我一种思路。但貌似你这个对于结构体数组的里面的成员字符串不可以直接交换。


做而论道评论:楼主采纳后,才提出不满足的意见,实际上,这是节外生枝。


  交换【结构体数组的里面的成员字符串】,也是可以的。在定义时,也采用指针即可。


1 0
原创粉丝点击