汇编——从一道题目浅谈分支结构
浅谈分支结构
程序的分支结构是非常常见的,本文将通过一道题浅谈汇编里的分支结构。
题目
- 程序执行是,显示提示信息“Please input a string (length<9):”,由用户输入一个长度小于9的字符串;
- 然后显示提示信息“Please input the index of the char to display”,请用户指定该串中的某个字符串的位置号,程序控制用户输入的位置号必须合法;若不合法则程序退出
- 程序将用户指定位置的字符串显示出来
输出样例一
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.
分支结构
几个跳转指令的例子
指令 | 同义 | 跳转条件 |
---|---|---|
je | jz | 相等 |
jg | jnle | 大于 |
jl | jnge | 小于 |
总结
这个程序还可以加入loop循环,使用户输入不合法时,继续执行直到输入正确。汇编菜鸟一个,如有错误或者更好的方法可以在评论区指出,欢迎大家一起讨论。
汇编——从一道题目浅谈分支结构相关推荐
- 浅谈“三层结构”原理与用意(转帖)
浅谈"三层结构"原理与用意 序 在刚刚步入"多层结构"Web应用程序开发的时候,我阅读过几篇关于"asp.net三层结构开发"的文章.但其多 ...
- java对比swith和if的不同,浅谈选择结构if语句和switch语句的区别
1.选择结构if语句格式及其使用 A:if语句的格式: if(比较表达式1) { 语句体1; }else if(比较表达式2) { 语句体2; }else if(比较表达式3) { 语句体3; } . ...
- go结构体初始化_浅谈golang结构体偷懒初始化
运行一段程序,警告: service/mysqlconfig.go:63::error: golang.guazi-corp.com/tools/ksql-runner/model.CreatingM ...
- 红帽linux挑战赛题目,浅谈红帽linux挑战赛(三)
前言 当你不够强大的时候,你想要一个小小的机会,都没有:当你足够优秀的时候,你想要的一切都会主动来找你. 继上文 浅谈红帽linux挑战赛 浅谈红帽linux挑战赛(二) 继续介绍一下红帽挑战赛吧 红 ...
- 美国计算机教育方向相关的论文题目,浅谈美国大学计算机教育论文
浅谈美国大学计算机教育论文 1教育理念 美国大学的计算机教育鼓励学生靠大量阅读.多做实验而不是靠死记硬背来积累知识.由于人类的记忆.精力和喜好都具有局限性,美国大学的计算机教育是把广博的知识教给学生, ...
- 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树......
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 上篇文章我们主要介绍了线性数据结构,本篇233酱带大家看看 无所不 ...
- 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树...
上篇文章我们主要介绍了线性数据结构,本篇233酱带大家康康 无所不在的非线性数据结构之一:树形结构的特点和应用. 树形结构,是指:数据元素之间的关系像一颗树的数据结构.我们看图说话: 它具有以下特点: ...
- 一起来学ES —— 浅谈Nested结构
Nested是什么? 直观的说,Nested实际上就是Object的数组.如下,这个user就是个nested结构 { "user" : [ {"first" ...
- 浅谈线性结构和非线性结构的区别
在讲线性结构和非线性结构之前,我们必须了解数据结构是什么,它包含什么内容,现在我用一个图大概的表示一下. 数据结构就是一种计算机存储的方式,比如说磁盘,磁盘是用链式存储的,这样可以节省内存空间.可以看 ...
最新文章
- 【数字信号处理】线性常系数差分方程 ( 使用 matlab 求解 “ 线性常系数差分方程 “ 示例 | A 向量分析 | B 向量分析 | 输入序列分析 | matlab 代码 )
- 分布式内存数据库---Redis数据库之(键)key
- BZOJ1084 [SCOI2005]最大子矩阵 动态规划
- 微信支付api的服务器上,服务器微信支付接口笔记(与app端对接)
- 樊昌信版通信原理期末复习第一章绪论
- php遍历文件制作删除,使用PHP遍历文件目录与清除目录中文件的实现详解
- 从HP收购ArcSight看SIEM/MSS市场现状与格局【9月17日更新】
- jsonready onload 与_漫谈JSONP以及img的onLoad和onEr
- react中创建组件
- chmod 更改文件的权限
- 3S基础知识:在VC++中嵌入MapX的集成二次开发
- 京东价格监控软件开发技术探讨八:如何获取京东商品分类数据
- js 设计模式(23种)
- 第三方SSD问题引起电脑频繁重启问题IONVMeController.cpp:5499
- 高等数学学习笔记——第九十讲——斯托克斯公式
- 淘宝天猫返利查券机器人搭建
- Java制作JDK8文档搜索引擎项目并部署到阿里云服务器
- 安全距离:8...8米!?
- 名帖155 王献之 行书《行书帖选》
- handler原子锁_spring-boot-starter-current-limiting
热门文章
- java arraylist 求和_java-ArrayList中类对象属性的总和
- 移动端下拉刷新,兼容ios,Android及微信浏览器
- echarts 实现图表缩放功能 dataZoom自带属性实现
- mac 上 csv导入Excel 出现 “此文本文件包含的数据无法放置在一个工作表” 错误
- JVM基本原理,简明扼要,通俗易懂
- 刚刚!霍金向北京喊话:人类需要大胆前行,涉足无前人所及之处
- 自己做量化交易软件(10)通通量化AI框架的数据获取与格式
- 【愚公系列】2023年01月 .NET CORE工具案例-基于SqlSugar的多库多表融合查询
- openJudge 特殊密码锁 ACM
- 哪款立体声骨传导蓝牙耳机好,推荐几款目前主流的骨传导耳机