在本程序中怎么样设置程序运行起点为100H。

2019-03-25 10:19发布

系统时间显示     CURSOR  EQU    45H      ATTRIB   EQU    2FH CODE    SEGMENT     ASSUME CS:CODE,DS:CODE START:     JMP     GO OLDCUR  DW      ? OLD1C   DW      2 DUP(?) NEWINT1C:       PUSHF    CALL DWORD PTR CS:OLD1C PUSH    AX PUSH    BX PUSH    CX PUSH    DX      XOR     BH,BH MOV     AH,3         ;读光标位置      INT     10H          ;显示器驱动程序      MOV     CS:OLDCUR,DX      MOV     AH,2         ;设置光标位置 XOR     BH,BH       MOV     DX,CURSOR ; 自定义CURAOR光标位置给DX,即第00行,第69列(45H)    INT      10H        ;显示器驱动程序 MOV     AH,2        ;读CMOS时钟,即系统时钟CH=小时,CL=分,DH=秒(都为BCD数)      INT      1AH        ;时钟驱动程序                   PUSH    DX       PUSH    CX         ;将CX小时寄存器给BX,CX备用 POP     BX         ;CX-->BX PUSH     BX         ;保护BX    CALL     SHOWBYTE   ;调用显示时间数字的子程序        CALL    SHOWCOLON  ;调用显示":"的子程序入口参数AL                                POP     BX XCHG    BH,BL       ;交换BH BL为的是显示分             CALL     SHOWBYTE                                            CALL    SHOWCOLON POP     BX          ;把DX给BX,现在开始显示秒     CALL   SHOWBYTE     ;调用显示时间数字的子程序            MOV   DX,CS:OLDCUR  ;调用光标的地址     MOV   AH,02H      ;10号功能AH=2是设置光标位置     XOR    BH,BH        ;BH清0,为图形方式     INT    10H          ;10号功能调用     POP     DX                                        POP     CX                  POP     BX     POP      AX     IRET SHOWBYTE PROC NEAR            ;显示时间数字子程序入口参数BH      PUSH    BX             MOV    CL,04H      MOV    AL,BH       ;先将小时的十位给AL,比如12点,这个是转变1的      SHR    AL,CL          ;将小时的数转化为ASCII码      ADD    AL,30H      CALL    SHOW          ;调用显示子程序      CALL   CURMOVE      ;移动光标     POP     BX            ;再将小时的个位给AL,比如12点,这个是转变2     MOV    AL,BH     AND    AL,0FH     ADD    AL,30H    CALL    SHOW         ;调用显示子程序    CALL    CURMOVE      ;调用移动光标子程序                  RET SHOWBYTE ENDP SHOWCOLON PROC NEAR         ;显示时间中的":"       MOV    AL,':'       CALL    SHOW                        CALL    CURMOVE    RET       SHOWCOLON ENDP CURMOVE PROC NEAR    ;移动光标子程序,就好像在DOS中,按空格,光标后移一个 位置         PUSH    AX     PUSH    BX     PUSH    CX     PUSH    DX     MOV     AH,3         ;读光标位置     MOV     BH,0       ;BH为显示页号BH=0是图形方式     INT      10H         ;10H号功能是显示器驱动程序                          INC      DL          ;DH,DL=行,列值     MOV     AH,2        ;设置光标位置     INT      10H     POP      DX     POP     CX     POP     BX     POP     AX     RET     CURMOVE ENDP SHOW    PROC NEAR     ;这个子程序功能是在显示器上显示数字     PUSH     AX                                              PUSH     BX     PUSH     CX     MOV     AH,09H     ;在当前光标处写字符的代码和属性                  MOV     BX,ATTRIB    ;BH=00显示页号,BL=2F欲写字符的属性     MOV     CX,1         ;字符计数       INT     10H     POP     CX     POP     BX     POP     AX                                  RET        SHOW    ENDP     GO:    PUSH    CS        POP     DS        MOV     AX,351CH      ;AH=35H 取中断向量AL=1CH为中断向量号,该中断被INT 8H(即8253/8254计数器)中断调用,每秒执行18.2次          INT     21H           ; 中断返回参数ES:BX           MOV    OLD1C,BX                       MOV    BX,ES         MOV    OLD1C+2,BX              MOV     DX,OFFSET NEWINT1C;中断程序入口地址        MOV     AX,251CH    ;AH=25H设置中断向量,AL=1CH为中断向量号        INT     21H        MOV     DX,OFFSET GO ;常驻内存程序的长度        SUB     DX,OFFSET START        MOV     CL,4 SHR     DX,CL ADD     DX,11H MOV     AX,3100H    ;AH=31H程序常驻内存 INT      21H CODE ENDS END START   此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
eeleader
1楼-- · 2019-03-25 18:27
< /

啥意思?没有明白你的问题啊

一周热门 更多>