8086汇编中断入门

来源:互联网 发布:工艺流程优化的案例 编辑:程序博客网 时间:2024/06/03 21:40

微机原理与接口技术作业,通过测试,分享一下

;2.编写一中断服务程序,中断类型号取76H,中断服务程序完成将AL和BL中存放的非压缩型BCD码相加,并将相加结果在屏幕上显示出来。;先开辟存放两个非压缩性BCD码的DB类型的数据区 DATA,进入程序再读进来DATASEG SEGMENTDATA   DB  06H,09HOBUF   DB  06H DUP (?) ; DATASEG ENDSSTACKSEG SEGMENT stackStatckSeg DW  40  DUP(?)StackTop  EQU  LENGTH StatckSegSTACKSEG ENDSCODESEG SEGMENT    ASSUME CS : CODESEG, DS : DATASEG    START:    ;macro template;brief : load specified interrupt address;note  : in this version MACRO , interrupt num must pass by register;date  : 2013/12/03;author: @brt  INTERRUPT_ADDR MACRO InterruptNum,InterruptProcName    PUSH DS    PUSH AX    PUSH BX    MOV  AX, 00H    MOV  DS, AXMOV  AX, 04H     MUL  InterruptNum    MOV  BX, AX       MOV  WORD PTR DS:[BX]    , OFFSET InterruptProcName     MOV  WORD PTR DS:[BX+02H], SEG    InterruptProcName    POP  BX    POP  AX    POP  DS ENDM    MAIN PROC FAR    MOV  AX, STACKSEG    MOV  SS, AXMOV   AX, StackTop                 ; copy stack pointer top SPMOV  SP, AX    PUSH DS    MOV  AX, 00H    PUSH AX    MOV  AX, DATASEG    MOV  DS, AX    MOV  CL, 76H    INTERRUPT_ADDR CL,INT_76H    INT  76H    CALL DISP_NUMRET    MAIN ENDP    INT_76H PROC FAR    PUSH BX    PUSH SI    MOV  SI, OFFSET DATA    MOV  AL, BYTE PTR[SI]    INC  SI    MOV  BL, BYTE PTR[SI]    ADD  AL, BL    MOV  AH, 00H    POP  SI    POP  BX     IRET    INT_76H ENDP    ;sub-process template;brief : dispay the value of AX,AX = ((DX):(AX)) / 10;  DX = ((DX):(AX)) % 10;note  : only display 16 bit width number,you can modify defined OBUF variable bit width according to your need ;date  : 2013/11/26;author: @brtDISP_NUM PROC NEARMOV  BX, OFFSET OBUF+6-1MOV  BYTE PTR [BX],'$'MOV  CX, 0AH;LOOP_NUM:;just like do{....}while(ax != 0)MOVDX, 00H  DIV  CXADD  DL, 30H;number value convert to ASCIIDEC  BXMOV  [BX], DLOR   AX, AXJNZ  LOOP_NUM;check AX is 0MOV  DX, BX      ;BX : start index of numberMOV  AH, 09HINT  21H RETDISP_NUM ENDPCODESEG ENDSEND START




0 0
原创粉丝点击