问题–编写一个汇编语言程序,如果输入数字BYTE1位于b / w 50H到80H之间,则将其显示在输出PORT2上。如果BYTE1小于50H,则只需在输出PORT1上打印00H。
例子:
Input: 64H
Output: output at PORT2 -->64H
Input: 40H
Output: output at PORT1 -->00H
算法 –
- 将BYTE1加载到累加器A中。
- 将数据从累加器复制到寄存器B。
- 从累加器(BYTE)中减去50H。
- 如果减法为负,则跳转。
- 如果跳转条件为真,那么它将在PORT1处简单地打印00H。
- 如果跳转条件为假,则BYTE1将大于50H,并在进一步的说明中,还将检查BYTE1的上限80H,因此所有数字均位于50H至80H之间,这些数字将在PORT2打印。
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENT |
---|---|---|
2000 2002 2003 2004 2007 2008 2009 200A 200B 200C 200D 200E 200F |
MVI A, BYTE1 MOV B, A SUI 50H JC DELETE MOV A, B SUI 80H JC DISPLAY DELETE:XRA A OUT PORT1 HLT DISPLAY:MOV A, B OUT PORT2 HLT |
[A]<–[BYTE1] [B]<–[A] [A]<–[A-50]H Jump to DELETE, if CY=1 [A]<–[B] [A]<–[A-80]H Jump to DISPLAY, if CY=1 [A]<–[A Exclusive OR A] output the content of the accumulator at PORT1 program termination [A]<–[B] output the content of the accumulator at PORT2 program termination |
解释 –
- MVI A,BYTE1:从BYTE1加载累加器A。
- MOV B,A:将累加器的内容复制到寄存器B。
- < SUI 50H: >从累加器(BYTE1)的内容中减去50H并将其加载到累加器中。
- JC DELETE: JC是带有进位标志检查条件的跳转指令,如果减法为负,则进位标志为1;如果减法为正,则进位标志为0;如果累加器内容(BYTE1)大于或等于SUI 50H,则SUI 50H为正。等于50H。如果CY = 0,结果为正,则不执行跳转。
- MOV A,B:将寄存器B(BYTE1)的内容复制到累加器。
- SUI 80H:从累加器中减去80H。如果累加器的内容小于80H,则结果为正,如果该数字在50H至7FH范围内,它将跳至DISPLAY标签,并在PORT2处显示BYTE。
- 如果在步骤4中, JC DELETE true表示减法结果为正,则它将跳转以删除并清除累加器的内容,并在输出PORT1处显示00H。