【问题标题】:Moving a string without using string instuctions in Assemply language programming 8086在汇编语言编程中不使用字符串指令移动字符串 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

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

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

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

【问题讨论】:

  • loopne 是错误的。使用loopdec cx \ jnz ...

标签: assembly x86-16 masm dosbox


【解决方案1】:

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

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

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

【讨论】:

  • 或者只是简化并将两个缓冲区放在普通数据段中,这样您就根本不需要弄乱 ES。另请注意,DEST DB ? 只保留 1 个字节的空间,但代码复制了 4 个字节。
猜你喜欢
  • 2022-11-25
  • 2019-12-29
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
相关资源
最近更新 更多