【问题标题】:Display system time using int 21h, 2Ch使用 int 21h, 2Ch 显示系统时间
【发布时间】:2015-11-30 14:06:46
【问题描述】:

我正在尝试使用 int 21h, 2Ch 显示系统时间,所以我首先在 CH 中显示小时,但我没有得到任何输出,我不知道为什么。能否请你帮忙?这是我的第一段代码:

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

【问题讨论】:

  • 看来mov ah,ch是错误的; div bl 期望你初始化ax,而不仅仅是ah
  • 我试过 mov ah,ch 然后 mov al,0 但没有任何区别。我认为还有其他问题@Ruud
  • div bl 会做ax / bl
  • 好的,我现在明白了,应该是 mov al,非常感谢@Ruud
  • 好吧,我明白了,它应该是 mov al,非常感谢@ElderBug

标签: assembly masm x86-16 dosbox


【解决方案1】:

为了完整起见并感谢用户 Ruud 和 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多