如何通过Assembly 8086将系统时间的整数月转换为字符串月?

时间:2014-05-11 12:25:26

标签: assembly x86-16

所以我在Assembly 8086中编写了我的代码,询问系统的当前时间, (小时,分钟,秒,日,月和年)但不是预览5月的当前月份,即数字“5”,而是要将月份输出到字符串 当前日期:2014年5月11日至当前日期:2014年5月11日?我应该使用循环吗?

name "datefile"

org 100h  

TAB EQU 9   ; ASCII CODE

mov ah, 2ah                  ; get date 
int 21h 
xlat

mov week, al                 ; 0=sunday  
add cx, 0f830h               ; for years 
mov ax, cx 
call deci 

mov year, ax 
mov al, dh                   ; month 
call deci

mov mont, ax 
mov al, dl                   ; day 
call deci 
mov day, ax 


mov ah, 2ch                  ; get time 
int 21h 
mov al, ch                   ; hour 
call deci

mov hour, ax 
mov al, cl                   ; minute 
call deci

mov minu, ax 
mov al, dh                   ; second 
call deci

mov seco, ax 


mov ah, TAB 
mov dx, offset txt 
int 21h 


mov ax, 4200h 
xor cx, cx                   ; begin byte 0 
xor dx, dx                   ;  
int 21h 
jb error 




mov ah, 3eh                 ; close file.
int 21h 



; wait for any key press:
mov ah, 0
int 16h

error:                       ; leave program (unconditionally). 
mov ax, 4c00h
int 21h


deci:                        ; calculate in decimal 
push cx
xor ah, ah 
mov cl, 10 
div cl 
add ax, 3030h
pop cx
ret 



; here's data to display the date and time 

txt  db 0Dh, 0Ah, 0Ah, TAB, TAB          ; jump line and go two tabs right 
dat  db "date: "
week db 0, TAB                           ; put the day 1=monday   9 jump a colon (tab)
     db "20"
year db 0, 0, '-'        
mont db 0, 0, '-'
     ;db 0Ax, 

day  db 0, 0, TAB  


hour db 0, 0, ':'       
minu db 0, 0, ':' 
seco db 0, 0, ' '
     db 0Dh, 0Ah, 24h         ; line feed   return   and  stop symbol 24h=$ (ASCII). 

January:
    mov ax, OFFSET mont
    mov dh, ax                ; put month to 16 bit reg
    db "1 - January" 

2 个答案:

答案 0 :(得分:1)

你必须在.data部分创建12个字符串,然后使用值创建cmp。例如

cmp al,1 
je label 

label:
    mov ah,09h
    mov dx,offset january 
    int 21h .

我认为这很容易。 它由您决定如何创建逻辑并实现它。

答案 1 :(得分:1)

而不是循环,使用常量数组。

Jan db "January$"
Feb db "January$"
...
Dec db "December$"

Months dw offset Jan
    dw offset Feb
    ...
    dw offset Dec

然后使用月号来选择合适的月份

;Assuming SI contains zero-based month number
mov dx,  [Months+2*si] ;DX has now the offset of the month name