我需要显示一天内的时间,并打印上午,下午或晚上。
1.早上(4:00AM - 11:59AM)下午(12:00 12 5:59 12)3.晚上(下午6:00-凌晨3:59)
我使用时间格式为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消息。:(
有什么帮助吗?谢谢!
发布于 2018-06-25 20:26:10
移动ecx,偏移量time_buf
此指令加载ECX寄存器中的time_buf地址。
它是与4比较的地址本身(4应该是一个小时指示)。这就解释了为什么你总是收到PM消息。
您需要像在cmp dword [ecx], 4中那样取消引用。
因为GetTimeFormat返回text,所以您必须与字符"4“进行比较。
添加ecx、eax;添加GetTimeFormat pop ecx返回的长度
请验证添加到此处的ECX寄存器是否没有用,因为紧随其后的是pop ecx!
推送ecx推送ecx推送ecx
为什么是3次推送?cmp指令不会破坏ECX中的值,因此您可以在几个分支中继续使用它。
https://stackoverflow.com/questions/51018894
复制相似问题