MASM32:显示一天中的时间

时间:2018-06-25 08:13:25

标签: assembly

我需要显示一天中的时间,并打印上午,下午或晚上。

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消息。 :(

有帮助吗?谢谢!

1 个答案:

答案 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中的值,因此您可以在多个分支中继续使用它。