ВОС ПОН ВТО СРЕ ЧЕТ ПЯТ СУБ
задали число 3 - ВТО
должен вывести: ВТО СРЕ ЧЕТ ПЯТ СУБ ВОС ПОН
а выводит только: ВТО СРЕ ЧЕТ ПЯТ СУБ
.data?
lpbuffer_output db 64 dup(?)
.data
sztitle db "Результат: ",0
szformat_month db 0Dh, 0Ah, "%s", 0Dh, 0Ah, 0
;_____________________________________________________
three db 4
monin db '02'
alfmon db '????', 0
montab db 'ПОН ','ВТО ','СРЕ ','ЧЕТ ','ПЯТ ','СУБ ','ВОС '
;daytab db 'ПОН ','ВТО ','СРЕ ','ЧЕТ ','ПЯТ ','СУБ ','ВОС '
;_____________________________________________________
.code
start:
; ============================= start ====================================
;title direct: Прямой табличный доступ
;_____________________________________________________
main proc
xor eax,eax
xor ebx,ebx
xor edx,edx
xor ecx,ecx
xor esi,esi
xor edi,edi
call c10conv ;получить двоичное значение
call d10loc ;выделить месяц из таблицы
call f10disp ;выдать месяц на экран
ret
main endp
; перевод ASCII в двоичное представление
; ______________________________________
c10conv proc
mov ah,monin;загрузить номер месяца
mov al,monin+1
xor ax,3030h;удалить ASCII-тройки
cmp ah,0 ;месяц 01-09?
jz c20 ;да - обойти
sub ah,ah ;нет - очистить ah,
add al,10 ;и перевести в двоичное
c20: ret
c10conv endp
; выделение месяца из таблицы
; ___________________________
d10loc proc
lea esi,montab
dec al ;коррекция для таблицы
mul three ;умножить al на 4
add si,ax
mov cx,70 ;трехсимвольная пересылка
cld
lea edi,alfmon
rep movsb ;переслать 3 символа
ret
d10loc endp
; вывод на экран названия месяца
f10disp proc
; output_message:
push OFFSET alfmon ; вывод на экран имени месяца
push OFFSET szformat_month; формат вывода на экран имени месяца
push OFFSET lpbuffer_output
call wsprintf
push MB_OK
push OFFSET sztitle
push OFFSET lpbuffer_output
push 0
call MessageBox
push 0
call ExitProcess
f10disp endp
end start