访问堆栈上的数据

时间:2014-11-12 15:11:59

标签: string assembly stack

我打算在程序集中编写程序,在字符串中搜索子字符串并写入包含子字符串的单词。例如:

字符串:“adgfh asdsd zxc dbasdas”

substring:“as”

输出:“asdsd dbasdas”

这个想法是只使用一个寄存器( DX )和堆栈来存储数据。我正在将字符串和子字符串推入堆栈。我的主要问题是 - 是否可以访问堆栈顶部元素下的数据而不会弹出数据?我想使用 DX 来记住单词之间的空格,并将字符串中的每个字母与字符串中的第一个字母进行比较,如果它是相同的字母,则在字符串和子字符串中递增指针以指向下一个字母单词和重做比较等。

1 个答案:

答案 0 :(得分:0)

是的,您可以访问堆栈上的项目,因为堆栈只是内存。但是,如果您处于16位模式,则无法使用DX,您需要BXSIDIBP。例如:

mov bx, sp
mov bl, ss:[bx+10]

请注意,ss以外的任何内容都需要BP段覆盖。在32位模式下,您可以直接使用ESP,例如:

mov dl, [esp+10]

PS:对于第一个程序来说,这是一个相当奇怪的项目;)