微机接口技术与汇编语言上机实验报告_汇编初步(intel8086)

本文通过几个具体的例子介绍了8086汇编语言的基本操作,包括内存初始化、数据复制、字符串输出等。首先展示了如何在特定内存位置填充数值,接着演示了两种方法来复制内存区域的数据,并且给出了利用DOS接口输出字符串的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文出自:blog.youkuaiyun.com/svitter

实验环境:intel x386

 

一。要求:将3000H单元开始置数为00H-0FH

SSTACK	SEGMENT STACK
	  	DW 32 DUP(?)
SSTACK	ENDS

CODE	SEGMENT
		ASSUME CS:CODE, SS:SSTACK
START:	PUSH DS
	XOR AX, AX
	MOV DS, AX
	MOV SI, 3000H
	MOV CX, 16
AA1:	MOV [SI], AL
	INC SI
	INC AL
	LOOP AA1 		;CX == 0? NEXT():AA1
	MOV AX, 4C00H	;AH = 4C STOP CUR, RETURN
	INT 21H
CODE 	ENDS
	END START


 二。要求:将3500H后8位置入3600H开始的8位

有两种解法

1.

SSTACK 	SEGMENT STACK
		DW 32 DUP(?)
SSTACK 	ENDS

CODE	SEGMENT
		ASSUME CS:CODE, SS:SSTACK
START:	PUSH DS
	XOR AX, AX		;SET AX = 0000H
	MOV DS, AX
	CLD				;CLOSE INTERUPTE
	MOV SI, 3500H
	MOV BX, 3600H
	MOV CX, 8		;FOR LOOP
AA1:	MOV AL, [SI]		;REP MOVSB 	;DS:[SI] -> ES:[DI], SI+1, DI+1
	MOV [BX], AL
	INC SI
	INC BX
	LOOP AA1		;CX == 0 ? NEXT() : AA1
	MOV AX, 4C00H
	INT 21H
CODE 	ENDS
	END START

2.

SSTACK 	SEGMENT STACK
		DW 32 DUP(?)
SSTACK 	ENDS

CODE	SEGMENT
		ASSUME CS:CODE, SS:SSTACK
START:	PUSH DS
	XOR AX, AX		;SET AX = 0000H
	MOV DS, AX
	CLD			;CLOSE INTERUPTE
	MOV ES, AX
	MOV SI, 3500H
	MOV DI, 3600H
	MOV CX, 8		;FOR LOOP
	REP	MOVSB 		;DS:[SI] -> ES:[DI], SI+1, DI+1
	MOV AX, 4C00H
	INT 21H
CODE 	ENDS
		END START


 

 三。要求:将数据段中的str1赋给str2

 

DATA SEGMENT
	STR1 DB 'ABCDEFGHIJKLN'
	COUNT EQU $-STR1				;$的值表示count的偏移地址, 而str1是BUF所占用的字节数
	STR2 DB COUNT DUP(0)
DATA ENDS
SSTACK SEGMENT STACK				;!!--DEF--!汇编程序发现这是堆栈段,执行的时候会直接使SSTACK -> SS
		DB 200H DUP(0)
SSTACK ENDS

CODE SEGMENT
	ASSUME DS:DATA, ES:DATA, SS:SSTACK, CS:CODE	
	;DATA(DATA SEGMENT)
	;ES(EXTRA DATA SEGMENT)
	;SSTACK -> SS(STACK SEGMENT)
	;CODE -> CS(CODE SEGMENT)
START:
	MOV	AX, DATA
	MOV DS, AX
	MOV ES, AX
	LEA SI, STR1
	LEA DI, STR2		
	MOV CX, COUNT
	CLD							;Direction Flag to 0 (0 -> DF)
LP1:	MOVSB						;DS:[SI] -> ES:[DI], SI++, DI++ 
	DEC CX						;
	JNZ LP1 					;THREE SENTENCE == REP MOVESB, CX FOR COUNT
	MOV AH, 4CH					;MOV AX, 4C00H
	INT 21H
CODE	ENDS
	END START                              
		                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       


 二。要求:将3500H后8位置入3600H开始的8位

 


 四。要求:使用DOS接口输出一段字符串

DATA SEGMENT
	MESSAGE DB 'please input your name!' , 0DH, 0AH, '$'
DATA ENDS
CODE SEGMENT
START:	MOV AH, 09H
	MOV DX, SEG MESSAGE
	MOV DS, DX
	MOV DX, OFFSET MESSAGE
	INT 21H
        ...
CODE ENDS


 

 

微机原理汇编语言-实验报告(中北大学大数据学院)(前4个实验都可以直接运行,后面的几个需要用到proteus,这个要自己根据自己的情况搞,咱就不能保证在你电脑上能不能运行了) 实验一 简单程序设计 1. 编制一个简单的运算程序,并且调试完成。 2. 编制一个计算x=a2+b2 3. 验证上述结果的正确 实验二 循环、分支程序设计 1. 编制一个统计数组中正负数个数及均值的程序,并且调试完成得到正确的结果。 2. 设计计算Y=1+2+3+....,直到累加和刚好大于10000的程序并且调试完成。 3. 对给定数组中的所有元素,按从大到小的顺序排序,并且加以验证。 实验三 系统功能调用实验 1.编制一个具有屏幕提示和键盘输入的程序,键盘输入一个人名,在屏幕上显示“Hello 人名!”; 2.通过键盘输入一串包含大小写字母和数字的字符串,统计其中大写、小写字母和数字字符的个数,并将结果显示在屏幕上。 实验四 8255并行接口实验 1.将8255一个端口接8个发光二极管,用不同工作方式控制其逐次点亮发光二极管。 2.将8255另一个端口接开关,用不同工作方式,编程将开关信息在发光二极管上显示出来。 3.验证上述操作的正确性,对实验结果进行解释 实验五 键盘、LED实验 1.在实验箱上,连接小键盘和LED显示器。 2.编程将键盘输入的数字,显示在显示器上,在按键时,原来显示的数字左移一位,新按的键值显示在最右端。 3.考虑两个键组合时的输入方法 4.对实验结果进行说明 实验六 中断实验 1.连接实验箱上的数码管,通过消抖开关作为中断源。 2.编写程序,完成在中断服务程序中记录中断次数,在主程序中显示按键次数。 3.将消抖开关换成一般开关,用同样的程序,再测试,仔细观察,发现了什么,为什么? 实验七 定时/计数器实验 1.使用计数器对消抖开关的按动次数进行计数,显示当前的计数值。 2.对实验箱中系统时钟进行计数,改变计数初值(两个初值要相差很大),观察有什么不同。 3.8253的初值用0和1,观察结果,并加以分析。 4.分析实验结果,并对实验结果进行说明。 实验八 综合实验 1.将实验箱设计成一个电子表,该表能分时(或按键切换)显示年月日、时分秒; 2.设置按键,通过按键可以修正日期和时间,在修正日期、时间时,电子表仍然可以继续工作。 3.AD实验,用显示器显示当前AD的输入电压值,要求精确到小数点后2位数(选做)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值