目录
实验三 中断和子程序设计
1. 实验目的
(1)掌握子程序、宏和中断程序的设计方法;
(2)熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。
2. 实验内容
(1)编写一个子程序计算z=f(x,y)=x/y+x-y(x,y,z有符号数内存字数)。要求通过堆栈传送输入参数,输出参数通过AX传递。(要求输入输出实现,且有提示)。
(2) 编写一个宏,求三个数的最大数,原型为:MAX3 x,y,z,min,最大值要求输出。
(3) 挂接1CH中断,正计时90秒后退出。要求屏幕显示0-89的秒数。
3. 实验过程和程序
;the source code of the Exp 3.1
stack segment stack
db 512 dup(?)
stack ends
data segment
input1 db "input x:",0ah,0dh,'$'
input2 db "input y:",0ah,0dh,'$'
input db 8
db 1 dup(?)
db 8 dup(?)
sign db 0
x dw 0
y dw 0
z dw 0
data ends
code segment
assume ds: data, cs: code
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
lea dx, input1
mov ah, 09h
int 21h
lea dx, input
mov ah, 0ah
int 21h
mov dl, 0ah
mov ah, 02h
int 21h
mov dl, 0dh
mov ah, 02h
int 21h
mov ax, 0
xor cx, cx
mov cl, [input+1]
lea si, [input+2]
mov byte ptr [sign], 0
cmp byte ptr[si], '-'
jnz next1
inc si
dec cx
mov byte ptr [sign], 1
next1:
mov ax, 0
loop1:
mov bx, 10
mul bx
xor bx, bx
mov bl, [si]
sub bl, '0'
add ax, bx
inc si
loop loop1
cmp byte ptr [sign], 1
jnz next2
xor bx, bx
sub bx, ax
mov ax, bx
next2:
mov [x], ax
lea dx, input2
mov ah, 09h
int 21h
mov byte ptr [input], 8
lea dx, input
mov ah, 0ah
int 21h
mov dl, 0ah
mov ah, 02h
int 21h
mov dl, 0dh
mov ah, 02h
int 21h
mov ax, 0
xor cx, cx
mov cl, [input+1]
lea si, [input+2]
mov byte ptr [sign], 0
cmp byte ptr [si], '-'
jnz next5
inc si
dec cx
mov byte ptr [sign], 1
next5:
mov ax, 0
loop2:
mov bx, 10
mul bx
xor bx, bx