实验四 汇编语言高级编程专题
一. 实验目的
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
min3 macro x,y,z mov al,x mov bl,y mov cl,z cmp al,bl ;比较al,bl jae j1 ;bl
j5: mov ah,02h ;min bl mov dl,bl or dl,30h int 21h jmp done
done: mov ah,4ch int 21h endm
DATAS SEGMENT
;未定义数据段数据 DATAS ENDS
STACKS SEGMENT ;未定义栈段数据 STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS MOV DS,AX
min3 2,1,6 ;找出2 1 6三数中最小数
MOV AH,4CH INT 21H CODES ENDS
END START 2.
DATA SEGMENT OLDISR DW ?,? TIMER DB 100 COUNTER DW 0 ISDONE DB 0 DATA ENDS
STACKS SEGMENT ;未定义 STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATA,SS:STACKS
START:
MOV AX,DATA MOV DS,AX xor ax,ax MOV ES,AX xor cx,cx
MOV AX, ES:[1ch*4] MOV OLDISR[0],AX MOV AX,ES:[1ch*4+2] MOV OLDISR[2], AX
MOV WORD PTR ES:[1ch*4], OFFSET ISR MOV WORD PTR ES:[1ch*4+2],SEG ISR WAITHERE:
CMP ISDONE,1 JNZ WAITHERE EXIT:
MOV AX,OLDISR[0] MOV ES:[1ch*4],AX MOV AX,OLDISR[2]
MOV ES:[1ch*4+2],AX MOV AX,4C00H INT 21H
ISR PROC FAR PUSH DX PUSH AX
MOV AX,DATA MOV DS,AX STI
INC TIMER AGAIN:
mov ah,0bh int 21h or al,al jz j2
MOV AH,8 ;不显示输入的字符 INT 21H
CMP AL, 'a' JNE j2
MOV AH,2h MOV DL,10 INT 21H
MOV COUNTER,0 j2: CMP TIMER, 1000/55
JB DONE
MOV TIMER,0 MOV AH,2 MOV DL,13 INT 21H
j3: MOV AX,COUNTER MOV DL,10 DIV DL
MOV DH,AH MOV DL,AL MOV AH,2 ADD DL,30H INT 21H mov ah,2 mov dl,dh ADD DL,30H INT 21H
inc COUNTER cmp COUNTER,60 JNE DONE
MOV ISDONE,1 DONE: PUSHF
CALL DWORD PTR OLDISR CLI POP AX POP DX
IRET ;中断返回 ISR ENDP CODES ENDS
END START 3.
#include
char dbyte[]={0x34,0x45,0x56,0x67,0x67};
__asm{
mov esi,0 again: mov cl,4 ror dbyte[esi],4 inc esi cmp esi,5