MASM32: отображение времени в течение дня - PullRequest
0 голосов
/ 25 июня 2018

Мне нужно отобразить время в течение дня и напечатать «Утро, день или вечер».

i.Утро (4:00 - 11:59) ii.Полдень (12:00 - 17:59) iii.Вечер (6:00 PM - 3:59 AM)

Я использовал GetTimeFormat с форматированием времени в 24 часа.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 голосов
/ 25 июня 2018
mov ecx, offset time_buf

Эта инструкция загружает адрес time_buf в регистр ECX.
Это сам адрес, который вы сравниваете с 4 (4 должно быть указанием часа).Это объясняет, почему вы всегда получаете сообщение PM .

Вам нужно разыменовать, как в cmp dword [ecx], 4.

И поскольку GetTimeFormat возвращает text , вам придется сравнивать с символом "4".


add ecx, eax; add length returned by GetTimeFormat      
pop ecx

Убедитесь, что добавление к регистру ECX здесь бесполезно, поскольку pop ecx следует сразу!


push ecx
push ecx
push ecx

Почему 3 толчка?Инструкция cmp не уничтожает значение в ECX, поэтому вы можете продолжать использовать его в нескольких ветвях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...