我需要显示一天中的时间,并打印上午,下午或晚上。
i。早上(4:00 AM – 11:59 AM) ii。下午(12:00 PM – 5:59 PM) iii。晚上(6:00 PM – 3:59 AM)
我在24小时内使用带有时间格式的GetTimeFormat。 ecx实际上包含1-24,具体取决于系统时间。
invoke GetTimeFormat, 0, 0, 0, ADDR timeformat, ADDR time_buf, 50
mov ecx, offset time_buf
push ecx
push ecx
push ecx
add ecx, eax; add length returned by GetTimeFormat
pop ecx
cmp ecx, 4
je AM
jg AMNN
jl PM
AMNN:
pop ecx
cmp ecx, 12
jl AM
jge NNPM
NNPM:
pop ecx
cmp ecx, 18
jl NN
jge PM
此代码始终输出PM消息。 :(
有帮助吗?谢谢!
答案 0 :(得分:0)
mov ecx, offset time_buf
该指令将 time_buf 的地址加载到ECX
寄存器中。
您将自己与4进行比较的是地址本身(应该以4表示小时)。这就解释了为什么总是收到 PM 消息的原因。
您需要像cmp dword [ecx], 4
中那样取消引用。
并且由于 GetTimeFormat 返回文本,因此您将必须与字符“ 4”进行比较。
add ecx, eax; add length returned by GetTimeFormat pop ecx
请确保此处ECX
寄存器的添加没有用,因为后面紧跟着pop ecx
!
push ecx push ecx push ecx
为什么三按? cmp
指令不会破坏ECX
中的值,因此您可以在多个分支中继续使用它。