合工大汇编语言程序设计实验报告 下载本文

(2)寄存器传递参数(结果在ax中查看)

(3)内存传递参数(结果在ax中查看)

五、实验体会

通过本实验,让我更加深入了解地址表和转移表、子程序和从C输出汇编文件等知识,

通过实现地址表与转移表加深了对汇编寻址方式的了解;实现子程序,掌握主程序如何调用子程序,及子程序与主程序之间的参数传递方式;用VS实现C->ASM后,对C或C++有了新的认识。

实验四 汇编语言高级编程专题

一. 实验目的

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

2、 掌握中断服务子程序的编写。 3、 汇编语言与高级语言的混编。

二. 实验内容

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

三. 实验过程和程序

1. 编写一个宏,求三个数的最小数,原型为:MIN3 x,y,z,min

min3 macro x,y,z,min mov ax,x cmp ax,y jbe next mov ax,y cmp ax,z jbe done next: cmp ax,z jbe done done: mov min,ax endm

DATAS SEGMENT x dw 2 y dw 4 z dw 3 min dw ? DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS START:

MOV AX,DATAS MOV DS,AX min3 x,y,z,min MOV AH,4CH INT 21H CODES ENDS END START

2、挂接1CH中断,正计时60秒后退出。要求屏幕显示0-59的秒数。

INTNO EQU 1CH DATA SEGMENT OLDISR DW ?,? TIMER DB 100 COUNTER DW 0 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 xor cx,cx

;PROTECT

MOV AX, ES:[INTNO*4] MOV OLDISR[0],AX MOV AX,ES:[INTNO*4+2] MOV OLDISR[2], AX ;SET NEW ISR

MOV WORD PTR ES:[INTNO*4], OFFSET ISR MOV WORD PTR ES:[INTNO*4+2],SEG ISR ;WAIT HERE WAITHERE: CMP ISDONE,1 JNZ WAITHERE EXIT: ;RESTORE

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

MOV ES:[INTNO*4+2],AX MOV AX,4C00H INT 21H ISR PROC FAR PUSH DX PUSH AX MOV AX,DATA MOV DS,AX

STI ;便于中断嵌套 INC TIMER

;--------判断是否输入a----------- mov ah,0bh int 21h or al,al jz next

MOV AH,8;不显示输入的字符

INT 21H CMP AL,'a' JNE next

MOV AH,2;换行 MOV DL,10 INT 21H

;MOV COUNTER,0 ;从起一行计时时从0开始计时,注释掉则从起一行继续旧时间计时