第2题堆栈截图
第2题寄存器截图
五. 实验体会
在这一次的实验当中,我学到了地址表以及转移表的应用,同时也学到了子程序的使用。
实验四 汇编语言高级编程专题
一. 实验目的
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 macro x,y,z,min
code segment
assume cs:code,ds:data
start: mov ax,data
mov ax,x cmp ax,y jl next0 mov ax,y jl down0 mov ax,z
mov min,ax endm x dw 13 y dw 15 z dw 16 min dw ?
next0: cmp ax,z
down0:
data segment
data ends
mov ds,ax
MIN3 x,y,z,min
mov bx,min mov ch,4 mov cl,4
rol bx,cl mov al,bl and al,0fh cmp al,0ah jl next
add al,37h ;\jmp down
add al,30h ;\mov dl,al
again:
next: 2.
down:
mov ah,2 int 21h dec ch jnz again
mov ah,4ch int 21h end start
code ends
;汇编 挂接1CH中断,正计时60秒后退出 DATA SEGMENT
OLDISR DW ?,? TIMER DB 100 COUNTER DW 0 ISDONE DB 0
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA MOV DS,AX MOV AX,0 MOV ES,AX CLI
START: MOV AX,DATA
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 STI
DELAY:CMP ISDONE,1 JNZ DELAY CLI
MOV AX,OLDISR[0] ; 恢复原中断向量 MOV ES:[1CH*4],AX MOV AX,OLDISR[2] MOV ES:[1CH*4+2],AX STI
MOV AH,4CH INT 21H
ISR PROC FAR
PUSH DX PUSH AX MOV AX,DATA MOV DS,AX STI
INC TIMER ; 执行新中断处理 CMP TIMER,1000/55 JB DONE MOV TIMER,0 MOV AH,2
MOV DL,0DH
;设置新中断向量