汇编语言上机实验三:中断和子程序设计

实验三 中断和子程序设计

 

  1. 实验目的

  (1)掌握子程序、宏和中断程序的设计方法;

  (2)熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

  2. 实验内容

  (1)编写一个子程序计算z=f(x,y)=x/y+x-yx,y,z有符号内存字数)。要求通过堆栈传送输入参数,输出参数通过AX传递。(要求输入输出实现,且有提示)

  (2) 编写一个宏,求三个数的最大数,原型为:MAX3 x,y,z,min,最大值要求输出。

  (3) 挂接1CH中断,正计时90秒后退出。要求屏幕显示0-89的秒数。

  3. 实验过程和程序

 

  1 ;the source code of the Exp 3.1
  2 stack   segment stack
  3         db 512 dup(?)
  4 stack   ends
  5 
  6 data segment
  7         input1 db "input x:",0ah,0dh,'$'
  8         input2 db "input y:",0ah,0dh,'$'
  9         input db 8
 10         db 1 dup(?)
 11         db 8 dup(?)
 12         sign db 0
 13         x dw 0
 14         y dw 0
 15         z dw 0
 16         data ends
 17     
 18 code segment
 19         assume ds: data, cs: code
 20 start:
 21         mov ax, data
 22         mov ds, ax
 23         mov ax, stack
 24         mov ss, ax
 25     
 26         lea dx, input1
 27         mov ah, 09h
 28         int 21h
 29     
 30         lea dx, input
 31         mov ah, 0ah
 32         int 21h
 33     
 34         mov dl, 0ah
 35         mov ah, 02h
 36         int 21h
 37     
 38         mov dl, 0dh
 39         mov ah, 02h
 40         int 21h
 41     
 42         mov ax, 0
 43         xor cx, cx
 44         mov cl, [input+1]
 45         lea si, [input+2]
 46         mov byte ptr [sign], 0
 47         cmp byte ptr[si], '-'
 48         jnz next1
 49         inc si
 50         dec cx
 51         mov byte ptr [sign], 1
 52 next1:
 53     mov ax, 0
 54 loop1:
 55         mov bx, 10
 56         mul bx
 57         xor bx, bx
 58         mov bl, [si]
 59         sub bl, '0'
 60         add ax, bx
 61         inc si
 62         loop loop1
 63     
 64         cmp byte ptr [sign], 1
 65         jnz next2
 66         xor bx, bx
 67         sub bx, ax
 68         mov ax, bx
 69     
 70 next2:
 71         mov [x], ax
 72     
 73         lea dx, input2
 74         mov ah, 09h
 75         int 21h
 76     
 77         mov byte ptr [input], 8
 78         lea dx, input
 79         mov ah, 0ah
 80         int 21h
 81     
 82         mov dl, 0ah
 83         mov ah, 02h
 84         int 21h
 85     
 86         mov dl, 0dh
 87         mov ah, 02h
 88         int 21h
 89     
 90     
 91     
 92         mov ax, 0
 93         xor cx, cx
 94         mov cl, [input+1]
 95         lea si, [input+2]
 96         mov byte ptr [sign], 0
 97         cmp byte ptr [si], '-'
 98         jnz next5
 99         inc si
100         dec cx
101         mov byte ptr [sign], 1
102 next5:
103         mov ax, 0
104 loop2:
105         mov bx, 10
106         mul bx
107         xor bx, bx
108         mov bl, [si]
109         sub bl, '0'
110         add ax, bx
111         inc si
112         loop loop2
113     
114         cmp byte ptr[sign], 1
115         jnz next4
116         xor bx, bx
117         sub bx, ax
118         mov ax, bx
119     
120 next4:
121         mov word ptr[y], ax
122         
123         
124         mov ax, word ptr[x]
125         push ax
126         mov ax, word ptr[y]
127         push ax
128         call f
129         add sp, 4
130         mov word ptr [z], ax  ; 保存结果
131         
132         mov ax, word ptr[z]
133         cmp word ptr[z], 0
134         jge skip2
135         mov dl, '-'
136         mov ah, 02h
137         int 21h
138         mov ax, 0
139         sub ax, word ptr [z]
140 skip2:    
141         cmp ax, 0
142         jne skip1
143         push ax
144         mov cx, 1
145         jmp next3_end
146 skip1:
147         mov cx, 0
148 next3:
149         cmp ax, 0
150         je next3_end
151         mov dl, 10
152         div dl
153         xor bx, bx
154         mov bl,ah
155         push bx
156         mov ah, 0
157         inc cx
158         jmp next3
159     
160 next3_end:
161         xor dx, dx
162         pop dx
163         add dl, 48
164         mov ah, 02h
165         int 21h
166         loop next3_end
167         
168         mov ah, 4ch
169         int 21h
170 f:
171         push bp
172         mov bp, sp
173         mov bx, [bp+6]   ; x
174         mov cx, [bp+4]   ; y
175         mov dx, bx
176         sub dx, cx        ; x-y
177         mov ax, bx
178         mov si, dx
179         cwd
180         idiv cx
181         add ax, si
182         mov sp, bp
183         pop bp
184         ret
185 code ends
186         end start

 

四. 实验结果(包括必要的截图)

图 1程序运行截图

 

图 1程序运行截图

 

图 2程序运行截图

 

图 2程序运行截图

  

图 2程序运行截图③

图 3程序运行截图

图 3程序运行截图

 

图 3程序运行截图③

 

 

图 3程序运行截图④

 

  4. 实验体会

  3直接用的老师的代码,对着看勉强看懂。 

猜你喜欢

转载自www.cnblogs.com/25th-engineer/p/10809841.html