当前位置: 首页 > article >正文

汇编语言:从键盘输入数字字符,(计算阶乘),以无符号十进制形式输出(分支、循环程序)

1.分支结构原理

分支结构是汇编语言中的一种基本控制结构,它允许程序根据条件选择执行不同的路径。分支结构通常通过跳转(jump)指令来实现。

条件判断:

汇编语言中的条件判断通常通过比较(compare)指令来实现。比较指令将两个操作数进行比较,并根据比较结果设置状态标志(如零标志ZF、符号标志SF等)。

状态标志随后被用于控制跳转指令的行为。

跳转指令

跳转指令根据当前的状态标志来决定是否跳转以及跳转到哪里。

常见的跳转指令包括无条件跳转(如JMP)和条件跳转(如JE、JNE、JG、JL等)。

条件跳转指令根据特定的条件(如相等、不相等、大于、小于等)来决定是否执行跳转。

2.循环结构原理

循环结构是汇编语言中另一种基本控制结构,它允许程序重复执行一段代码直到满足某个条件为止。循环结构通常通过循环指令和跳转指令来实现。

循环初始化

在循环开始之前,需要初始化循环计数器(通常是一个寄存器)和循环条件。

循环体

循环体是包含要重复执行的指令的代码块。

循环更新

在每次循环迭代结束时,需要更新循环计数器。

循环条件判断

在每次循环迭代开始时,需要判断循环条件是否满足。如果满足,则继续执行循环体;如果不满足,则退出循环。

循环指令

汇编语言中可以使用LOOP指令来实现简单的循环结构。LOOP指令会自动递减循环计数器,并在计数器不为零时跳回到循环体的开始。

也可以使用其他跳转指令(如JMP)和条件判断指令来实现更复杂的循环结构。

1、编写程序,编写程序,从键盘输入数字字符(如‘1’‘2’‘6’‘a’),在程序中得到对应的数值(126),在以无符号十进制形式输出,将得到的数值输出显示。

注:乘法用的8位的BL,所以输入的数字字符最多有4位,并且前三位不能大于255

INPUTDISPLAY PROC
	PUSH AX
	PUSH BX
	PUSH CX
	PUSH DX
	MOV BL,10
    MOV DX,0
L1: 
    MOV AH,1
    INT 21H
    CMP AL,'9';输入不是数字字符跳出死循环
    JA L2
    CMP AL,'0'
    JB L2
    
    SUB AL,48
    MOV AH,0
    MOV CL,AL
    MOV CH,0
    MOV AL,DL
    MUL BL			;乘法结果不能大于255,除最后一次
    				; 所以最多只能存4位且前3位不能大于255
    ADD AX,CX		;cx放输入的数
    MOV DX,AX		;dx放结果
    
    JMP L1    ;死循环
    
L2:;将AX中的数以无符号十进制形式输出显示。
    MOV AX,DX		;最大2559
    MOV CX,SP		;用于最后判断入栈的是否出完
    
L3: 	;循环压栈(所有)
    DIV BL		;不能是DIV BX显示DIV ERROR
    PUSH AX		;PUSH AH错误
    MOV AH,0	;余数清0
    
    CMP AL,0;商大于0继续循环
    JA L3
    
       
 L4:   ;循环输出
    POP DX
    MOV DL,DH
    ADD DL,48
    MOV AH,2
    INT 21H
    
    CMP SP,CX;栈空停止
    JNE L4
    	
    POP DX
    POP CX
    POP BX
    POP AX 	
INPUTDISPLAY ENDP

2、从键盘输入1个数字字符(例如‘5’),在程序中得到对应的数值的阶乘(5!),然后在利用1中的输出功能,将得到的数值输出显示。

注:1、同样由于寄存器有限位数,只能计算1-6的阶乘

       2、由于最后输出判断用到sp与0的比较,所以用于函数需要变一下

    
    MOV BL,10;用于除法
    MOV DX,0;用于显示
    MOV CX,0;用于计算阶乘

    MOV AH,1
    INT 21H
    SUB AL,48
    MOV AH,0
    MOV CX,AX
    
L1:        ;计算阶乘结果在AX CX放需要乘的每一个数
	CMP CX,1;先判断防止输入1
	JBE L2	
    SUB CX,1
    MUL CX	;6!乘到2时大于255 不能只用8位寄存器  
    JMP L1  
    

 L2: 	;循环压栈(所有)
    DIV BL
    PUSH AX
    MOV AH,0   
    CMP AL,0;商大于0继续循环
    JA L2   
    
 L3:   ;循环输出
    POP DX
    MOV DL,DH
    ADD DL,48
    MOV AH,2
    INT 21H    
    CMP SP,0;栈空停止
    JNE L3
    


http://www.kler.cn/a/464377.html

相关文章:

  • 逻辑推理算法
  • 数字孪生:物联+数据打造洞察世界新视角
  • 项目:停车场车辆管理系统
  • uboot ,s5pv210 ,bootm分析
  • 代码随想录算法训练营第五十二天|KM101.孤岛的总面积|KM102.沉没孤岛|KM103.水流问题|KM104.建造最大岛屿
  • 数据可视化分析详解
  • Wend看源码-Java.util 工具类学习(上)
  • CertiK《Hack3d:2024年度安全报告》(附报告全文链接)
  • 【Java 学习】Comparable接口 和 Comparator接口,掌控排序逻辑解析,深入 Comparable 和 Comparator 的优雅切换
  • linux进阶
  • Kafka优势剖析-分布式架构
  • 迅为RK3568开发板编译Android12源码包-设置屏幕配置
  • [人工智能] 结合最新技术:Transformer、CLIP与边缘计算在提高人脸识别准确率中的应用
  • halcon中的BLOB与灰度直方图的分析与理解
  • 华为iotda sdk发送消息无法更新quickstartpython问题解决
  • 丢弃法hhhh
  • python中subprocess指定用户与传递环境变量
  • 【重庆】《政务数字化应用费用测算规范》(T/CDCIDA 001—2023)-省市费用标准解读系列36
  • 单片机的存储器类型
  • DC-DC 降压转换器设计提示和技巧
  • Echart实现3D饼图示例
  • 【DSP/matlab】fftshift 是什么意思?在信号处理中有什么作用?
  • C#编写的盘符图标修改器 - 开源研究系列文章
  • STM32CUBEIDE FreeRTOS操作教程(十二):std dynamic memory 标准动态内存
  • 电子应用设计方案82:智能 AI 椅子系统设计
  • 软件工程期末复习汇总