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

code ends end start

四. 实验结果(包括必要的截图) 第一题:

第二题:

第三题:

五. 实验体会

1.汇编没有易用的IO模块,在处理IO时应采用缓存方法。

2.函数可以通过栈传参数,但在调用函数前后要维持堆栈平衡。

实验四 宏与中断程序设计

一. 实验目的

1、汇编语言宏程序设计;

2、掌握中断服务子程序的编写。

二. 实验内容

1、编写一个宏,求三个数的最小数,原型为:MIN3 x,y,z,min 2、挂接1CH中断,正计时60秒后退出。要求屏幕显示0-59的秒数。 3、VC++中编写内联汇编,将字节数组的每个元素高低四位互换。 char dbyte[] = {0x34,0x45,0x56,0x67,0xaf};

三. 实验过程和程序 第一题:

MIN3 macro x, y, z, min local L1, L2 第二题:

INTNO EQU 1CH

DATA SEGMENT

OLDISR DW ?,? ; 记录原来的中断向量 TIMER DB 100

COUNTER DW 60 ; 60秒 ISDONE DB 0

; 标记,1 表示结束

push ax mov ax, x cmp ax, y jb L1 mov ax, y jb L2 mov ax, z pop ax

L1: cmp ax, z

L2: mov min, ax endm

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA START:

;WAIT HERE WAITHERE: CMP ISDONE,1 JNZ WAITHERE

EXIT: ;RESTORE

; 恢复中断向量表 CLI MOV AX,DATA MOV DS,AX MOV AX,0 MOV ES,AX ;PROTECT

; 保存 1CH 原有的中断向量 CLI

MOV AX, ES:[INTNO*4] MOV OLDISR[0],AX MOV AX,ES:[INTNO*4+2] MOV OLDISR[2], AX STI

;SET NEW ISR

; 挂接自己的中断过程 CLI

MOV WORD PTR ES:[INTNO*4], OFFSET ISR MOV WORD PTR ES:[INTNO*4+2],SEG ISR STI

MOV AX,OLDISR[0] MOV ES:[INTNO*4],AX MOV AX,OLDISR[2] MOV ES:[INTNO*4+2],AX STI

; 程序结束 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 MOV TIMER,0 ;carriage MOV AH,2 MOV DL,13 INT 21H ;print time mov dx, COUNTER mov ax, 60 sub ax, dx

; MOV AX,COUNTER