(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. 实验过程和程序
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 题1程序运行截图②
图 3 题2程序运行截图①
图 4 题2程序运行截图②
图 5 题2程序运行截图③
图 6 题3程序运行截图①
图 7 题3程序运行截图②
图 8 题3程序运行截图③
图 9 题3程序运行截图④
题3直接用的老师的代码,对着看勉强看懂。
原文:https://www.cnblogs.com/25th-engineer/p/10809841.html