【发布时间】:2020-08-18 17:49:28
【问题描述】:
我需要帮助来组合我拥有的两个程序,但我似乎无法让它为我工作。没有得到想要的输出。
所以这是我的问题陈述:
将两个单独的字符串组合成第三个字符串并显示出来,其中第一个字符串是原样,第二个字符串是相反的。
例子:
输入:
字符串 1:“你好”
字符串 2:'.dlroW'
输出:
“你好世界。”
示例结束。
现在我们有两种方法可以解决这个问题。
第一:使用字符串函数。(首选)
现在我对学习汇编语言相当陌生,所以我想使用字符串函数来学习新的东西。
第二:不使用字符串函数。
另一种方法是,如果有人可以帮助组合两个程序,一个用于连接字符串,另一个用于反转,请注意,我已经编写了两个单独的程序,它们运行良好,没有任何问题,我只是不能一起做。我的处理方式是在连接我试图反转它的字符串之前,然后继续添加第二个字符串。但我似乎无法让它工作。我已尽我所能。
//Concatenation Code
.model tiny
.data
msg1 db 10,13,"Enter the string 1: $"
cat db 30 DUP('$')
msg2 db 10,13,"Enter the string 2: $"
msg3 db 10,13,"Concatenated string is: $"
.code
mov ax,@data
mov ds,ax
lea dx,msg1
mov ah,09h
int 21h
lea si,cat
up: mov ah,01h
int 21h
mov [si],al
inc si
cmp al,0dh
jnz up
lea dx,msg2
mov ah,09h
int 21h
dec si
up1: mov ah,01h
int 21h
mov [si],al
inc si
cmp al,0dh
jnz up1
lea dx,msg3
mov ah,09h
int 21h
lea dx,cat
mov ah,09h
int 21h
mov ah,4ch
int 21h
end`
这是第 2 部分
//Reversal Code
.model tiny
.data
msg1 db 10,13,"enter the string: $"
string db 40 DUP('$')
rev db 40 DUP('$')
msg2 db 10,13,"reverse string is: $"
.code
mov ax,@data
mov ds,ax
lea dx,msg1
mov ah,09h
int 21h
mov ah,0ah
lea dx,string
int 21h
lea si,string
lea di,rev
mov cl,[si+1]
mov ch,00h
add di,cx
inc si
inc si
up: mov al,[si]
mov [di],al
inc si
dec di
loop up
inc di
mov ah,09h
lea dx,msg2
int 21h
mov ah,09h
lea dx,[di]
int 21h
mov ah,4ch
int 21h
end
这是我通过结合这两者得出的代码。
//That's the code I tried Combining
.model tiny
.data
.model tiny
.data
msg1 db 10,13,"Enter string1: $"
cat db 30 DUP('$')
msg2 db 10,13,"Enter string2: $"
msg3 db 10,13,"Concatenated string is: $"
.code
mov ax, @data
mov ds,ax
lea dx,msg1
mov ah,09h
int 21h
lea si,cat
up: mov ah,01h
int 21h
mov [si],al
inc si
cmp al,0dh
jnz up
lea dx, msg2
mov ah,09h
int 21h
dec si
up2:mov al,[si]
mov [di],al
inc si
dec di
loop up2
inc di
up1:mov ah,01h
int 21h
mov [si],al
inc si
cmp al,0dh
jnz up1
lea dx,msg3
mov ah,09h
int 21h
lea dx,cat
mov ah,09h
int 21h
mov ah,4ch
int 21h
end
您可以清楚地看到,我未能正确完成任一项任务。那么有人可以告诉我哪里出错了吗?或者教我如何使用字符串函数来做到这一点?
【问题讨论】:
-
当您在标签
up2:处反转string1 时,您正在执行mov [di],al,但目标地址未加载到di。
标签: string assembly dos x86-16 tasm