程序计数结果减法或乘法取决于指定的最后一个参数(例如:“./a.out 2 4 - ”= -2;“./a.out 5 8 x”= 40)。如果最后一个参数是' - '或'x',程序不会在屏幕上打印任何内容。为什么???
std::multimap<int,std::string> mymap;
mymap.emplace(1, "hello ");
mymap.emplace(1, "world!");
std::cout << mymap.size() << "\n";
答案 0 :(得分:2)
现在我也检查了你的来源,它没有做任何有意义的事情。您不了解所收到的参数格式,也不了解int 80h, 4
(sys_write)的参数格式。
mov ecx, dword ptr [esp+8]
加载指向<OS encoding>
字符串的指针(可能是UTF-8,因此只要涉及数字,就可以将其视为ASCII)。
如果您确实输入了./a.out 12 23456 -
,那么ecx
将指向字符串31 32 00
的第一个字节(六个字节形成nul终止"12"
)并且dword ptr [esp+12]
是字符串的地址由字节32 33 34 35 36 00
组成。
所以你是SUB / IMUL-ing两个地址。
然后对于sys_write
,您应该在ebx
中给出文件处理程序(1 == stdout,在代码中正确),edx
是要写入的缓冲区长度,{{1是缓冲区的地址。
如果要产生类似&#34; -23444&#34;的输出,则必须在内存中准备ASCII字节(hexa)ecx
,并将带有地址的2D 32 33 34 34 34
加载到第一个字节ecx
(2D
或45(十进制))和'-'
edx
来显示此类字符串。
也许你可能想先用字符串播放而不必进行字符串 - >数字和数字 - >字符串转换?或链接clib,因此您可以调用6
函数族来处理这些参数并准备输出。
(在printf/scanf
中没有使用&#34;数字&#34;的服务调用,只支持字节缓冲区(您可以将它们视为&#34;字符串&#34;,虽然它不准确)。