(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开始计时,注释掉则从起一行继续旧时间计时