我准备GATE考试.最古老的问题之一是我们不熟悉.有些专家请为我们澄清一下.
以下哪一项可以作为以下ML功能的类型?
my f(g, nil)=nil | f(g,x::xs)=(fn a ? g(a,x))::f(g, xs);
1) (int *book ? real) * bool list ? (int ? real) list
2) (bool *int ? int) * real list ? (bool ? int) list
3) (int *int ? real) * real list ? (real ? bool) list
4) (bool *real ? int) * int list ? (int ? int) list
Run Code Online (Sandbox Code Playgroud)
答案表说(1)是纠正.评论或简短描述,以便更好地理解?
我阅读了 Kip IRVINE 的著作《x86 处理器汇编语言》,他写道:
将较小的值复制到较大的值
尽管 MOV 不能直接将数据从较小的操作数复制到较大的操作数,但程序员可以创建变通方法。假设计数(无符号,16 位)必须移动到 ECX(32 位)。我们可以将 ECX 设置为零并将计数移动到 CX:
Run Code Online (Sandbox Code Playgroud).data count WORD 1 .code mov ecx,0 mov cx,count如果我们用一个等于 -16 的有符号整数尝试相同的方法会发生什么?
Run Code Online (Sandbox Code Playgroud).data signedVal SWORD -16 ; FFF0h (-16) .code mov ecx,0 mov cx,signedVal ; ECX = 0000FFF0h (+65,520)ECX 中的值 (+65,520) 与 -16 完全不同。另一方面,如果我们先用 FFFFFFFFh 填充 ECX,然后将 signedVal 复制到 CX,则最终值将是正确的:
Run Code Online (Sandbox Code Playgroud)mov ecx,0FFFFFFFFh mov cx,signedVal ; ECX = FFFFFFF0h (-16)
我的问题是最后一部分。我认为我们应该在上面的代码中写第一行mov ecx,FFFFFFFFFh,而不是 0FFFFFFFFh。换句话说,什么是前导零?