在汇编语言编程中不使用字符串指令移动字符串 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
是错误的。使用loop
或dec cx
\ jnz ...
【参考方案1】:
我认为问题出在MOV [DI],AL
指令上。
如果没有段前缀,则假定DI中的地址在DS引用的段中,你想使用ES引用的段。
如果我没记错的话,语法是MOV ES:[DI],AL
【讨论】:
或者只是简化并将两个缓冲区放在普通数据段中,这样您就根本不需要弄乱 ES。另请注意,DEST DB ?
只保留 1 个字节的空间,但代码复制了 4 个字节。以上是关于在汇编语言编程中不使用字符串指令移动字符串 8086的主要内容,如果未能解决你的问题,请参考以下文章