汇编语言实验报告5574277 下载本文

内容发布更新时间 : 2024/11/1 6:55:03星期一 下面是文章的全部内容请认真阅读。

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