合肥工业大学 宣城校区 汇编语言实验

实验内容

通过对实验程序的编写、调试,使学生熟悉8086的指令系统等,了解程序设计过程,掌握汇编程序设计方法以及如何使用实验系统提供的各种调试、分析手段来排除程序错误。

实验一 数据传送

一、实验目的
熟悉8086汇编指令,能自己编写简单的程序,掌握数据传输的方法。

二、实验内容
编写程序,实现数据段的传送、校验。

三、程序框图

四、实验步骤
在DS段内3000H~30FFH中输入数据;使用单步、断点方式调试程序,检测DS段内6000H ~60FFH中的内容。熟悉查看特殊功能寄存器、CS段、DS段的各种方法。
五.程序清单

.MODEL	SMALL
		.STACK 100
		.DATA
CODE	SEGMENT
ASSUME	CS:CODE
STA:	MOV AX,@DATA
		MOV DS,AX
		MOV ES,AX
		NOP
		MOV CX,100H
		MOV SI,3000H
		MOV DI,6000H
		CALL T1
		MOV CX,100H
		MOV SI,3000H
		MOV DI,6000H
		CLD
		REPE CMPSB
		JMP $
T1		PROC NEAR
		CLD
		CMP SI,DI
		JZ Retu
		JNB T2
		ADD SI,CX
		DEC SI
		ADD DI,CX
		DEC DI
		STD
T2: 	REP MOVSB
Retu: 	RET
T1		ENDP
CODE	ENDS
		END STA

六、实验结果分析
在这里插入图片描述
在这里插入图片描述
在输入数据之后,运用单步、断点方式调试程序后,可以较为顺利地检测检测DS段内中的内容,在本次实验之中,已经大概熟悉了查看特殊功能寄存器、CS段、DS段的各种方法,经过这次实验,熟悉来8086汇编指令,能自己编写简单的程序,成功掌握数据传输的方法,有了不小的收获。

实验二 双字节BCD码(十进制数)减法

一、实验目的
熟悉8086汇编指令,掌握汇编语言的设计和调试方法。能画出程序流程框图,自己设计程序,熟悉BCD码、补码,了解如何调用系统提供的子程序。

二、实验内容
从键盘上输入4位被减数、减数,实现双字节BCD码(四位数)的减法,结果显示在数码管上;进一步熟悉使用断点、单步进入、单步、运行到光标处、修改PC指针、全速运行等各种调试手段;熟悉查看特殊功能寄存器、CS段、DS段存贮器的各种方法。

三、程序框图

四、实验步骤
首先从键盘上输入4位被减数、减数,然后通过运算实现双字节BCD码的减法,将结果显示;使用各种调试手段对程序进行调试;查看特殊功能寄存器。
五.程序清单

		.MODEL	SMALL
		.STACK 100
DATA	SEGMENT
REL	DB	5 DUP(0)
F1	DB	1
one	DB	8 DUP(?)
two	DW	1 DUP(?)
trd	DW	1 DUP(?)
DATA	ENDS
CODE	SEGMENT
ASSUME	CS:CODE,DS:DATA
STA1:	MOV	AX,DATA
		MOV	DS,AX
		MOV	ES,AX
		NOP
		MOV F1,0
STA2:	LEA	DI,two
		MOV	CX,4
		CALL	GK
		MOV	F1,1
		LEA	DI,trd
		MOV	CX,4
		CALL	GK
		MOV	AX,two
		MOV BX,trd
		MOV DL,10H
		CMP	AX,BX
		JNB	STA3
		XCHG	AX,BX
		MOV	DL,11H
STA3:	SUB	AL,BL
		DAS
		XCHG	AL,AH
		SBB	AL,BH
		DAS
		XCHG	AL,AH
		CLD
		LEA	DI,one
		CALL	B12
		MOV	AL,AH
		CALL	B12
		MOV AL,10H
		STOSB
		STOSB
		STOSB
		STOSB
		LEA SI,one+3
		MOV	CX,3
		CALL	BD
		LEA	SI,one
		MOV	AH,9
		INT	21H
		JMP	STA2
GK		PROC	NEAR
		MOV	REL+1,AL
		MOV	AX,DX
		MOV	DX,0
		MOV	BX,100
		DIV	BX
		MOV	REl+2,AL
		MOV	AX,DX
		MOV	DX,0
		MOV	BX,10
		DIV BX
		MOV	REl+3,AL
		MOV	REL+4,DL
		MOV	AH,4CH
		INT	21H
		RET
