我正在尝试编写一个8086汇编程序来连接两个给定的字符串。 为了做到这一点,我使用了“ REP MOVSB ”指令,但程序运行不正常。所以我编写了一个程序,它应该静态地连接两个字符串,但似乎“ REP MOVSB ”根本不会影响字符串。 这是我为测试编写的代码部分:
data segment string1 db "Lotfi", 0 string2 db "Ali ", 0 data ends code segment ASSUME CS: code, DS: data start: cld mov ax , data mov DS , ax mov SI , offset string1 mov DI , offset string2 add DI , 3 ; Adding the length of destination string to the DI mov cx , 5 rep movsb ; This should concat two strings ; Printing the result character by character on the console mov SI , offset string2 l: lodsb ; Printing loop mov dl, al mov ah, 2h int 21h jmp l hlt code ends end start
代码的结果如下:
Ali ü,Z0???... (And so)
我的代码出了什么问题? 坦
答案 0 :(得分:6)
movsb
从DS:SI移动到ES:DI。您已加载DS但不加载ES寄存器。
您只需添加一行:
cld
mov ax , data
mov DS , ax
mov ES , ax ; here!
答案 1 :(得分:0)
DATA SEGMENT
STR1 DB "Tanay$"
STR2 DB "Patil$"
LEN DB ?
DATA ENDS
CODE SEGMENT
START:ASSUME CS:CODE,DS:DATA
MOV AX,DATA
MOV DS,AX
LEA SI,STR1
LEA DI,STR2
MOV AL,"$"
NEXT1:CMP[SI],AL
JZ EXIT
INC LEN
INC SI
JMP NEXT1
EXIT:MOV BL,"$"
NEXT:MOV AL,[DI]
CMP AL,BL
JZ EXIT1
MOV [SI],AL
INC SI
INC DI
JMP NEXT
EXIT1:MOV[SI],BL
MOV AH,09H
LEA DX,STR1
INT 21H
MOV AH,0AH
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
输出将显示在您的TASM窗口中
答案 2 :(得分:-3)
组织100h jmp开始 firstN:db“Jaymar”,0Ah,0Dh,24h lastN:db“Porras”,0Ah,0Dh,48h
开始:mov dx,firstN,lastN
电影啊,09h int 21h mov啊,0 int 16h 电影啊,09h int 21h mov啊,0 int 16h保留
Tanx ^ _ ^