2015-11-30 56 views
2

我试图显示使用int 21h,2Ch的系统时间,所以我开始通过在CH中显示小时,但我没有输出,我不知道为什么。能否请你帮忙?这里是第一块我的代码:显示系统时间使用int 21h,2Ch

Data_segment_name segment para 

H db ? 
hh db ? 
M db ? 
mm db ? 

Data_segment_name ends 


Stack_segment_name segment para stack 



Stack_segment_name ends 


Code_segment_name segment 

Main_prog proc far 

    assume SS:Stack_segment_name,CS:Code_segment_name,DS:Data_segment_name 

    mov AX,Data_segment_name   ; load the starting address of the data 
    mov DS,AX      ; segment into DS reg. 

    mov ah,2ch 
    int 21h 

    mov ah,ch 
    mov bl,10 
    div bl 

    mov H,al 
    mov hh,ah 
    mov dl,30h 
    add dl,H 
    mov ah,02h 
    int 21h 

    mov dl,30h 
    add dl,hh 
    mov ah,02h 
    int 21h 



    mov ax,4c00h      ; exit program 

    int 21h 


Main_prog  endp 

Code_segment_name ends 
end Main_prog 
+0

会出现'mov ah,ch'是错误的; 'div bl'希望你初始化'ax',而不是'ah'。 –

+0

我试过mov啊,然后mov al,0但它没有任何区别。我认为别的东西一定是错的@Ruud – Nemo

+2

'div bl'会做'ax/bl'。 – ElderBug

回答

1

的完整性和感谢用户范尼和Elderbug的缘故,这是对这一计划的修正:

mov ah, 2ch 
int 21h 

mov al, ch 
mov ah, 0 

mov bl, 10 
div bl 

下面是其余较短的替代的代码:

;;; No more need to store in variables 
add ax, 3030h   ;Convert together 
push ax 
mov dl, al   ;H 
mov ah, 02h 
int 21h 
pop dx 
mov dl, dh   ;hh 
int 21h