浅谈分支结构

程序的分支结构是非常常见的,本文将通过一道题浅谈汇编里的分支结构。

题目

  1. 程序执行是,显示提示信息“Please input a string (length<9):”,由用户输入一个长度小于9的字符串;
  2. 然后显示提示信息“Please input the index of the char to display”,请用户指定该串中的某个字符串的位置号,程序控制用户输入的位置号必须合法;若不合法则程序退出
  3. 程序将用户指定位置的字符串显示出来

输出样例一

Please input a string (length < 9):ABCDEFG
Please input the index of the char to display :2
The char is:C

输出样例二

Please input a string (length < 9):ABC
Please input the index of the char to display :4
The index is invalid!

代码

先上整体代码

data SEGMENTstrmess db 'Please input a string(length < 9):$'strtoolong db 0ah,0dh,'The string is too long!$'nummess db 0ah,0dh,'Please input the number(index < 4) of the char to display:$'charmess db 0ah,0dh,'the char is :$'chartoolong db 0ah,0dh,'The index is invaild!$'buf db 10,?,10 dup(0)num db ?
data ENDS
;description
code SEGMENT USE16assume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,strmessmov ah,09hint 21hlea dx,bufmov ah,0ahint 21hcmp buf+1,8          jg strlongjle strnextstrlong:lea dx,strtoolongmov ah,09hint 21hmov ax,4c00hint 21hstrnext:lea dx,nummessmov ah,09hint 21hmov ah,01hint 21hsub al,30hmov num,alcmp buf+1,aljle charlongjg charnextcharlong:lea dx,chartoolongmov ah,09hint 21hmov ax,4c00hint 21hcharnext:lea dx,charmessmov ah,09hint 21hmov bl,nummov bh,0mov dl,buf[bx+2]mov ah,02hint 21hmov ax,4c00hint 21h
code ENDS
END start
  • 运行结果

分析

这个题目首先需要利用10号调用获取用户输入,在通过判断字符串是否超过8来进行一个跳转分支,如果超过8,则输出错误信息并结束程序,正确则继续执行。

  • 通过cmp来比较返回一个值,再利用jump来实现跳转
  • sub al,30h之所以al需要减30h,是因为1号调用接受的是用户输入字符的ASCII码,而0~9的整形与其ASCII码正好相差30.

分支结构

Created with Raphaël 2.2.0 开始 我的操作 跳转命令 结束 yes no

几个跳转指令的例子

指令 同义 跳转条件
je jz 相等
jg jnle 大于
jl jnge 小于

总结

这个程序还可以加入loop循环,使用户输入不合法时,继续执行直到输入正确。汇编菜鸟一个,如有错误或者更好的方法可以在评论区指出,欢迎大家一起讨论。

汇编——从一道题目浅谈分支结构相关推荐

  1. 浅谈“三层结构”原理与用意(转帖)

    浅谈"三层结构"原理与用意 序 在刚刚步入"多层结构"Web应用程序开发的时候,我阅读过几篇关于"asp.net三层结构开发"的文章.但其多 ...

  2. java对比swith和if的不同,浅谈选择结构if语句和switch语句的区别

    1.选择结构if语句格式及其使用 A:if语句的格式: if(比较表达式1) { 语句体1; }else if(比较表达式2) { 语句体2; }else if(比较表达式3) { 语句体3; } . ...

  3. go结构体初始化_浅谈golang结构体偷懒初始化

    运行一段程序,警告: service/mysqlconfig.go:63::error: golang.guazi-corp.com/tools/ksql-runner/model.CreatingM ...

  4. 红帽linux挑战赛题目,浅谈红帽linux挑战赛(三)

    前言 当你不够强大的时候,你想要一个小小的机会,都没有:当你足够优秀的时候,你想要的一切都会主动来找你. 继上文 浅谈红帽linux挑战赛 浅谈红帽linux挑战赛(二) 继续介绍一下红帽挑战赛吧 红 ...

  5. 美国计算机教育方向相关的论文题目,浅谈美国大学计算机教育论文

    浅谈美国大学计算机教育论文 1教育理念 美国大学的计算机教育鼓励学生靠大量阅读.多做实验而不是靠死记硬背来积累知识.由于人类的记忆.精力和喜好都具有局限性,美国大学的计算机教育是把广博的知识教给学生, ...

  6. 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树......

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 上篇文章我们主要介绍了线性数据结构,本篇233酱带大家看看 无所不 ...

  7. 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树...

    上篇文章我们主要介绍了线性数据结构,本篇233酱带大家康康 无所不在的非线性数据结构之一:树形结构的特点和应用. 树形结构,是指:数据元素之间的关系像一颗树的数据结构.我们看图说话: 它具有以下特点: ...

  8. 一起来学ES —— 浅谈Nested结构

    Nested是什么? 直观的说,Nested实际上就是Object的数组.如下,这个user就是个nested结构 { "user" : [ {"first" ...

  9. 浅谈线性结构和非线性结构的区别

    在讲线性结构和非线性结构之前,我们必须了解数据结构是什么,它包含什么内容,现在我用一个图大概的表示一下. 数据结构就是一种计算机存储的方式,比如说磁盘,磁盘是用链式存储的,这样可以节省内存空间.可以看 ...

最新文章

  1. 【数字信号处理】线性常系数差分方程 ( 使用 matlab 求解 “ 线性常系数差分方程 “ 示例 | A 向量分析 | B 向量分析 | 输入序列分析 | matlab 代码 )
  2. 分布式内存数据库---Redis数据库之(键)key
  3. BZOJ1084 [SCOI2005]最大子矩阵 动态规划
  4. 微信支付api的服务器上,服务器微信支付接口笔记(与app端对接)
  5. 樊昌信版通信原理期末复习第一章绪论
  6. php遍历文件制作删除,使用PHP遍历文件目录与清除目录中文件的实现详解
  7. 从HP收购ArcSight看SIEM/MSS市场现状与格局【9月17日更新】
  8. jsonready onload 与_漫谈JSONP以及img的onLoad和onEr
  9. react中创建组件
  10. chmod 更改文件的权限
  11. 3S基础知识:在VC++中嵌入MapX的集成二次开发
  12. 京东价格监控软件开发技术探讨八:如何获取京东商品分类数据
  13. js 设计模式(23种)
  14. 第三方SSD问题引起电脑频繁重启问题IONVMeController.cpp:5499
  15. 高等数学学习笔记——第九十讲——斯托克斯公式
  16. 淘宝天猫返利查券机器人搭建
  17. Java制作JDK8文档搜索引擎项目并部署到阿里云服务器
  18. 安全距离:8...8米!?
  19. 名帖155 王献之 行书《行书帖选》
  20. handler原子锁_spring-boot-starter-current-limiting

热门文章

  1. java arraylist 求和_java-ArrayList中类对象属性的总和
  2. 移动端下拉刷新,兼容ios,Android及微信浏览器
  3. echarts 实现图表缩放功能 dataZoom自带属性实现
  4. mac 上 csv导入Excel 出现 “此文本文件包含的数据无法放置在一个工作表” 错误
  5. JVM基本原理,简明扼要,通俗易懂
  6. 刚刚!霍金向北京喊话:人类需要大胆前行,涉足无前人所及之处
  7. 自己做量化交易软件(10)通通量化AI框架的数据获取与格式
  8. 【愚公系列】2023年01月 .NET CORE工具案例-基于SqlSugar的多库多表融合查询
  9. openJudge 特殊密码锁 ACM
  10. 哪款立体声骨传导蓝牙耳机好,推荐几款目前主流的骨传导耳机