内容发布更新时间 : 2024/12/23 22:11:34星期一 下面是文章的全部内容请认真阅读。
lea dx,s4 jmp output l5: lea dx,s5 jmp output l6: lea dx,s6 jmp output l7: 2.
Data segment x dw 1 y dw 2 z dw 0
Data ends Code segment
assume cs:code, ds:data start: mov ax,data mov ds,ax sub sp,4 push y push x call f pop z mov ah,4ch int 21h
f proc near push bp mov bp,sp
四. 实验结果 1.
地址表方法:
lea dx,s7 jmp output output: mov ah,9h int 21h mov ah,4ch int 21h Code ends
end start
push si push dx push cx push bx push ax mov ax,[bp+4] mov cx,ax mov bx,[bp+6] imul bx mov si,0 add ax,cx adc dx,si mov si,0 sub ax,bx sbb dx,si mov [bp+8],ax mov [bp+10],dx ret 4 f endp Code ends
end start
BL中存储的数为: 10h 输出结果为: The 4 bit is 1. 转移表方法:
BL中存储的数为: 80h 输出结果为: The 7 bit is 1. 2.
五. 实验体会
通过本次试验,掌握了分支和子程序结构和设计方法;实现了转移表以及地址表的创建及调用,以及几种参数传递的方式,进一步熟悉了在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
实验四 汇编语言高级编程专题
一. 实验目的
1、汇编语言宏程序设计;
2、 掌握中断服务子程序的编写。 3、 汇编语言与高级语言的混编。
二. 实验内容
1、编写一个宏,求三个数的最小数,原型为:MIN3 x,y,z,min 2、挂接1CH中断,正计时60秒后退出。要求屏幕显示0-59的秒数。 三. 实验过程和程序 1.
MIN3 macro x,y,z,min mov al,x mov bl,y mov cl,z cmp al,bl jc l1 cmp bl,cl jc l2 mov min,cl jmp exit l1: cmp al,cl jc l3 mov min,cl jmp exit l2: mov min,bl jmp exit l3: mov min,al
exit: endm
Data segment x db 03h y db 02h z db 01h min db ?
Data ends Code segment
assume cs:code, ds:data start: mov ax,data mov ds,ax MIN3 x,y,z,min add min,30h mov dl,min mov ah,02h
int 21h mov ah,4ch int 21h
2.
INTNO EQU 1CH USEINT = 59 DATA SEGMENT OLDISR DW ?,? TIMER DB 100 COUNTER DW 60 ISDONE DB 0 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:
MOV AX,DATA MOV DS,AX
MOV AX,0 MOV ES,AX
;PROTECT IF USEINT MOV AL, INTNO MOV AH,35H INT 21H ;ES:BX
MOV OLDISR[0], BX MOV AX,ES
MOV OLDISR[2], AX ELSE CLI
MOV AX, ES:[INTNO*4] MOV OLDISR[0],AX MOV AX,ES:[INTNO*4+2]
Code ends end start
MOV OLDISR[2], AX STI ENDIF
;SET NEW ISR IF USEINT PUSH DS
MOV AX, SEG ISR MOV DS,AX
MOV DX, OFFSET ISR MOV AL, INTNO MOV AH, 25H INT 21H POP DS ELSE CLI
MOV WORD PTR ES:[INTNO*4], OFFSET ISR MOV
WORD
PTR
ES:[INTNO*4+2],SEG ISR STI ENDIF
;WAIT HERE WAITHERE: CMP ISDONE,1 JNZ WAITHERE
EXIT: ;RESTORE IF USEINT PUSH DS
MOV DX,OLDISR[0] MOV AX,OLDISR[2] MOV DS,AX MOV AL, INTNO MOV AH, 25H INT 21H POP DS ELSE CLI
MOV AX,OLDISR[0] MOV ES:[INTNO*4],AX MOV AX,OLDISR[2] MOV ES:[INTNO*4+2],AX STI ENDIF
MOV AX,4C00H INT 21H ISR PROC FAR PUSH DX PUSH AX
MOV AX,DATA MOV DS,AX
STI ;便于中断嵌套 ;COUNT HERE INC TIMER AGAIN:
CMP TIMER, 1000/55 ;18 JB DONE
四. 实验结果 1.
输入:x,y,z分别是03h 02h 01h 输出:1
MOV TIMER,0
;carriage MOV AH,2 MOV DL,13 INT 21H
;print time MOV AX,COUNTER MOV DL,10 DIV DL MOV DH,AH MOV DL,AL MOV AH,2 ADD DL,30H INT 21H MOV DL,DH ADD DL,30H INT 21H
DEC COUNTER JGE DONE MOV ISDONE,1 DONE:
PUSHF
CALL DWORD PTR OLDISR CLI POP AX POP DX
IRET ;中断返回 ISR ENDP CODE ENDS END START