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

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

一. 实验目的
1、掌握顺序和循环程序结构和设计方法;
2、熟悉在PC机上建立、汇编、连接、调试和运行8086/8088汇编语言程序的过程。

二. 实验内容
1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能:
①计算表达式值(V–(X*Y+Z-720))/X;
②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。
2、使用地址表实现如下功能:根据输入的数字1-7,分别显示相应的英文星期名,如果输入其他字符,则重新输入。
3、求一个班50名学生成绩的平均值、最大值和最小值,并将结果显示出来。
4、从键盘读入一个字符串,以Enter结束,字符串不超过60个字符,并打印该字符串;查找中间是否有自己名字拼音首字母缩写的子串。如果有,输出‘TRUE’;否则,输出‘FALSE’)。

设置的名字为pcy (彭陈宇)
三. 实验过程和程序
1、X、Y、Z、V均为字变量,在X、Y、Z、V字单元中存放是16位带符号数。试编写汇编语言程序完成以下功能:
①计算表达式值(V–(XY+Z-720))/X;(200-(4200+20-720))/4=25
②将上述表达式运算结果整数放在SUM1单元,余数放在SUM2单元。

stack	segment stack
	dw 		512 dup(?)
stack	ends
data		segment
x		dw 0004h
y		dw 00c8h
z		dw 0014h
v		dw 00c8h
sum1	dw ?
sum2	dw ?
data	ends
code	segment
	assume cs:code,ds:data
start:	mov ax,data
			mov ds,ax
			mov ax,x
			imul y
			mov cx,ax
			mov bx,dx
			mov ax,z
			cwd
			add cx,ax
			adc bx,dx
			sub cx,02d0h
			sbb bx,0
			mov ax,v
			cwd
			sub ax,cx
			sbb dx,bx
			idiv x
			mov sum1,ax
			mov sum2,dx
code	ends
			end start

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

stack	segment stack
		dw 512 dup(?)
stack	ends
data	segment
addrtable dw l1,l2,l3,l4,l5,l6,l7;
s1	db 'Monday$'
s2	db 'Tuesday$'
s3	db 'Wedensday$'
s4	db 'Thursday$'
s5	db 'Friday$'
s6	db 'Saturday$'
s7	db 'Sunday$'
msg	db 'number:',0dh,0ah,'$'

data	ends
code	segment
		assume cs:code, ds:data
start:	mov ax,data
		mov ds,ax
start1:	mov dx,offset msg
		mov ah,9
		int 21h
		mov ah,1
		int 21h
		cmp al,'1'
		jb start1
		cmp al,'7'
		ja start1
		and ax,000fh
		dec ax
		shl ax,1
		mov bx,ax
		jmp addrtable[bx]
l1:		lea dx,s1
		jmp displ
l2:		lea dx,s2
		jmp displ
l3:		lea dx,s3
		jmp displ
l4:		lea dx,s4
		jmp displ
l5:		lea dx,s5
		jmp displ
l6:		lea dx,s6
		jmp displ
l7:		lea dx,s7
		jmp displ

displ:	mov ah,9
		int 21h

 		mov dl, 0ah
       mov ah, 02h
       int 21h
       mov dl, 0dh
       mov ah, 02h
       int 21h

		mov ax,4c00h
		int 21h
code	ends
		end start

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

stack 	segment stack
		dw 512 dup(?)
stack 	ends
data 	segment
score	db 0ah dup(32h,3ch,46h,50h,5ah)
sum		dw ?
avg		db ?
minnum	db 127
maxnum	db -128
msg1	db 'avg: $ '
msg2	db 'max: $'
msg3	db 'min: $'

data	ends
code	segment
		assume cs:code,ds:data
start:	mov ax,data
		mov ds,ax
		mov ax,0h
		mov cx,0032h
		mov di,0h
again:	mov bl,score[di]
		add sum,bx
		inc di
		loop again
outavg:	mov ax,sum
		mov bl,32h
		div bl
		mov avg,al

		mov ax,0h
		mov si,0h
		mov cx,0032h
min:	mov al,score[si]
		cmp al,minnum
		jl outmin
		jmp minagain
outmin:	mov minnum, al
minagain:	inc si
		loop min                                                                                  
	
		mov ax,0h
		mov si,0h
		mov cx,0032h
max:	mov al,score[si]
		cmp al,maxnum
		jg outmax
		jmp maxagain
outmax:	mov maxnum,al
maxagain:inc si
		loop max		
displ:	
		mov dx,offset msg1
		mov ah,09h
		int 21h
		mov al,avg
    	cbw
    	mov cl,10
    	idiv cl
    	mov dl,al
    	mov cl,ah
    	add dl,30h
    	mov ah,02h
    	int 21h
    	mov ah,02h
    	mov dl,cl
    	add dl,30h
   		int 21h
    	mov dl,20h
    	int 21h
	
		mov dl, 0ah
       mov ah, 02h
       int 21h
       mov dl, 0dh
       mov ah, 02h
       int 21h

		mov dx,offset msg3
		mov ah,09h
		int 21h
		mov al,minnum
    	cbw
    	mov cl,10
    	idiv cl
    	mov dl,al
    	mov cl,ah
    	add dl,30h
    	mov ah,02h
    	int 21h
    	mov ah,02h
    	mov dl,cl
    	add dl,30h
   		int 21h
    	mov dl,20h
    	int 21h

		mov dl, 0ah
       mov ah, 02h
       int 21h
       mov dl, 0dh
       mov ah, 02h
      	int 21h

		mov dx,offset msg2
		mov ah,09h
		int 21h
		mov al,maxnum
    	cbw
    	mov cl,10
    	idiv cl
    	mov dl,al
    	mov cl,ah
    	add dl,30h
    	mov ah,02h
    	int 21h
    	mov ah,02h
    	mov dl,cl
    	add dl,30h
   		int 21h
    	mov dl,20h
    	int 21h

		mov ah,4ch
		int 21h
code	ends
		end start

4、从键盘读入一个字符串,以Enter结束,字符串不超过60个字符,并打印该字符串;查找中间是否有自己名字拼音首字母缩写的子串。如果有,输出‘TRUE’;否则,输出‘FALSE’)。

设置的名字为pcy  (彭陈宇)
stack 	segment stack
		dw 512 dup(?)
stack 	ends
data 	segment
data1	db 'pcy$'
data2	db 60,?,60 dup('$')
string1	db 'TURE$'
string2	db 'FALSE$'
data	ends
code	segment
		assume cs:code,ds:data
start:	mov ax,data
		mov ds,ax
		mov es,ax
	
		mov ah,0ah
		mov dx,offset data2
		int 21h

		mov ah,2h
		mov dl,0ah
		int 21h
		mov ah,2h
		mov dl,0dh
		int 21h

		mov dx,offset data2+2
		mov ah,09h
		int 21h

mov ah,2h
		mov dl,0ah
		int 21h
	
mov ah,2h
		mov dl,0dh
		int 21H

		mov si,offset data2
		mov di,offset data1
		mov dx,si
		mov bx,di
		mov ah,58

again:
		mov cx,3
		repz cmpsb
		jz yes
		add dx,1
		mov si,dx
		mov di,bx
		dec ah
		jnz again
		jmp no

no:	
mov dx,offset string2
		mov ah,09h
		int 21h
	
jmp endcode
yes:		mov dx,offset string1
		mov ah,09h
		int 21h
		jmp endcode
endcode: mov ax,4c00h
		int 21h
code	ends
		end start

下载完整实验报告,请移步下载区:
https://download.csdn.net/download/qq_43284141/11289139

你可能感兴趣的:(#,汇编语言)