操作系统的系统调用(MASM)

来源:互联网 发布:centos 6.5mysql 编辑:程序博客网 时间:2024/05/01 23:17

获取系统时间并显示源程序outtime.asm
DATA SEGMENT
MESSGE DB OAH,'GET TIME OK!!!!',OAH,ODH,'S'
DATA ENDS
STACK SEGMECT PARA STACK 'STACK'
      DB 100 DUP(?)
STACK ENDS
GODE  SEGMENT PARA
MAIN PROC FAR
        ASSUME CS:CODE, DS:DATA, SS:STACK
START: MOV AX,DATA
       MOV DS,AX
       MOV AH,2CH;
       INT 21H
       MOV BL,3;
       PUSH DX;
       PUSH CX;
CYCLE: POP AX;
       MOV DH,AL;
       MOV AL,AH;
       MOV AH,0;
       MOV BH,10
       MOV BH,10
       DIV BH;
       CALL OUTTIME;
       MOV dl,':'
       MOV AH,02h
       INT 21h;
       MOV AL,DH;
       MOV AH,0;
       MOV BH,10
       DIV BH;
       CALL OUTTIME;
       MOV dl,''
       MOV ah,02h;
       DEC BL
       CMP BL,1
       JNBE CYCLE;
MOV DX,OFFSET MESSGE
MOV AH,9
INT 21H;
JMP START;
    MOV AH,4CH
    INT 21H
MAIN ENDP

OUTTIME PROC NEAR
        MOV BH,AL;
        MOV CH,AH;
        MOV CL,3
NEXT:   ADD BH,30H;
        MOV DL,BH
        MOV AH,02H
        INT 21H;
        MOV BH,CH;
        DEC CL
        CMP CL,1
        JNBE NEXT;
         RET
OUTTIME ENDP
  CODE      ENDS
      END START
2.实验步骤
  (1)首先确认磁盘上有汇编工具MASM,该汇编工具保存于D盘根目录的MASM文件夹,如无该工具,请自行复制建立。
  (2)利用编辑工具输入源程序。在WINDOWS环境下,通过点击“开始”菜单→“程序”→“附件”→“记事本”,打开记事本的编辑窗口。  (3)将上述提供的源程序清单逐行输入。
  (4)将输入的源程序另存为:outtime.asm文件。点击记事本左上角的“文件”菜单→点击“另存为”窗口,在“保存在”栏目处选择保存文件的位置。“文件名”栏目处输入:outtime.asm,在“保存类型”栏目处选择“所有文件”。操作无误后点击“保存”按钮。
  (5)点击“开始”菜单→“程序”→“附件”→“命令提示符”,打开MS-DOS窗口。在光标处输入D:后回车,将当前目录转向D盘根目录。
  (6)将MASM目录定为当前目录,键入命令:cd masm 并回车。
  (7)对源程序进行汇编,键人命令:masm  outtime.masm并回车,然后按提示操作。目标程序名取默认值,即为:outtime.obj。
  (8)链接目标程序。键入命令:link outtime.obj并回车,然后按提示操作。可执行文件名默认值,即为;outtime.exe。
  (9)运行可执行文件。键入命令:outtime.exe并回车,可在屏幕上看到运行结果。
  (10)按TRCL+C键结束程序运行。
  (11)退出操作系统命令界面。键入命令:exit按回车即可。

(二)通过系统调用测试操作系统的版本号
1. 参考源程序(本例功能:测试系统版本是否为 5.XX)
;PVE.ASM
DATA       SEGMENT
MESSGE     DB 0AH,0DH,'NOT DOS 5.XX VERSION',0AH,0DH,'$'
MESSGEL    DB 0AH,0DH,'DOS 5.XX VERSION OK!!!',0AH,0DH,'$'
DATA       ENDS
STACK      SEGMENT PARA STACK 'STACK'
             DB 100 DUP(?)
STACK      ENDS
CODE       SEGMENT PARA
           ASSUME CS:CODE,DS:DATA
START:     MOV AX,DATA
           MOV DS,AX
           MOV AH,30H
           INT 21H
           CMP AL,5
           JE VEROK
           MOV AH,09H
           MOV DX,OFFSET MESSGE
           INT 21H
           MOV AH,4CH
           INT 21H
VEROK:     MOV DX,OFFSE MESSGEL
           MOV AH,09
           INT 21H
           MOV AH,4CH
           INT 21H
CODE       ENDS
           END START  

原创粉丝点击