汇编实验3

本实验使用vscode+插件编写汇编代码和调试点击查看教程

实验内容

设DATA1开始的内存单元中,存放着一串带符号字数据,要求采用排序算法(可选择,需指明采用哪种)按照从小到大的顺序排序并将排好序的数据存在DATA2开始的单元。

(选做)用C语言完成相同功能的程序(数据类型可用int),分别对其进行选项为-O1和-O2的优化,对比反汇编的程序及直接用汇编语言编写的程序(共3个,用表格列出)。

实验结果

本实验只做了排序,使用的是冒泡排序,并没有做选做内容

数据段内容(8个有符号字数据)

DSEG	SEGMENT
DATA1	DW	8,43,11,-25,1,31,65,99;数据单元
DATA2	DW	8 DUP(0);结果单元
DSEG	ENDS

空白处右键选debug调试

可以看到内存中DATA1中的8个数据和DATA2中的8个0(都是小端法存储)

输入g,然后再次查看内存,DATA1中的数据从小到大排序并保存到DATA2中

源代码

DSEG	SEGMENT
DATA1	DW	8,43,11,-25,1,31,65,99;数据单元
DATA2	DW	8 DUP(0);结果单元
DSEG	ENDS

CSEG	SEGMENT
	ASSUME	CS:CSEG,DS:DSEG
BEGIN:
	MOV	AX,DSEG
	MOV	DS,AX;将DSEG赋值为数据段
	MOV	ES,AX;将DSEG赋值为附加段
	MOV	CX,8;冒泡排序外层循环次数
OUTFOR:
	MOV	BX,0;内层循环变量初值为0
	LEA	SI,DATA1;取DATA1首地址
INFOR:
	MOV	AX,[SI];将SI所指元素赋值给AX
	CMP	AX,[SI+2];比较AX和下一个值的大小
	JLE	LEN;AX小于等于下一个值跳转
	MOV	DX,[SI+2];AX大于下一个值,则两个值交换
	MOV	[SI],DX
	MOV	[SI+2],AX
LEN:ADD	SI,2;SI加2,指向下一个值
	INC BX
	CMP	BX,CX;比较BX和CX,判断内层循环是否结束
	JB	INFOR;小于则跳转,继续比较,直至内层循环结束
	LOOP	OUTFOR;CX-1,CX不等于0跳转继续外循环,等于0则冒泡排序结束,保存结果
	MOV	CX,8;将排序后的结果传送到DATA2单元
	LEA	SI,DATA1
	LEA	DI,DATA2
	CLD;DF标志位清零
	REP	MOVSW;重复执行
	MOV	AX,4C00H;结束
	INT	21H
CSEG	ENDS;代码段结束
END	BEGIN

感谢大家的观看

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值