GK 		ENDP	
B12		PROC	NEAR
		PUSH	AX
		AND	AL,0FH
		STOSB
		POP	AX
		AND	AL,0F0H
		MOV CL,4
		ROR	AL,CL
		STOSB
		RET
B12 	ENDP
BD		PROC	NEAR
B1:		MOV	AL,[SI]
		CMP	AL,0
		JNZ	ET
		MOV	AL,10H
		MOV	[SI],AL
		DEC	SI
		LOOP	B1
ET:		CLD
		MOV	[SI+1],DL
		RET
BD		ENDP
CODE	ENDS
	END	STA1

六、实验结果分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
首先要得到减数和被减数,先判断减数和被减数之间的大小问题,判断之后,进行相应的处理,先将两数的低位进行相减,将结果转换为十进制,再将两数的高位进行相减,再将结果转换为十进制,将结果合并,再转换为BCD码,再转换为非压缩BCD码,显示结果。在本次实验中,进一步熟悉使用断点、单步进入、单步、运行到光标处、修改PC指针、全速运行等各种调试手段;对查看特殊功能寄存器、CS段、DS段存贮器的各种方法更熟悉。

实验三 四字节十六进制数转十进制数

一、实验目的
进一步熟悉8086汇编指令,了解十六进制数转十进制数的方法。

二、实验内容
从键盘上输入8位十六进制数,实现四字节十六进制数转8位十进制数,并在数码管上显示。注意输入数据必须在00000000H~05F00000H范围,否则,结果超出8位十进制数,无法正确显示。

三、程序框图

四、实验步骤
从键盘上输入8位十六进制数,实现四字节十六进制数转8位十进制数,在数码管上显示。
五.程序清单

		.MODEL	SMALL
		.STACk	100
DATA	SEGMENT
REL	DB	5 DUP(0)
F1	DB	1
BUF	DB	8 DUP(?)
DATA	ENDS
CODE	SEGMENT
ASSUME	CS:CODE,DS:DATA
STA1:	MOV	AX,DATA
		MOV	DS,AX
		MOV	ES,AX
		NOP
		MOV	F1,0
STA2:	LEA	DI,BUF
		MOV	CX,8
		CALL	GK
		MOV	F1,1
		MOV	SI,WORD	PTR	BUF
		MOV	DI,WORD	PTR	BUF+2
		CALL	BD4
		LEA	DI,BUF
		CALL	BB2
		MOV	AL,AH
		CALL	BB2
		MOV	AL,BL
		CALL	BB2
		MOV	AL,BH
		CALL	BB2
		LEA	SI,BUF+7
		MOV	CX,7
		CALL	BD
		LEA	SI,BUF
		MOV	AH,9
		INT	21H
		JMP	STA2
GK		PROC	NEAR
		MOV	REL+1,AL
		MOV	AX,DX
		MOV	DX,0
		MOV	BX,100
		DIV	BX
		MOV	REl+2,AL
		MOV	AX,DX
		MOV	DX,0
		MOV	BX,10
		DIV BX
		MOV	REl+3,AL
		MOV	REL+4,DL
		MOV	AH,4CH
		INT	21H
		RET
GK		ENDP
BB2		PROC	NEAR
		PUSH	AX
		AND	AL,0FH
		STOSB
		POP	AX
		AND	AL,0F0H
		MOV CL,4
		ROR	AL,CL
		STOSB
		RET
BB2		ENDP
BD		PROC	NEAR
		STD
		MOV	DI,SI
BD1:	LODSB
		CMP	AL,0
		JNZ	ET
		MOV	AL,10H
		STOSB
		LOOP	BD1
ET:		CLD
		RET
BD		ENDP
BD4		PROC	NEAR
		XOR	AX,AX
		XOR	BX,BX
		MOV	CX,32
BD41:	RCL	SI,1
		RCL	DI,1
		ADC	AL,AL
		DAA
		XCHG	AL,AH
		ADC	AL,AL
		DAA
		XCHG	AL,BL
		ADC	AL,AL
		DAA
		XCHG	AL,BH
		ADC	AL,AL
		DAA
		XCHG	AL,BH
		XCHG	AL,BL
		XCHG	AL,AH
		LOOP	BD41
		RET
BD4		ENDP
CODE	ENDS
	END	STA1

六、实验结果分析

