Assembly MASM615和切换两个字符串的地址

Assembly MASM615和切换两个字符串的地址,assembly,masm,irvine32,Assembly,Masm,Irvine32,我正在尝试编写一个MASM615汇编程序,其中一部分程序在需要时切换两个字符串的地址。然而,我不知道该怎么做。基本上,我需要通过引用将两个字符串指针传递到一个新的过程中,该过程切换地址 到目前为止,我已经: lea eax, str1 lea ebx, str2 push ebx push eax call compare 所以你看,地址被推入堆栈。在这个过程中,我将它们从堆栈中弹出到相同的寄存器中(似乎有点无意义,但哦,好吧)。。。然后呢?我觉得我需要以某种方式告诉str1指向ebx中的地址

我正在尝试编写一个MASM615汇编程序,其中一部分程序在需要时切换两个字符串的地址。然而,我不知道该怎么做。基本上,我需要通过引用将两个字符串指针传递到一个新的过程中,该过程切换地址

到目前为止,我已经:

lea eax, str1
lea ebx, str2
push ebx
push eax
call compare
所以你看,地址被推入堆栈。在这个过程中,我将它们从堆栈中弹出到相同的寄存器中(似乎有点无意义,但哦,好吧)。。。然后呢?我觉得我需要以某种方式告诉
str1
指向
ebx
中的地址,
str2
指向
eax
中的地址,但是怎么做

编辑:当前测试代码

TITLE MASM Template                        (main.asm)

INCLUDE Irvine32.inc

.data
str1 db "Hello",0
str2 db "Hi there",0

.data?
pStr1 dd ?
pStr2 dd ?

.code
main PROC
mov [pStr1],OFFSET str1
mov [pStr2],OFFSET str2

mov edx, [pStr1]
call WriteString
main ENDP

END main

看起来你想要这样的东西:

.data
str1 db "Hello",0
str2 db "Hi there",0

.data?
pStr dd ?

.code
mov [pStr],OFFSET str1
...
; if some condition is fulfilled, jump past this:
mov [pStr],OFFSET str2
...
mov edx,[pStr]
call WriteString

您不能更改标签的地址。您可以将其地址存储在变量(或寄存器)中,然后将变量更改为包含其他地址。虽然还不完全清楚需要将指针换成什么。如果你只是需要暂时交换指针,你可以简单地按你按下它们的相反顺序弹出它们(如在
push ebx push eax pop ebx pop eax
中),我需要有两个指向字符串的指针,并反转它们。让我们假设我们有:字节str1“你好!”,0和字节str2“你好。”,0。。。。如果我们执行mov edx,偏移str1,调用WriteString。。。。。它实际上应该输出“Hi there.”。。。。。。如果字符串需要以某种方式成为指针而不是标签,正如您所说的,那么我想这很好。(为了更清楚,我觉得我需要两个新变量,它们将包含字符串的地址,然后我不想将偏移量移动到edx中,我会做一些类似于mov edx,stringAddress1…的事情,对吗?如果我理解了这个问题,你要么需要指向字符串指针的指针并交换它们,要么需要交换字符串的内容。很抱歉,但我的经验有限。我相信这可能是我想要的答案,但我需要澄清。看起来db和BYTE是一样的,而指针的dd意味着它是一个双字,所以DWORD?谢谢你的帮助,我能找到的简单文档很少。是的h、 db=declare byte,dw=declare word,dd=declare dword.MASM,TASM和NASM都应该理解这些(尽管如果使用NASM,未初始化的表单
dd?
可能必须写成
resd 1
)。这个概念似乎可行,但是,如果我调用WriteString,程序似乎会崩溃。这不应该发生,因为字符串是0连接的…我会发布我的测试代码,这与您的测试代码非常相似,但与我最初发布的编辑器不同,此注释编辑器不允许我使用enter键添加新行。:\EDIT:string确实会打印出来,但随后会使程序崩溃。难道您不能编辑您的问题并添加最新的代码吗?您可能还想指定要针对的操作系统(如果您使用DOS的中断函数打印字符串,DOS希望字符串以“$”字符终止,而Windows则使用NUL(0)终止符)。这样一个简单的修复,我已经编辑了我的原始帖子。我使用的是windows,所以它需要0个终止文本。