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

Posted

技术标签:

【中文标题】在汇编语言编程中不使用字符串指令移动字符串 8086【英文标题】:Moving a string without using string instuctions in Assemply language programming 8086 【发布时间】:2020-09-13 09:21:20 【问题描述】:
; 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

我尝试了这个程序的以下变体:

    使用 LOOP 而不是 LOOPNE 使用 JNZ 和 DEC CX 而不是循环指令

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

【问题讨论】:

loopne 是错误的。使用loopdec cx \ jnz ... 【参考方案1】:

我认为问题出在MOV [DI],AL 指令上。

如果没有段前缀,则假定DI中的地址在DS引用的段中,你想使用ES引用的段。

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

【讨论】:

或者只是简化并将两个缓冲区放在普通数据段中,这样您就根本不需要弄乱 ES。另请注意,DEST DB ? 只保留 1 个字节的空间,但代码复制了 4 个字节。

以上是关于在汇编语言编程中不使用字符串指令移动字符串 8086的主要内容,如果未能解决你的问题,请参考以下文章

8086 汇编

如何在C语言中调用shell命令

汇编语言 王爽 第四版 实验1

0基础学习python怎么入门呢?

零基础应当如何开始学习 Python?

C语言编程: 文件移位加密与解密。