汇编语言程序设计实验二 (顺序、多分支、循环)

实验二  汇编语言程序设计(顺序、多分支、循环)

一. 实验目的

  1、掌握顺序和循环程序结构和设计方法;

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

二. 实验内容

  1XYZV均为字变量,在XYZV字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能:

  ①计算表达式值(V–(X*Y+Z-720))/X

  ②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。

  2、使用地址表实现如下功能:根据输入的数字17,分别显示相应的英文星期名,如果输入其他字符,则重新输入。

  3、求一个班50名学生成绩的平均值、最大值和最小值,并将结果显示出来。

  4、从键盘读入一个字符串,以Enter结束,字符串不超过50个字符,并打印该字符串;查找中间是否有‘masm’子串。如果有,输出‘Yes’;否则,输出‘No) 

三. 实验过程和程序

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

 

 1 ;the source code of the Exp 2.2
 2 stack   segment stack
 3         db 512 dup(?)
 4 stack   ends
 5 
 6 data    segment
 7         address dw l1, l2, l3, l4, l5, l6, l7
 8         s1 db 'Monday $'
 9         s2 db 'Tuesday $'
10         s3 db 'Wednesday $'
11         s4 db 'Thursday$'
12         s5 db 'Friday$'
13         s6 db 'Startday$'
14         s7 db 'Sunday$'
15         input db 'Please input a number between 1 to 7:',0ah,0dh,'$'
16 data    ends
17         
18 code    segment 'code'
19         assume cs: code, ds: data, ss: stack
20 start:  
21         mov ax, data
22         mov ds, ax
23         mov ax, stack
24         mov ss, ax
25 start1: 
26         lea dx, input
27         mov ah, 09h
28         int 21h
29     
30         mov ah, 01h
31         int 21h
32     
33         mov bl, al
34     
35         mov dl, 0ah
36         mov ah, 02h
37         int 21h
38     
39         mov dl, 0dh
40         mov ah, 02h
41         int 21h
42     
43         mov al, bl
44         sub al, '0'
45         cmp al, 1
46     
47     
48         jb start1
49         cmp al,7
50         ja start1
51     
52         dec al
53         mov ah, 0
54         mov bx,ax
55         shl bx, 1
56         jmp address[bx]
57 
58 l1:
59         lea dx,s1
60         jmp s
61 l2:
62         lea dx, s2
63         jmp s
64 l3:
65         lea dx, s3    
66         jmp s
67 l4:
68         lea dx, s4
69         jmp s
70 l5:
71         lea dx, s5
72         jmp s
73 l6:
74         lea dx, s6
75         jmp s
76 l7:
77         lea dx, s7
78 s:
79         mov ah, 09h
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         mov ah, 4ch
91         int 21h
92 
93 code ends
94         end start

 

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

 

 1 ;the source code of the Exp 2.4
 2 stack   segment stack
 3         db 512 dup(?)
 4 stack   ends
 5 
 6 data    segment
 7         data2 db 50, ?, 50 dup('$')
 8         string db 'yes', 0ah, 0dh, '$'
 9         string1 db 'no', 0ah, 0dh, '$'
10 data    ends
11 
12 
13 code segment 
14         assume cs: code, ds: data, ss: stack
15 start: 
16         mov ax, data
17         mov ds, ax
18         mov ax, stack
19         mov ss, ax
20     
21         mov ah, 0ah
22         mov dx, offset data2
23         int 21h
24     
25         mov ah, 02h
26         mov dl, 0ah
27         int 21h
28     
29         mov ah, 02h
30         mov dl, 0dh
31         int 21h    
32     
33 
34         mov dx, offset data2+2
35         mov ah, 09h
36         int 21h
37     
38         mov ah, 02h
39         mov dl, 0ah
40         int 21h
41     
42         mov ah, 02h
43         mov dl, 0dh
44         int 21h    
45     
46         mov al, 0h
47         mov cx, 47
48         mov di, 0
49 again: 
50         mov al, [ di + 2 ]
51         cmp al, 61h
52         jnz next
53         mov al, [ di + 3] 
54         cmp al, 73h
55         jnz next
56         mov al, [ di + 4 ]
57         cmp al, 6dh
58         jnz next
59         jmp yes
60 
61     
62 next: 
63         add di, 1
64         loop again
65         mov dx, offset string1
66         mov ah, 09h
67         int 21h
68         jmp endcode
69 yes:        
70         mov dx, offset string
71         mov ah, 09h
72         int 21h
73 endcode:   
74         mov ax, 4c00h
75         int 21h
76        
77 code ends
78         end start

 

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

 

 

图 2.1运行截图

 

图 2.1运行截图

 

图 2.2运行截图

 

图 2.2运行截图

 

图 2.3运行截图

 

图 2.3运行截图

 

 

图 2.4运行截图

 

图 2.4运行截图

 

  四.实验体会

  汇编太难了,这四个题目如果不查资料一个都弄不出来。上课听得很过瘾,下课啥也不会做。

 

  注:模仿是最深的爱慕

posted on 2019-05-04 20:38  25th_engineer  阅读(1243)  评论(0编辑  收藏  举报