一、实验要求

  1. 筛选
    要求将first行中的非负数选出到second行。
  2. 排序
    要求将second行中的数据按升序重新排列。

二、实现原理

1、筛选

选出非负数的方式很多,介绍常用的方式。
(1)比较指令
直接将数值与 0 比较:CMP AL,0
CF=0,表示大于等于 A>=B
CF=1,表示小于 A<B
用JC/JNC判断条件

(2)左移指令(逻辑、算数都可以)
判断一个数是不是负数,对于有符号数来说,8 位二进制以补码记录,所以第一位是 1:SHL AL,1(逻辑左移)
CF=0,表示为 非负数
CF=1,表示为 负数
用JC/JNC判断条件

(3)测试指令
同(2)理,用数值和 10000000B 左与运算,判断第一位为 1 还是 0:TEST AL,10000000B
结果为0,表示为 非负数
结果为1,表示为 负数
用JZ/JNZ判断条件

2、排序

排序算法有很多,我就以选择排序法来说。
一共13个数,那么从第一个开始比较,如果第一个比比较的数大,那么交换,得到最小的数,需要比较12次。
然后第一轮结束,第二轮从第二个开始,要比较11次

所以外循环要比较12次,内循环根据外循环次数同样减少。

三、代码及解释

1、N EQU $-FIRST 是指将 FIRST 的字节数赋给常数 N
−−−−取当前的偏移地址FIRST−−−−这里的FIRST是指取它的首字节的偏移地址所以,----取当前的偏移地址 FIRST ----这里的FIRST 是指取它的首字节的偏移地址 所以,−−−−取当前的偏移地址FIRST−−−−这里的FIRST是指取它的首字节的偏移地址所以,-FIRST 是指 获取内存缓冲区FIRST 的尺寸(size),即字节数。

2、排序前没有记录非负数个数,直接数的13个,直接给的值

stack    SEGMENT PARA stackDB 10 DUP('?')
stack   ENDSseg1    SEGMENTfirst  DB 5,-8,3,9,-2,-5,7,-9,0,5,4,9,-6,1,-1,8,-3,6,2,-7,0,-4N EQU $-FIRSTsecond DB 30 DUP('?')
seg1    ENDSseg2    SEGMENTASSUME   DS:seg1,CS:seg2,SS:stack
;(2)复制,选出非负数
start:  MOV AX,seg1MOV  DS,AXLEA SI,firstLEA DI,secondMOV CX,N          ;循环次数LLP:    MOV AL,[SI]Test AL,10000000bJNZ GO MOV [DI],ALINC DIGo:     INC SILOOP LLP; start:MOV  AX,seg1; MOV DS,AX; MOV CX,16H; MOV SI,OFFSET first; MOV DI,OFFSET second; SELECT:  MOV AL,[SI]; MOV DL,AL; SHL AL,1; JNC FOUND         ;左移判断CF,正负; INC SI; LOOP SELECT; FOUND:  MOV [DI],DL; INC SI; INC DI; LOOP SELECTINT 21H
;(3)second排序,选择排序法MOV CX,0CH           ;循环12SORT:  PUSH CX             ;入栈,保存CXMOV SI,OFFSET secondINNER:   MOV AL,[SI]     CMP AL,[SI+1]JBE NOSWAP            ;低于等于转,说明不需要交换,直接后面继续比较XCHG AL,[SI+1]        ;交换MOV [SI],ALNOSWAP:   INC SI              ;SI+1,LOOP INNERPOP CX              ;出栈,恢复CXLOOP SORTINT 21H
seg2    ENDSEND start

四、结果

1、筛选调式

-u :查看反编译序号
-g 001c:直接执行到筛选结束
-d ds:0000 :查看结果
-d ds:0016 :查看结果


2、排序

-u :查看反编译序号
-g 0037:直接执行到筛选结束
-d ds:0000 :查看结果
-d ds:0016 :查看结果

