微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Assemply语言编程8086中移动字符串而不使用字符串指令

如何解决在Assemply语言编程8086中移动字符串而不使用字符串指令

; Moving a string without using string instructions

ASSUME CS:CODE,DS:DATA,ES:EXTRA

DATA SEGMENT
    SOURCE  DB  11H,22H,33H,44H
DATA ENDS

EXTRA SEGMENT
    DEST    DB  ?
EXTRA ENDS

CODE SEGMENT

START:  MOV AX,DATA
        MOV DS,AX

        MOV AX,EXTRA
        MOV ES,AX

        MOV SI,OFFSET SOURCE
        MOV DI,OFFSET DEST
        MOV CX,0004H
        CLD

TRANSFER:   
        MOV AL,[SI]
        MOV [DI],AL
        INC SI
        INC DI 
        ;DEC CX
        LOOPNE TRANSFER

        MOV AH,4CH
        INT 21H

CODE ENDS
END START

我已经尝试了该程序的以下变体:

  1. 使用LOOP代替LOOPNE
  2. 将JNZ与DEC CX结合使用Loop指令

但是我似乎无法传输数据字节。这是在masm中调试时的输出

Unassembled code

enter image description here

解决方法

我相信问题在于MOV [DI],AL指令。

没有段前缀,将假定DI中的地址在DS引用的段中,并且您要使用ES引用的段。

如果我没记错的话,语法是MOV ES:[DI],AL

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。