Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用push and pop-in Assembly,can';以相反顺序复制字符串;无法通过调用writeString查看输出_Assembly_Stack_Masm_Irvine32 - Fatal编程技术网

使用push and pop-in Assembly,can';以相反顺序复制字符串;无法通过调用writeString查看输出

使用push and pop-in Assembly,can';以相反顺序复制字符串;无法通过调用writeString查看输出,assembly,stack,masm,irvine32,Assembly,Stack,Masm,Irvine32,唯一的问题是,我无法通过调用writeString来查看输出,以确保字符串是否成功复制到目标中 INCLUDE Irvine32.inc .data string BYTE "kashif",0 dest BYTE 0 .code main PROC mov ecx,lengthof string mov esi,offset string k: mov al,[esi] push ax inc esi loop k mov ecx,lengthof string mov edi,of

唯一的问题是,我无法通过调用writeString来查看输出,以确保字符串是否成功复制到目标中

INCLUDE Irvine32.inc

.data
string BYTE "kashif",0
dest  BYTE 0
.code
main PROC

mov ecx,lengthof string
mov esi,offset string

k:
mov al,[esi]
push ax
inc esi
loop k

mov ecx,lengthof string
mov edi,offset dest

a:
pop ax
mov [edi],al
call writeChar
inc edi
loop a
通过调用writeChar,我可以看到相反顺序的输出,即fihsak,这意味着push、pop工作正常

mov edx,offset dest
call writeString 
但在这里,我无法通过调用writeString看到任何输出

exit
main ENDP

END main

反转字符串不会使其变长或变短。您需要以与设置源相同的方式初始化目标

string BYTE "kashif",0
dest   BYTE "xxxxxx",0
这里,lengthof运算符返回7,因为它将包括终止零。终止零不是要包含在反转操作中的字节,因此必须减少计数

mov ecx,lengthof string
dec ecx

writeString
可能要求每个字符有一个字节。当您将字符串放在堆栈上时,您正在按每个字符推送一个单词。另一个问题是,您仅在
dest
处保留一个字节的空间。看起来您正在将终止的零复制到
dest
的开头。少绕一圈。(“count”以1开头,“index”以0开头)噢,
dest
只是一个字节。对你的反向字符串来说不够@Michael,但是我怎么才能推字节寄存器呢?不允许推送8位寄存器。@FrankKotler我将dest改为WORD并从0启动edi,但即使存在问题。而且我无法inc ecx,这会导致运行时错误是否需要推送/弹出字节寄存器而不是WORD或dword?CPU不允许推送/弹出字节寄存器。如果需要在堆栈上存储一系列字节值,可以部分展开相关循环,将两个连续值放入字寄存器,然后推入字。