汇编实验二——选出非负数以及排序相关推荐

  1. 分支程序与循环程序设计-汇编实验二

    DATA SEGMENT ;定义数据段BUF DB -1, 20, 3, 30, -5, 15, 100, -54, 0, 4, 78, 99DB -12, 32, 3, 23, -7, 24, 60 ...

  2. CSAPP_实验二 拆炸弹 汇编知识应用

    CSAPP--实验二 拆炸弹 Phase1 disas phase_1, 反汇编 phase_1 函数 在 phase_1函数入口处 设置断点 break phase_1 run 开始运行,输入字符串 ...

  3. CSAPP实验二——bomb lab实验

    CSAPP实验二-- bomb lab实验 实验前准备 第一部分(phase_1) 第二部分(phase_2) 第三部分(phase_3) 第四部分(phase_4) 第五部分(phase_5) 第六 ...

  4. 哈工大计算机系统实验二——DataLab数据表示

    计算机系统实验二特别难,和上一届的实验不一样,没有学长的火炬,当时做的时候特别崩溃.幸好有一帮志同道合的伙伴们,一起慢慢把实验解决了. 把火炬传下去! 实验报告 实 验(二) 题     目 Data ...

  5. 20172328《程序设计与数据结构》实验二:树

    20172328<程序设计与数据结构>实验二:树 课程:<软件结构与数据结构> 班级: 1723 姓名: 李馨雨 学号:20172328 实验教师:王志强老师 实验日期:201 ...

  6. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十七:TFT模块 - 显示

    实验二十七:TFT模块 - 显示 所谓TFT(Thin Film Transistor)就是众多LCD当中,其中一种支持颜色的LCD,相较古老的点阵LCD(12864笑),它可谓高级了.黑金的TFT ...

  7. 0421实验二 作业调度模拟程序

    实验二作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调 ...

  8. R语言入门第三集 实验二:基本数据处理

    R语言入门第三集 实验二:基本数据处理 一.资源 [R语言]R语言数据处理--东北大学大数据班R实训第二次作业 二.答案更新纠正 2.11.从df中选取date . item_id . cate_id ...

  9. 20172319 实验二《树》实验报告

    20172319 2018.11.04-11.12 实验二<树> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1723班 学生姓名:唐才铭 学生学号:20172319 ...

  10. 【操作系统】实验二 作业调度模拟程序

    实验二作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调 ...

最新文章

  1. 京东金融晒 “打黑成绩单”:一年内避免用户损失上亿元
  2. WEB--一个不错的想法
  3. 【迁移学习(Transfer L)全面指南】CVPR(2020)元学习、小样本、领域自适应、领域泛化和迁移学习概述
  4. 文本编辑器左边显示行数
  5. 连载《一个程序猿的生命周期》-《发展篇》 - 3.农民与软件工程师,农业与IT业...
  6. 项目: 图书管理系统 【C++ / C】
  7. C#中对象的序列化与反序列化
  8. 多媒体开发之wis-stream
  9. RTTI机制(运行时类型识别)
  10. MySQL基础一些概念一些用法
  11. wps文档一敲空格就换行_wps敲空格变成点
  12. 跨界营销策划案例合集(共13份)
  13. Java编写五线谱上的音符_五线谱入门(三)——音符详解
  14. 初识Zigbee协议栈及其安装
  15. CDA LEVELⅠ2021新版模拟题一(附答案)
  16. Qt —— 录制麦克风、扬声器的声音
  17. 微信小程序商城API文档
  18. 5G无线关键技术 — 双工技术
  19. Switch使用方法
  20. 云解析DNS使用教程

热门文章

  1. 帝国cms没有标题图片就显示默认图片
  2. python批量注释快捷键wingide_WingIDE 常用快捷键
  3. python正负数转换_python – 将正/负数舍入到最接近的“整数”
  4. Error: The project seems to require yarn but it‘s not installed.
  5. 腾讯会议使用OBS虚拟摄像头
  6. 虚拟摄像头/无人直播效果分析,可替抖音/微信
  7. 名企招聘面试考题集锦
  8. nio中的Files类常用方法
  9. json parser类的使用
  10. h5 app开发 教程