8086汇编中断入门

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

;2.编写一中断服务程序,中断类型号取76H,中断服务程序完成将AL和BL中存放的非压缩型BCD码相加,并将相加结果在屏幕上显示出来。
;先开辟存放两个非压缩性BCD码的DB类型的数据区 DATA,进入程序再读进来
DATASEG SEGMENT
		DATA   DB  06H,09H
		OBUF   DB  06H DUP (?) ; 
DATASEG ENDS
STACKSEG SEGMENT stack
		StatckSeg DW  40  DUP(?)
		StackTop  EQU  LENGTH StatckSeg
STACKSEG ENDS
CODESEG 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, AX
					MOV  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, AX
					MOV   	AX, StackTop                 ; copy stack pointer top SP
					MOV  	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_NUM
					RET
	    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: @brt

		DISP_NUM PROC NEAR
					MOV  	BX, OFFSET OBUF+6-1
					MOV  	BYTE PTR [BX],'$'
					MOV  	CX, 0AH			;
			LOOP_NUM:						;just like do{....}while(ax != 0)
					MOV		DX, 00H			  
					DIV  	CX
					ADD  	DL, 30H			;number value convert to ASCII
					DEC  	BX
					MOV  	[BX], DL
					OR   	AX, AX
					JNZ  	LOOP_NUM		;check AX is 0			
					MOV  	DX, BX      	;BX : start index of number
					MOV  	AH, 09H
					INT  	21H
			 		RET
		DISP_NUM ENDP
CODESEG ENDS
		END START




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值