Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/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
Pointers 如何使用汇编8086中的基指针遍历堆栈?_Pointers_Assembly_Base_X86 16 - Fatal编程技术网

Pointers 如何使用汇编8086中的基指针遍历堆栈?

Pointers 如何使用汇编8086中的基指针遍历堆栈?,pointers,assembly,base,x86-16,Pointers,Assembly,Base,X86 16,我有一个赋值,我必须在堆栈中插入两位整数。在堆栈中搜索一个数字并返回该数字所在的位置,打印堆栈中的所有数字并从堆栈中删除一个数字 现在我正试图通过使用基指针遍历堆栈来打印堆栈中的所有数字,但我的代码不起作用 mov di,offset bp mov ax, [di] ;trying to move de value stored in di direction in stack to Ax mov digito,ah mov digito2,al mov dl,digito mo

我有一个赋值,我必须在堆栈中插入两位整数。在堆栈中搜索一个数字并返回该数字所在的位置,打印堆栈中的所有数字并从堆栈中删除一个数字

现在我正试图通过使用基指针遍历堆栈来打印堆栈中的所有数字,但我的代码不起作用

mov di,offset bp   
mov ax, [di]     ;trying to move de value stored in di direction in stack to Ax
mov digito,ah
mov digito2,al

mov dl,digito
mov ah,02
int 21h

mov dl,digito2
mov ah,02
int 21h

mov ah,01
int 21h
因此,在这段代码中,我试图通过将bp输入di来打印两个数字,以便稍后我可以减小它以遍历所有堆栈,并传递Ax中存储在该方向的数字。我是个装配新手,所以我不知道自己在做什么


提前感谢您抽出时间。很抱歉我的英语

很抱歉延迟回复。首先,bp实际上没有偏移量,所以你可以去掉它。其次,bp不会自动指向堆栈,除非您将其设置为mov bp,sp

您没有提到操作系统,但int 21h将其标识为DOS。。。这是实模式,分段存储模型。mov ax,[di]默认为mov ax,ds:[di]。如果您已经将其组装成一个.com文件,那么cs、ds、es和ss都是相同的。如果您已将其组装成.exe文件,则情况并非如此!当然,你可能想把它写成mov ax,ss:[di]。相反,mov ax[bp]默认为mov ax,ss:[bp],因此您可能希望在这里使用bp而不是di。我想你应该这样做。如果您有一个.com文件,您可以在32位代码中忘记这一部分,您也可以忘记它,但这不适用于您

然后。。。你试图打印一个数字,但实际上无法正常工作。查找如何打印数字?关于这方面的更多信息的示例-这里太多了

这对初学者来说太难了,但老师总是对的