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 PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV BL,10MOV DX,0
L1: MOV AH,1INT 21HCMP AL,'9';输入不是数字字符跳出死循环JA L2CMP AL,'0'JB L2SUB AL,48MOV AH,0MOV CL,ALMOV CH,0MOV AL,DLMUL BL ;乘法结果不能大于255,除最后一次; 所以最多只能存4位且前3位不能大于255ADD AX,CX ;cx放输入的数MOV DX,AX ;dx放结果JMP L1 ;死循环L2:;将AX中的数以无符号十进制形式输出显示。MOV AX,DX ;最大2559MOV CX,SP ;用于最后判断入栈的是否出完L3: ;循环压栈(所有)DIV BL ;不能是DIV BX显示DIV ERRORPUSH AX ;PUSH AH错误MOV AH,0 ;余数清0CMP AL,0;商大于0继续循环JA L3L4: ;循环输出POP DXMOV DL,DHADD DL,48MOV AH,2INT 21HCMP SP,CX;栈空停止JNE L4POP DXPOP CXPOP BXPOP 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,1INT 21HSUB AL,48MOV AH,0MOV CX,AXL1: ;计算阶乘结果在AX CX放需要乘的每一个数CMP CX,1;先判断防止输入1JBE L2 SUB CX,1MUL CX ;6!乘到2时大于255 不能只用8位寄存器 JMP L1 L2: ;循环压栈(所有)DIV BLPUSH AXMOV AH,0 CMP AL,0;商大于0继续循环JA L2 L3: ;循环输出POP DXMOV DL,DHADD DL,48MOV AH,2INT 21H CMP SP,0;栈空停止JNE L3