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