从外部获得十六进制数,再将其转换为十进制数,在数码管上显示,只要注意十六进制数的输入问题即可,经过本次实验,我进一步熟悉8086汇编指令,了解十六进制数转十进制数的方法,对于汇编有了更深的理解。

实验四 冒泡排序

一、实验目的
熟悉使用8086指令,掌握汇编语言的设计和调试方法,了解如何使用高效方法对数据排序。

二、实验内容
编写并调试一个排序程序,要求使用冒泡法将一组数据从小到大重新排列。

三、程序框图

四、实验步骤
使用断点方式调试程序,检查数据段中数据是否按从小到大的顺序排列。
五.程序清单

		.MODEL	SMALL
		.STACK	100
DATA	SEGMENT
T1	DB	3H,5H,6H,2H,9H,35H,04H,57H,62H,07H,0FFH,0A0H,43H,99H,52H,89H
DATA	ENDS
CODE	SEGMENT
ASSUME	CS:CODE,DS:DATA
STA1:	MOV	AX,DATA
		MOV	DS,AX
		NOP
		MOV	CX,15
STA2:	PUSH	CX
		LEA	SI,T1
		MOV	DL,0
STA3:	LODSB
		MOV	AH,[SI]
		CMP	AH,AL
		JNB	STA4
		MOV	[SI],AL
		MOV	[SI-1],AH
		MOV	Dl,1
STA4:	LOOP	STA3
		POP	CX
		CMP	DL,0
		JZ	ET
		LOOP	STA2
ET:		JMP	$
CODE	ENDS
		END	STA1

六、实验结果分析

本次实验是编写一个冒泡排序的程序,用冒泡法将一组数据从小到大排列,在本次实验之中,我再一次熟悉使用8086指令,掌握更多的汇编语言的设计和调试方法,了解了如何使用高效方法对数据排序,对汇编语言有了更深的理解。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的数据,我们可以计算安徽省各区域的泰尔系数(Tg)。首先,我们需要计算每个区域的常住人口数和药品检验检测资源拥有量的累计百分比。 以下是每个区域的常住人口数占安徽省总常住人口的百分比(Pi): 皖中地区:合肥市 - 15.49%,滁州市 - 6.52%,六安市 - 7.20%,安庆市 - 6.82% 皖北地区:淮北市 - 3.23%,亳州市 - 8.16%,宿州市 - 8.72%,蚌埠市 - 5.43%,阜阳市 - 13.38%,淮南市 - 4.98% 皖南地区:马鞍山市 - 3.53%,芜湖市 - 6.00%,宣城市 - 4.07%,铜陵市 - 2.14%,池州市 - 2.18%,黄山市 - 2.18% 以下是每个区域的药品检验检测资源拥有量占安徽省总的药品检验检测资源拥有量的百分比(Yi): 皖中地区:合肥市 - 0.17%,滁州市 - 0.12%,六安市 - 0.06%,安庆市 - 0.12% 皖北地区:淮北市 - 0.08%,亳州市 - 0.08%,宿州市 - 0.18%,蚌埠市 - 0.14%,阜阳市 - 0.10%,淮南市 - 0.10% 皖南地区:马鞍山市 - 0.06%,芜湖市 - 0.08%,宣城市 - 0.07%,铜陵市 - 0.12%,池州市 - 0.07%,黄山市 - 0.07% 根据以上数据,我们可以使用以下代码计算每个区域的泰尔系数(Tg): ```python import numpy as np # 示例数据:每个区域的常住人口数占安徽省总常住人口的百分比(Pi) Pi = np.array([15.49, 6.52, 7.20, 6.82, 3.23, 8.16, 8.72, 5.43, 13.38, 4.98, 3.53, 6.00, 4.07, 2.14, 2.18, 2.18]) # 示例数据:每个区域的药品检验检测资源拥有量占安徽省总的药品检验检测资源拥有量的百分比(Yi) Yi = np.array([0.17, 0.12, 0.06, 0.12, 0.08, 0.08, 0.18, 0.14, 0.10, 0.10, 0.06, 0.08, 0.07, 0.12, 0.07, 0.07]) # 计算泰尔系数 Tg = np.sum((Pi / Yi) * np.log(Pi / Yi)) print("安徽省各区域的泰尔系数(Tg):", Tg) ``` 请注意,示例代码中使用的数据仅供参考,你需要根据实际数据进行计算。如果你有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值